La ejecución kubectl logs
me muestra el stderr / stdout de un contenedor de Kubernetes.
¿Cómo puedo obtener el stderr / stdout agregado de un conjunto de pods, preferiblemente los creados por un determinado controlador de replicación?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
fuente
fuente
Respuestas:
Puedes usar etiquetas
fuente
--all-namespaces
.-f
ahora (a partir de Kubernetes 1.12+ /kubectl
1.12+). También @Shubham: muestra los mensajes en el orden en que se recibieron, no hay etiquetas ni nada en las líneas de registro. Esto es solo para una depuración rápida. Si necesita más detalles del registro, deberá enviar sus registros a un sistema de registro central como EFK, SumoLogic, Datadog, etc.He creado un pequeño script de bash llamado
kubetail
que lo hace posible. Por ejemplo, para seguir todos los registros de los pods denominados "app1", puede hacer lo siguiente:Puedes encontrar el guion aquí .
fuente
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
documentación detallada:kt -h
¡Impresionante!Puede obtener los registros de varios contenedores utilizando etiquetas como sugirió Adrian Ng:
En caso de que tenga un pod con varios contenedores, el comando anterior fallará y deberá especificar el nombre del contenedor:
Nota: Si desea ver qué etiquetas están disponibles para usted, el siguiente comando las enumerará todas:
... donde la salida se verá algo así como
Tenga en cuenta que es posible que otros grupos de anuncios no compartan algunas de las etiquetas; elegir "aplicación" parece lo más fácil
fuente
Para construir sobre la respuesta anterior, si agrega
-f
, puede seguir los registros.fuente
Las soluciones proporcionadas anteriormente no son tan óptimas. El propio equipo de kubernetes ha proporcionado una solución hace un tiempo, llamada stern.
También coincide con expresiones regulares y hace cola y -f (seguir) de forma predeterminada. Un buen beneficio es que también le muestra el pod que generó el registro.
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
fuente
Utilizo este sencillo script para obtener un registro de los pods de una implementación:
Esencia del guión
Uso: log_deployment.sh "nombre-despliegue".
Luego, el script mostrará el registro de todos los pods que comienzan con ese "nombre de implementación".
fuente
Una opción es configurar el registro del clúster a través de Fluentd / ElasticSearch como se describe en https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Una vez que los registros están en ES, es fácil aplicar filtros en Kibana para ver los registros de ciertos contenedores.
fuente
Puede obtener ayuda de
kubectl logs -h
y de acuerdo con la información,-c
es el nombre del contenedor y--tail
mostrará las últimas líneas numéricas, pero esto elegirá un pod de la implementación, no todos los pods. Esto es algo que debes tener en cuenta.Si desea mostrar registros de todos los pods, puede usar
-l
y especificar una etiqueta, pero al mismo tiempo-f
no se usará.fuente
También puede hacer esto por nombre de servicio.
Primero, intente encontrar el nombre del servicio del pod respectivo que corresponda a varios pods del mismo servicio.
kubectl get svc
.A continuación, ejecute el siguiente comando para mostrar los registros de cada contenedor.
fuente
En este ejemplo, puede reemplazar
<namespace>
y<app-name>
para obtener los registros cuando hay varios contenedores definidos en un pod.fuente
Si las vainas tienen un nombre significativo, se podría usar un simple Plain Old Bash:
Explicación: Recorra pods en ejecución cuyo nombre contenga "nodejs". Haga cola en el registro de cada uno de ellos en paralelo (un único signo comercial se ejecuta en segundo plano) asegurándose de que si alguno de los módulos falla, todo el comando salga (doble signo comercial). Transfiera las transmisiones de cada uno de los comandos de cola a una transmisión única. Se necesita Eval para ejecutar este comando construido dinámicamente.
fuente
Yo uso este comando.
fuente
No estoy seguro de si esto es algo nuevo, pero con las implementaciones es posible hacerlo así:
fuente