Soluciona problemas de registro de nodos


En este documento, se describe cómo resolver problemas experimentados cuando se agregan nodos al clúster de Google Kubernetes Engine (GKE) Standard. Algunas de las situaciones en las que ocurren estos problemas incluyen la creación de clústeres y la creación de grupos de nodos, y durante los eventos de escalamiento vertical.

Para resolver problemas con los clústeres de Autopilot de GKE, consulta Soluciona problemas de los clústeres de Autopilot.

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.

Acerca del registro de nodos

Los nodos son instancias de VMs de Compute Engine que GKE crea en tu nombre. Cuando se agrega un nodo nuevo a un clúster de GKE, se debe registrar con el plano de control del clúster. Este proceso, llamado registro de nodos o inicio de nodos, ocurre cuando se crea un nodo.

Cuándo se produce el registro de nodos

El registro de nodos se produce cada vez que se crean nodos, incluidas las siguientes situaciones:

El proceso de registro de nodos sigue estos pasos:

  1. El recuento de nodos establecido para el grupo de nodos se replica en los grupos de instancias administrados (MIG).
  2. Los MIG crean la cantidad necesaria de instancias de VMs.
  3. Para cada instancia de VM que se crea, realiza lo siguiente:

    1. Se inicia la instancia de VM.
    2. La instancia de VM configura e instala los paquetes necesarios para ejecutarse como un nodo de Kubernetes.
    3. El kubelet que se ejecuta en la instancia de VM se comunica con el servidor de API del plano de control para registrarse como un nodo.

Mensaje de error de registro de nodos

Cuando GKE intenta agregar nodos a tu clúster, aparece el siguiente error en la consola de Google Cloud si falla el registro de nodos:

  All cluster resources were brought up, but: only 0 nodes out of * have
  registered; this is likely due to the Nodes failing to start correctly; try
  re-creating the cluster or contact support if that doesn't work.

Este mensaje de error indica que los nodos no se registraron de forma correcta con el clúster. En las siguientes secciones, se describen algunas de las posibles causas de este error.

Requisitos para el registro correcto de nodos

El registro correcto de nodos en un clúster de GKE depende de factores como los siguientes:

  • Conectividad de red.
  • Disponibilidad de recursos.
  • Permisos de las cuentas de servicio.

Requisitos para la creación de instancias

Cuando GKE crea un nodo para el clúster, el primer paso es crear una instancia de VM nueva de Compute Engine.

La creación de la instancia puede fallar por uno de los siguientes motivos:

La creación de instancias con errores significa que, en el intervalo de tiempo durante el cual GKE intentó crear la instancia a fin de registrarse como un nodo de GKE, faltan registros para la creación de instancias, ya que estas nunca se crearon. A fin de verificar los registros que faltan, consulta las instrucciones para encontrar una instancia que falló en el registro de nodos.

Permisos de las cuentas de servicio

Los nodos de GKE tienen una cuenta de servicio de IAM asociada. De forma predeterminada, esta cuenta de servicio es la cuenta de servicio predeterminada de Compute Engine. Recomendamos endurecer tu clúster mediante una cuenta de servicio de IAM personalizada que tenga los permisos mínimos necesarios.

Esta cuenta de servicio debe tener los permisos correctos para que las instancias de VMs se inicialicen como nodos de GKE. Si borras la cuenta de servicio, la inhabilitas o no le otorgas los permisos correctos, el registro de nodos puede fallar.

Requisitos para la conexión de red a los servicios y las APIs de Google

La instancia de VM descarga paquetes a fin de prepararse para ejecutarse como un nodo de GKE, y un tiempo de espera de conexión puede significar que tu clúster no cumplió con los requisitos de red necesarios para conectarse a los servicios y las APIs de Google, como storage.googleapis.com. Si una instancia no se puede conectar a estos servicios, no podrá descargar la distribución de Kubernetes y completar el proceso de registro de nodos.

Según tu conexión de red, permitir esta conexión puede implicar configurar el Acceso privado a Google o tener reglas de firewall y rutas en la red de nube privada virtual (VPC) de tu clúster que permite la conexión.

Requisitos para la conexión de red con el plano de control

La conectividad entre el plano de control y los nodos es fundamental para el registro de nodos y la función normal. De forma predeterminada, esta comunicación está habilitada. Asegúrate de que, cuando se implementan reglas de firewall de VPC, la comunicación entre los nodos y el plano de control aún esté permitida.

