run logs delete logging kubernetes google-container-engine google-kubernetes-engine

logging - logs - kubectl scale



¿Cómo obtengo registros de todos los pods de un controlador de replicación Kubernetes? (10)

He creado un pequeño script de bash llamado kubetail que lo hace posible. Por ejemplo, para seguir todos los registros de pods llamados "app1" puede hacer:

kubetail app1

Puedes encontrar el guión here .

Ejecutar kubectl logs me muestra el stderr / stdout de un contenedor Kubernetes.

¿Cómo puedo obtener el stderr / stdout agregado de un conjunto de pods, preferiblemente aquellos creados por un determinado controlador de replicación?


Las soluciones proporcionadas anteriormente no son tan óptimas. El equipo de Kubernetes ha proporcionado una solución hace un tiempo, llamada popa.

stern app1

También coincide con expresiones regulares y hace cola y -f (seguir) por defecto. Una buena ventaja es que también te muestra el pod que generó el registro.

app1-12381266dad-3233c foobar log app1-99348234asd-959cc foobar log2

Tome el go-binary para linux o instálelo a través de brew para OSX.

https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/

https://github.com/wercker/stern


No estoy seguro de si esto es algo nuevo, pero con las implementaciones es posible hacerlo así:

kubectl logs deployment/app1


Para construir sobre la respuesta anterior si agrega -f puede seguir los registros.

#!/usr/bin/env bash DEPLOYMENT=$1 for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d '' ''); do echo --------------------------- echo $p echo --------------------------- kubectl logs $p done


Puede obtener ayuda de kubectl logs -h y según la información,

kubectl logs -f deployment/myapp -c myapp --tail 100

-c es el nombre del contenedor y --tail mostrará las últimas líneas --tail , pero esto elegirá un pod de la implementación, no todos los pods. Esto es algo que debes tener en cuenta.

kubectl logs -l app=myapp -c myapp --tail 100

Si desea mostrar registros de todos los pods, puede usar -l y especificar una etiqueta, pero al mismo tiempo -f no se usará.


Puede obtener los registros de varios contenedores utilizando etiquetas como sugirió Adrian Ng:

kubectl logs --selector app=yourappname

En caso de que tenga un pod con varios contenedores, el comando anterior fallará y deberá especificar el nombre del contenedor:

kubectl logs --selector app=yourappname --container yourcontainername

Nota: Si desea ver qué etiquetas están disponibles para usted, el siguiente comando las enumerará todas:

kubectl get pod <one of your pods> -o template --template=''{{.metadata.labels}}''

... donde la salida se verá algo así

map [aplicación: yourappname controller-revision-hash: 598302898 pod-template-generation: 1]

Tenga en cuenta que algunas de las etiquetas pueden no ser compartidas por otros pods: elegir "aplicación" parece ser la más fácil


Puedes usar etiquetas

kubectl logs -l app=elasticsearch


Si las vainas se nombran significativamente, se podría usar Plain Old Bash simple:

keyword=nodejs command="cat <(" for line in $(kubectl get pods | / grep $keyword | grep Running | awk ''{print $1}''); do command="$command (kubectl logs --tail=2 -f $line &) && " done command="$command echo)" eval $command

Explicación: Recorra los pods en ejecución con un nombre que contenga "nodejs". Siga el registro de cada uno de ellos en paralelo (ampersand único se ejecuta en segundo plano) asegurándose de que si alguno de los pods falla, todo el comando sale (doble ampersand) Cat las secuencias de cada uno de los comandos de cola en una secuencia única. Eval es necesario para ejecutar este comando creado dinámicamente.



Utilizo este script simple para obtener un registro de los pods de una implementación:

kubectl logs -f deployment/app

La esencia del guión

Uso: log_deployment.sh "nombre-implementación".

La secuencia de comandos mostrará el registro de todos los pods que comienzan con ese "nombre de implementación".