Investigar el estado de un clúster con kubectl


Para diagnosticar la causa raíz de los problemas de Google Kubernetes Engine (GKE), a menudo es necesario inspeccionar en detalle el estado, la configuración y los eventos de tus recursos de Kubernetes. Para ir más allá de los síntomas superficiales, necesitas herramientas para consultar directamente el plano de control del clúster e interactuar con él.

En esta página se explican los comandos esenciales de kubectl para investigar el estado activo de tu clúster. Aprender estos comandos te permite obtener información detallada directamente del plano de control de Kubernetes, lo que te ayuda a entender por qué se produce un problema.

Esta información es importante para los administradores y operadores de la plataforma que necesitan realizar comprobaciones de estado detalladas de los clústeres, gestionar recursos y solucionar problemas de infraestructura a nivel granular. También es esencial para los desarrolladores de aplicaciones, ya que les permite depurar el comportamiento de las aplicaciones, inspeccionar los registros y eventos de los pods, y verificar el estado exacto de sus implementaciones en el entorno de Kubernetes. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud

Antes de empezar

Antes de empezar, realiza las siguientes tareas:

  • Instala kubectl.
  • Configura la herramienta de línea de comandos kubectl para que se comunique con tu clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster.
    • LOCATION: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.
  • Revisa tus permisos. Para comprobar si tienes los permisos necesarios para ejecutar comandos de kubectl, usa el comando kubectl auth can-i. Por ejemplo, para ver si tienes permiso para ejecutar kubectl get nodes, ejecuta el comando kubectl auth can-i get nodes.

    Si tienes los permisos necesarios, el comando devuelve yes. De lo contrario, devuelve no.

    Si no tienes permiso para ejecutar un comando kubectl, puede que veas un mensaje de error similar al siguiente:

    Error from server (Forbidden): pods "POD_NAME" is forbidden: User
    "USERNAME@DOMAIN.com" cannot list resource "pods" in API group "" in the
    namespace "default"
    

    Si no tienes los permisos necesarios, pide al administrador del clúster que te asigne los roles necesarios.

Obtener un resumen de lo que se está ejecutando

El comando kubectl get te ayuda a ver una vista general de lo que ocurre en tu clúster. Usa los siguientes comandos para ver el estado de dos de los componentes de clúster más importantes: los nodos y los pods:

  1. Para comprobar si tus nodos están en buen estado, consulta los detalles de todos los nodos y sus estados:

    kubectl get nodes
    

    El resultado debería ser similar al siguiente:

    NAME                                        STATUS   ROLES    AGE     VERSION
    
    gke-cs-cluster-default-pool-8b8a777f-224a   Ready    <none>   4d23h   v1.32.3-gke.1785003
    gke-cs-cluster-default-pool-8b8a777f-egb2   Ready    <none>   4d22h   v1.32.3-gke.1785003
    gke-cs-cluster-default-pool-8b8a777f-p5bn   Ready    <none>   4d22h   v1.32.3-gke.1785003
    

    Si el estado es otro, Ready, se debe investigar más a fondo.

  2. Para comprobar si tus pods están en buen estado, consulta los detalles de todos los pods y sus estados:

    kubectl get pods --all-namespaces
    

    El resultado debería ser similar al siguiente:

    NAMESPACE   NAME       READY   STATUS      RESTARTS   AGE
    kube-system netd-6nbsq 3/3     Running     0          4d23h
    kube-system netd-g7tpl 3/3     Running     0          4d23h
    

    Si el estado es otro, Running, se debe investigar más a fondo. Estos son algunos de los estados habituales que pueden aparecer:

    • Running: un estado de funcionamiento correcto.
    • Pending: el pod está esperando a que se programe en un nodo.
    • CrashLoopBackOff: los contenedores del pod fallan repetidamente en un bucle porque la aplicación se inicia, se cierra con un error y, a continuación, Kubernetes la reinicia.
    • ImagePullBackOff: el Pod no puede extraer la imagen del contenedor.

Los comandos anteriores son solo dos ejemplos de cómo puedes usar el comando kubectl get. También puedes usar el comando para obtener más información sobre muchos tipos de recursos de Kubernetes. Para ver una lista completa de los recursos que puedes consultar, consulta kubectl get en la documentación de Kubernetes.

Más información sobre recursos específicos

Una vez que hayas identificado un problema, tendrás que obtener más información. Por ejemplo, un problema podría ser un pod que no tenga el estado Running. Para obtener más información, usa el comando kubectl describe.

Por ejemplo, para describir un pod específico, ejecuta el siguiente comando:

kubectl describe pod POD_NAME -n NAMESPACE_NAME

Haz los cambios siguientes:

  • POD_NAME: el nombre del Pod que tiene problemas.
  • NAMESPACE_NAME: el espacio de nombres en el que se encuentra el pod. Si no sabes cuál es el espacio de nombres, consulta la columna Namespace de la salida del comando kubectl get pods.

El resultado del comando kubectl describe incluye información detallada sobre tu recurso. Estas son algunas de las secciones más útiles que puedes consultar cuando tengas problemas con un pod:

  • Status: el estado actual del Pod.
  • Conditions: el estado general y la disponibilidad del pod.
  • Restart Count: número de veces que se han reiniciado los contenedores del pod. Un número elevado puede ser motivo de preocupación.
  • Events: un registro de las cosas importantes que le han ocurrido a este pod, como si se ha programado en un nodo, si se ha extraído su imagen de contenedor y si se ha producido algún error. En la sección Events, a menudo puedes encontrar pistas directas sobre por qué falla un pod.

Al igual que con el comando kubectl get, puedes usar el comando kubectl describe para obtener más información sobre varios tipos de recursos. Para ver una lista completa de los recursos que puedes consultar, consulta kubectl describe en la documentación de Kubernetes.

Siguientes pasos