Para obtener más información, consulta Permite la conectividad del plano de control.

Usa el verificador de registro de nodos para solucionar problemas de registro de nodos

Para los grupos de nodos creados en la versión 1.24.0-gke.100 de GKE o una posterior, una utilidad llamada Verificador de registro de nodos se ejecuta en las instancias recién creadas y verifica si esta completó los pasos de registro de nodos correctamente.

Cuando falla el registro de nodos, la utilidad genera un informe resumido en el que puedes ver qué requisitos no se cumplieron según la parte del proceso donde falló la instancia.

Usa las instrucciones de la siguiente sección para encontrar una instancia que falló el registro de nodos y el resumen del Verificador de registro de nodos para saber por qué falló.

Si no puedes usar el Verificador de registro de nodos en tu grupo de nodos, consulta Soluciona problemas de registro de nodos sin el Verificador de registro de nodos.

Busca una instancia que falló el registro de nodos

Cuando una o más instancias no se registran como nodos con el plano de control de tu clúster de GKE, puedes ver la cantidad de instancias que fallaron en el mensaje de error que se muestra en la página de detalles del clúster de la consola de Google Cloud. Cuando varias instancias no se registran a la vez, puede deberse al mismo motivo subyacente. Debido a esto, puedes usar una de las instancias con errores para investigar por qué fallaron todas las instancias.

Sin embargo, debido a que las instancias no se registraron como nodos de GKE, debes usar las siguientes instrucciones para encontrar los nombres de las VMs subyacentes de Compute Engine que no se pudieron registrar.

  1. En la consola de Google Cloud, ve a la página Explorador de registros.

    Ir al Explorador de registros

  2. Usa el siguiente filtro para encontrar los registros de creación de la instancia de VM:

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE"
    protoPayload.response.status="RUNNING"
    

    Reemplaza PROJECT_ID por el ID del proyecto de tu clúster.

  3. Usa el histograma que se encuentra debajo del filtro de registros para limitar el intervalo de tiempo en el que se debe haber creado el nodo.

  4. Haz clic en uno de los registros que aparecen en Resultados de la consulta y, luego, en Expandir campos anidados para mostrar más detalles.

  5. Busca el campo protoPayload.resourceName. La parte final de la ruta de acceso enumerada es el nombre de la instancia. Los nombres de las instancias siguen un formato que comienza con el nombre del clúster y el nombre del grupo de nodos, por ejemplo:

    gke-cluster-1-default-pool-b0ac62d3-9g1v es una instancia para el grupo de nodos default-pool en gke-cluster-1.

  6. En la consola de Google Cloud, ve a la página Instancias de VM de Compute Engine:

    Ir a Instancias de VM

    Busca el nombre de la instancia de VM con el filtro. Haz clic para obtener más información.

Soluciona problemas de una instancia con el Verificador de registro de nodos

Después de encontrar el nombre de la instancia que no se registró, puedes usar el Verificador del registro de nodos para investigar por qué falló.

En la pestaña Detalles de la instancia de VM, en la sección Registros, haz clic en Puerto en serie 1 (consola).

Para los grupos de nodos creados en la versión 1.24.0-gke.100 de GKE o una posterior, el resultado de las instancias recién creadas incluye lo siguiente, lo que indica que se inició el Verificador de registro de nodos:

** Starting Node Registration Checker **
** Loading variables from kube-env **
** Sleeping for 7m to allow registration to complete  **

Si el registro de nodos se realiza de forma correcta, el resultado incluye los siguientes mensajes:

** Node ready and registered. **
** Completed running Node Registration Checker **

Si no ves estos mensajes, significa que el registro de nodos falló y el verificador de registro de nodos generó un informe que resume los motivos de este error. Busca el siguiente mensaje adicional para ver el resumen:

** Here is a summary of the checks performed: **

Debajo de este mensaje, busca una tabla similar a la siguiente:

------------------------------
Service    DNS      Reachable
------------------------------
LOGGING    true     true
GCR        true     true
GCS        true     true
Master     N/A      false
------------------------------

Si LOGGING, GCR o GCS se muestran como no accesibles, verifica los permisos de la cuenta de servicio para el registro de nodos y la conexión de red a APIs y servicios de Google para el registro de nodos.

Si Master se muestra como no accesible, verifica los requisitos previos para la conexión de red con el plano de control para el registro de nodos.

Después de resolver todos los problemas que impiden que el registro de nodos se realice de forma correcta, consulta Completa el registro de nodos después de corregir la causa raíz.

