Ver los registros del pod suele ser el primer paso para diagnosticar un problema con las cargas de trabajo de su clúster. Aquí se explica cómo usar Kubectl para transmitir registros en vivo a su terminal, lo que le permite inspeccionar la salida de su aplicación.
Cómo empezar
Asegúrese de tener Kubectl instalado y conectado a su clúster. Puede especificar un archivo Kubeconfig configurando KUBECONFIG
variable de entorno en su shell:
export KUBECONFIG=~/.kube/my-cluster.yaml
Luego use Kubectl para listar sus Pods:
kubectl get pods
Recuerde agregar el --namespace
marca cuando tus pods viven fuera del espacio de nombres predeterminado:
kubectl --namespace my-namespace get pods
Agregar un alias temporal a su shell es una buena manera de acortar este paso, ya que lo ayuda a ejecutar varios comandos en el mismo espacio de nombres:
alias k="kubectl --namespace my-namespace"
k get pods
Acceso a los registros de pod
Los kubectl logs
El comando le permite inspeccionar los registros producidos por un Pod con nombre:
kubectl logs pod-name
Los registros existentes del Pod se emitirán a su terminal. Cuando el Pod está formado por más de un contenedor, también debe especificar el nombre del contenedor que desea inspeccionar:
kubectl logs pod-name container-name
Alternativamente, configure el --all-containers
marca para incluir líneas de registro producidas por cualquiera de los contenedores en el Pod. Tenga en cuenta que podría ver resultados detallados y repetitivos cuando esta marca se usa contra un Pod ocupado:
kubectl logs pod-name --all-containers
También puede obtener los registros de un conjunto de pods con una etiqueta determinada. Esto le permite agregar registros de diferentes pods, siempre que todos compartan la misma etiqueta:
kubectl logs -l my-label=my-value --all-containers
Registros de transmisión continua
Los logs
simples El comando emite los registros de Pod almacenados actualmente y luego sale. Agregue el -f
(--follow
) al comando para seguir los registros y transmitirlos en vivo a su terminal.
Kubectl emitirá cada nueva línea de registro en su terminal hasta que detenga el comando con Ctrl+C. Esto es equivalente a usar tail -f
con un archivo de registro local en un entorno no contenedorizado.
Ver registros antiguos
kubectl logs
no incluirá líneas de registro producidas por contenedores antiguos que alguna vez fueron miembros de Pod pero que desde entonces han sido reemplazados. Se puede acceder a estos registros agregando -p
(--previous
) bandera.
Luego, Kubectl mostrará la totalidad del registro almacenado para el Pod, incluidas las líneas que fueron emitidas por contenedores que desde entonces han sido terminados.
Obtención de registros recientes
A veces no es necesario ver todo el flujo de registro. Kubectl admite un --since
indicador que muestra las líneas de registro emitidas después de un tiempo determinado:
kubectl logs pod-name --since=2h
Este comando mostrará la salida del registro de pod-name
que se produjo en las últimas dos horas. Otra variante, --since-time
, admite una cadena de marca de tiempo compatible con RFC3339 en lugar de la expresión de tiempo relativo que se muestra arriba.
El --tail
flag es otra opción para condensar registros. Esto limita la cantidad de líneas que se muestran, evitando una terminal completa cuando solo necesita ver una salida muy reciente:
# Shows the last 10 lines of the log
kubectl logs pod-name --tail=10
Kubectl no muestra marcas de tiempo de línea de forma predeterminada, ya que muchas aplicaciones ya las incluyen en su salida de registro. Agrega el --timestamps
marque para que Kubectl agregue marcas de tiempo al comienzo de las líneas cuando su carga de trabajo no las proporcione.
También puede anteponer los nombres de los pods y contenedores inspeccionados a las líneas de registro. Esta funcionalidad se activa con el --prefix
bandera. Se puede combinar con --timestamps
para mostrar la hora en que se creó cada línea y la fuente de la que se originó.
Acceder a registros desde otros tipos de recursos
kubectl logs
funciona con recursos de trabajo e implementación además de pods:
kubectl logs job/my-job
kubectl logs deployment/my-deployment
Obtendrá los registros del primer contenedor dentro del trabajo o implementación. Use --all-containers
marcar para mostrar los registros creados por cualquiera de los contenedores coincidentes. Puede usar todas las marcas descritas anteriormente, ya sea que esté viendo un pod, una implementación o un trabajo.
Administración de registros más avanzada
Kubectl no incluye una forma de filtrar, buscar o transformar sus registros. Lo mejor es canalizar los kubectl logs
salida en herramientas de terminal establecidas como awk
, grep
o sed
para este propósito.
kubectl logs my-pod | grep search-expression
Del mismo modo, use las funciones de redirección existentes en su shell para guardar registros en un archivo:
kubectl logs my-pod > my-pod-logs.txt
Resumen
Kubectl le permite acceder a los registros de sus recursos, ya sea por contenedor o en conjunto. Puede ver una instantánea de los registros recopilados actualmente, transmitir continuamente nuevas líneas a su terminal y acceder a líneas históricas emitidas por contenedores terminados.
El comando viene con algunas opciones de personalización limitadas, incluido un limitador de conteo de líneas y un filtrado de fecha simple. Cuando se necesite un análisis más exigente, canalice la salida a los comandos de terminal de Unix para analizar rápidamente sus registros y encontrar las causas de los errores en sus aplicaciones.
Kubectl recopila registros de los flujos de error y salida estándar de sus contenedores. Es importante asegurarse de escribir la salida en estos flujos correctamente, ya que un contenedor mal configurado dará como resultado una salida vacía cuando ejecute kubectl logs
.