Si los pasos anteriores no indican por qué falló el registro del nodo, consulta Recopila información para una investigación más detallada.

Soluciona problemas de registro de nodos sin el Verificador de registro de nodos

Si el registro de nodos falló en un grupo de nodos creado en una versión de GKE anterior a la 1.24.0-gke.100, solo puedes solucionar problemas de registro de nodos de forma manual. Si tu grupo de nodos se creó en la versión 1.24.0-gke.100 o posterior de GKE, sigue las instrucciones para usar el verificador de registro de nodos para solucionar problemas de registro de nodos.

Después de resolver todos los problemas que impiden el registro correcto de los nodos, usa las siguientes instrucciones para completar el registro de nodos después de corregir la causa raíz.

Si ninguno de los pasos de investigación de esta página indica por qué falló el registro de nodos, consulta Recopila información para una investigación más detallada.

Verifica los permisos de la cuenta de servicio para el registro de nodos

La cuenta de servicio que usen los nodos debe cumplir con los requisitos de permisos para el registro de nodos. Usa las siguientes instrucciones para verificar que cumples con estos requisitos:

  1. Busca una instancia que falló el registro de nodos.

  2. En la pestaña Detalles de la instancia de VM, en la sección Administración de identidades y APIs, busca el nombre de la cuenta de servicio en el campo Cuenta de servicio. Si el nodo usó la cuenta de servicio predeterminada de Compute Engine, el nombre sigue el formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Esta cuenta de servicio debe tener los permisos mínimos necesarios.

  3. Busca indicadores de registro correcto en el resultado de la consola en serie. En la pestaña Detalles de la instancia de VM, en la sección Registros, haz clic en Puerto en serie 1 (consola).

    Si la instancia usó una cuenta de servicio con los permisos correctos, el resultado incluirá lo siguiente:

    • Started Download and install k8s binaries and configurations
    • Started Docker Application Container Engine.
    • Started Configure kubernetes node.
    • Reached target Kubernetes.

    Estos mensajes se encontrarán en diferentes lugares de este resultado. También pueden tener marcas de tiempo o cualquier otro artefacto que las interrumpa, como este: Starting [0;1;39mConfigure kubernetes node. Si ves todos estos mensajes, se cumplieron los requisitos de la cuenta de servicio.

    Si no ves estos mensajes, es posible que la cuenta de servicio asignada a la instancia de VM se haya borrado, inhabilitado o que no tenga los permisos correctos.

Verifica la conexión de red a los servicios y las APIs de Google para el registro de nodos

Verifica la conexión con acceso SSH

Si tienes acceso SSH a instancias de VM en tu proyecto, también puedes verificar que la instancia de VM tenga una conexión de red a las APIs y los servicios de Google.

  1. Busca una instancia que falló el registro de nodos.

  2. En la pestaña Detalles de la instancia de VM, haz clic en SSH.

  3. Después de conectarte a la línea de comandos de tu instancia de VM, ejecuta el siguiente comando para verificar la conexión con las APIs y los servicios de Google:

    curl -m 5 -v https://storage.googleapis.com/generate_204
    

    Si la operación se realiza de forma correcta, el resultado es similar al siguiente:

    *   Trying 142.250.148.128:443...
    * Connected to storage.googleapis.com (142.250.148.128) port 443 (#0)
    
    ...
    
    < HTTP/1.1 204 No Content
    < Content-Length: 0
    < Cross-Origin-Resource-Policy: cross-origin
    < Date: Wed, 04 Jan 2023 00:58:41 GMT
    <
    * Connection #0 to host storage.googleapis.com left intact
    

    Si la conexión no se realiza de forma correcta, el resultado es similar al siguiente:

    *   Trying 142.250.148.128:443...
    * Connection timed out after 5000 milliseconds
    * Closing connection 0
    curl: (28) Connection timed out after 5000 milliseconds```
    

    Si se agota el tiempo de espera de la conexión y la dirección IP que se muestra está dentro del rango de direcciones IP 199.36.153.0/24, verifica que tu clúster cumpla con los requisitos de red para conectarte a los servicios y las APIs de Google. Si se agota el tiempo de espera de la conexión y la dirección IP que se muestra no está dentro del rango de direcciones IP mencionado, verifica si hay reglas de firewall que bloqueen el tráfico saliente o rutas mal configuradas en la red de VPC de tu clúster.

    Mantén abierta la conexión SSH a la instancia de VM y continúa con la siguiente sección.

Verifica la conexión sin acceso SSH mediante pruebas de conectividad

Si no tienes Acceso SSH a instancias de VM, usa Pruebas de conectividad para verificar que la instancia de VM tenga una conexión a las APIs y los servicios de Google.

  1. Busca una instancia que falló el registro de nodos.

  2. Crea y ejecuta pruebas de conectividad con la instancia de VM como Fuente y storage.googleapis.com TCP/443 como Destino.

    Usa los resultados de la prueba para verificar la configuración de red de tu clúster.

Verifica la conexión de red con el plano de control para el registro de nodos

Si tienes acceso SSH a instancias de VMs en tu proyecto, puedes verificar si la instancia de VM tiene una conexión de red con el plano de control del clúster.

  1. Busca una instancia que falló el registro de nodos.

  2. En la pestaña Detalles de la instancia de VM, haz clic en SSH.

  3. Después de conectarte a la línea de comandos para la instancia de VM, guarda el extremo del plano de control del clúster como una variable de entorno:

    source <(sudo grep KUBERNETES_MASTER_NAME /home/kubernetes/kube-env)
    
  4. Envía una solicitud GET al extremo del plano de control:

    curl -k -m 5  https://${KUBERNETES_MASTER_NAME}/version
    

    Si el resultado es similar al siguiente, la instancia de VM puede establecer una conexión con el plano de control:

    {
    "major": "1",
    "minor": "24",
    "gitVersion": "v1.24.7-gke.900",
    "gitCommit": "e35c4457f66187eff006dda6d2c0fe12144ef2ec",
    "gitTreeState": "clean",
    "buildDate": "2022-10-26T09:25:34Z",
    "goVersion": "go1.18.7b7",
    "compiler": "gc",
    "platform": "linux/amd64"
    }
    

    Si el resultado es similar al siguiente, la instancia de VM no puede establecer una conexión con el plano de control:

    curl: (28) Connection timed out after 5000 milliseconds
    

Si la instancia de VM no puede establecer una conexión con el plano de control, consulta la sección sobre cómo permitir la conectividad con el plano de control en las prácticas recomendadas de herramientas de redes de GKE.

Completa el registro del nodo después de corregir la causa raíz

Después de resolver el problema que bloquea el registro de nodos, la forma en que puedes proceder depende del contexto de la falla:

  • Si el registro de nodos falló durante la creación del clúster, borra el clúster y vuelve a intentarlo.
  • Si el registro de nodos falló durante el escalamiento vertical con el escalador automático del clúster, espera a que las instancias de VMs intenten registrarse nuevamente.
  • Si el registro de nodos falló en la creación del grupo de nodos:
    • Si se crearon las instancias de VMs, espera a que las instancias de VMs intenten registrarse otra vez.
    • Si las instancias de VMs no se crearon, borra el grupo de nodos y vuelve a intentarlo.
  • Si el registro de nodos falló cuando se cambió el tamaño del clúster, vuelve a ejecutar el comando para aumentar el tamaño de tu clúster.
  • Si el registro de nodos falló fuera del alcance de una operación, como durante una operación de reparación, espera a que las instancias de VMs intenten registrarse otra vez.

Recopila información para una investigación más detallada

Si no puedes resolver el problema de registro de nodos, puedes recopilar información adicional para ayudar en la investigación de Atención al cliente de Cloud con las siguientes instrucciones. Estos pasos requieren acceso SSH a instancias de VMs en tu proyecto y usar la utilidad sosreport, que se incluye en las imágenes de COS.

  1. Busca una instancia que falló el registro de nodos.

  2. Recopila información de depuración con sosreport.

    De forma alternativa, si los nodos no tienen la utilidad sosreport descargada y no se puede instalar, recopila información de depuración de forma manual a través de la ejecución de los siguientes comandos:

    sudo journalctl -u cloud-init-local
    sudo journalctl -u cloud-init
    sudo journalctl -u cloud-final
    sudo journalctl -u cloud-config
    systemctl status kubelet
    journalctl -u kubelet
    systemctl status kube-node-installation.service
    systemctl status kube-node-configuration.service
    journalctl -u kube-node-installation.service --no-pager
    journalctl -u kube-node-configuration.service --no-pager
    journalctl -u kubelet.service --no-pager
    
  3. Empaqueta esta información en un archivo ZIP e inclúyela cuando envíes un caso de asistencia a Atención al cliente de Cloud.

¿Qué sigue?

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.