Solucionar problemas de registro de nodos

En este documento se describe cómo resolver los problemas que se producen al añadir nodos a un clúster Estándar de Google Kubernetes Engine (GKE). Algunos de los casos en los que se producen estos problemas son la creación de clústeres y de grupos de nodos, así como los eventos de escalado vertical.

Para resolver problemas con los clústeres de Autopilot de GKE, consulta el artículo Solucionar problemas de clústeres de Autopilot.

Acerca del registro de nodos

Los nodos son instancias de VM de Compute Engine que GKE crea automáticamente. Cuando se añade un nuevo nodo a un clúster de GKE, debe registrarse en el plano de control del clúster. Este proceso, denominado registro de nodos o bootstrap de nodos, se produce cuando se crea un nodo.

Cuándo se registra un nodo

El registro de nodos se produce cada vez que se crean nodos, incluidos los siguientes casos:

El proceso de registro de nodos sigue estos pasos:

  1. El número de nodos definido para el grupo de nodos se replica en los grupos de instancias gestionados.
  2. Los grupos de instancias gestionados crean el número necesario de instancias de máquina virtual.
  3. Por cada instancia de VM que se cree:

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

Mensaje de error de registro de nodo

Cuando GKE intenta añadir nodos a tu clúster, aparece el siguiente error en la Google Cloud consola si no se ha podido registrar el nodo:

  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 han registrado correctamente en el clúster. En las siguientes secciones se describen algunas de las posibles causas de este error.

Requisitos previos para registrar nodos correctamente

Para que un nodo se registre correctamente en un clúster de GKE, deben cumplirse los siguientes requisitos:

  • Conectividad de red.
  • Disponibilidad de recursos.
  • Permisos de cuenta de servicio.

Requisitos previos para crear instancias

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

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

Si no se ha podido crear la instancia, significa que, en el periodo durante el cual GKE ha intentado crear la instancia para registrarla como nodo de GKE, faltan registros de creación de instancias porque las instancias nunca se han creado. Para comprobar si faltan registros, consulta las instrucciones para buscar una instancia en la que no se haya podido registrar un nodo.

Permisos de cuenta de servicio

Los nodos de GKE tienen asociada una cuenta de servicio de gestión de identidades y accesos. De forma predeterminada, esta cuenta de servicio es la cuenta de servicio predeterminada de Compute Engine. Para proteger tu clúster, te recomendamos que uses 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 VM se inicialicen como nodos de GKE. Si eliminas la cuenta de servicio, la inhabilitas o no le das los permisos correctos, es posible que no se pueda registrar el nodo.

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

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

En función de tu conexión de red, permitir esta conexión puede significar configurar el acceso privado de Google o tener reglas de cortafuegos y rutas en la red de nube privada virtual (VPC) de tu clúster que permitan la conexión.

Requisitos previos 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 el funcionamiento normal. Esta comunicación está permitida de forma predeterminada. Asegúrate de que, al implementar reglas de cortafuegos de VPC, se siga permitiendo la comunicación entre los nodos y el plano de control.

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

Usar el comprobador de registro de nodos para solucionar problemas de registro de nodos

La utilidad Node Registration Checker se ejecuta en las instancias recién creadas y comprueba si la instancia ha completado correctamente los pasos de registro de nodos.

Si no se puede registrar un nodo, la utilidad genera un informe de resumen en el que puedes ver qué requisitos previos no se han cumplido en función de la fase del proceso en la que se ha producido el error en la instancia.

Sigue las instrucciones de la siguiente sección para encontrar una instancia en la que se haya producido un error al registrar el nodo y usa el resumen del comprobador de registro de nodos para saber por qué se ha producido el error.

Buscar una instancia en la que no se haya podido registrar el nodo

Cuando una o varias instancias no se registran como nodos en el plano de control de tu clúster de GKE, puedes ver el número de instancias que no se han registrado en el mensaje de error que se muestra en la página Detalles del clúster de la consola de Google Cloud . Si varias instancias no se registran a la vez, puede que se deba al mismo motivo subyacente. Por este motivo, puedes usar una de las instancias fallidas para investigar por qué han fallado todas las instancias.

Sin embargo, como las instancias no se registraron como nodos de GKE, debes seguir las instrucciones que se indican a continuación para encontrar los nombres de las VMs de Compute Engine subyacentes que no se registraron.

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

    Ir a Explorador de registros

  2. Usa el siguiente filtro de registro para encontrar los registros de creación de instancias 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"
    

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

  3. Usa el histograma situado debajo del filtro de registro para acotar el periodo en el que se debería haber creado el nodo.

  4. Haz clic en uno de los registros que aparecen en Resultados de la consulta y, a continuación, en Ampliar campos anidados para ver más detalles.

  5. Busca el campo protoPayload.resourceName. La parte final de la ruta que se indica es el nombre de la instancia. Los nombres de las instancias siguen un formato que empieza por el nombre del clúster y el nombre del grupo de nodos. Por ejemplo:

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

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

    Ir a instancias de VM

    Busca el nombre de la instancia de VM mediante el filtro. Haz clic para obtener más detalles.

Solucionar problemas de una instancia con Node Registration Checker

Una vez que hayas encontrado el nombre de la instancia que no se ha podido registrar, puedes investigar por qué no se ha podido registrar con el comprobador de registro de nodos.

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

El resultado de las instancias recién creadas incluye lo siguiente, lo que indica que se ha iniciado el comprobador de registro de nodos:

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

Si el registro del nodo se realiza correctamente, el resultado incluye los siguientes mensajes:

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

Si no ves estos mensajes, significa que no se ha podido registrar el nodo y que Node Registration Checker ha generado un informe que resume por qué no se ha podido completar el registro. 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 aparecen como no accesibles, consulta los permisos de la cuenta de servicio para el registro de nodos y la conexión de red a las APIs y los servicios de Google para el registro de nodos.

Si Master aparece como no accesible, consulta los requisitos previos de Conexión de red con el plano de control para el registro de nodos.

Una vez que haya resuelto todos los problemas que impiden que se registre el nodo correctamente, consulte el artículo Completar el registro del nodo después de corregir la causa raíz.

Si los pasos anteriores no te indican por qué no se ha podido registrar el nodo, consulta la sección Recopilar información para investigar más a fondo.

Solucionar problemas de registro de nodos sin el comprobador de registro de nodos

Sigue estos pasos solo como último recurso si ya has consultado los requisitos para registrar nodos correctamente y has probado la herramienta de comprobación del registro de nodos.

Una vez que hayas resuelto todos los problemas que impiden que se registre el nodo correctamente, completa el registro del nodo después de corregir la causa raíz.

Si ninguno de los pasos de investigación de esta página te indica por qué ha fallado el registro de nodos, consulta Recoger información para investigar más a fondo.

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

La cuenta de servicio que usan tus nodos debe tener los permisos necesarios para registrar nodos. Sigue estas instrucciones para comprobar que cumples estos requisitos:

  1. Busca una instancia en la que no se haya podido registrar el nodo.

  2. En la pestaña Detalles de la instancia de VM, en la sección Gestión de identidades y APIs, busca el nombre de la cuenta de servicio en el campo Cuenta de servicio. Si el nodo ha usado 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 la salida de la consola serie. En la pestaña Detalles de la instancia de VM, en la sección Registros, haz clic en Puerto serie 1 (consola).

    Si la instancia ha usado una cuenta de servicio con los permisos correctos, el resultado incluye 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 u otros elementos que las interrumpan, como este: Starting [0;1;39mConfigure kubernetes node. Si ves todos estos mensajes, significa que se han cumplido los requisitos previos 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 eliminado o inhabilitado, o que no tenga los permisos correctos.

Comprobar la conexión de red con las APIs y los servicios de Google para registrar el nodo

Comprobar la conexión con acceso SSH

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

  1. Busca una instancia en la que no se haya podido registrar el nodo.

  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 comprobar la conexión con las APIs y los servicios de Google:

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

    Si la conexión se realiza correctamente, el resultado será 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 correctamente, el resultado será 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 la conexión se agota y la dirección IP devuelta está dentro del intervalo de direcciones IP de 199.36.153.0/24, comprueba que tu clúster cumpla los requisitos de red para conectarse a las APIs y los servicios de Google. Si la conexión se agota y la dirección IP devuelta no está dentro del intervalo de direcciones IP mencionado, comprueba si hay reglas de cortafuegos que bloqueen el tráfico saliente o rutas mal configuradas en la red VPC de tu clúster.

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

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

Si no tienes acceso SSH a las instancias de VM, usa Pruebas de conectividad para comprobar que la instancia de VM tiene una conexión con las APIs y los servicios de Google.

  1. Busca una instancia en la que no se haya podido registrar el nodo.

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

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

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

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

  1. Busca una instancia en la que no se haya podido registrar el nodo.

  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, guarda el endpoint 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 endpoint 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 del plano de control en las prácticas recomendadas de redes de GKE.

Completar el registro del nodo después de solucionar la causa principal

Una vez que hayas resuelto el problema que impide el registro del nodo, el procedimiento que debes seguir dependerá del contexto del error:

  • Si no se ha podido registrar el nodo al crear el clúster, elimina el clúster y vuelve a intentarlo.
  • Si el registro de nodos falla durante el escalado vertical con el escalador automático de clústeres, espera a que las instancias de VM intenten registrarse de nuevo.
  • Si no se ha podido registrar el nodo al crear el grupo de nodos:
    • Si se han creado las instancias de VM, espera a que intenten registrarse de nuevo.
    • Si no se han creado las instancias de VM, elimina el grupo de nodos y vuelve a intentarlo.
  • Si no se ha podido registrar el nodo al cambiar el tamaño del clúster, vuelve a ejecutar el comando para aumentar el tamaño del clúster.
  • Si el registro de nodos ha fallado fuera del ámbito de una operación, como durante una operación de reparación, espera a que las instancias de VM intenten registrarse de nuevo.

Recoger información para investigar más a fondo

Si no puedes resolver el problema de registro de nodos, puedes recoger información adicional para ayudar al equipo de Asistencia de Google Cloud a investigar el problema siguiendo estas instrucciones. Para seguir estos pasos, debes tener acceso SSH a las instancias de VM de tu proyecto y usar la utilidad sosreport, que se incluye en las imágenes de COS.

  1. Busca una instancia en la que no se haya podido registrar el nodo.

  2. Recoge información de depuración mediante sosreport.

    Si tus nodos no tienen descargada la utilidad sosreport y no se puede instalar, recoge la información de depuración manualmente ejecutando los siguientes comandos:

     # Check cloud-init logs for issues during early VM boot
     sudo journalctl -u cloud-init-local --no-pager
     sudo journalctl -u cloud-init --no-pager
     sudo journalctl -u cloud-final --no-pager
     sudo journalctl -u cloud-config --no-pager
    
     # Check kubelet status and logs
     sudo systemctl status kubelet
     sudo journalctl -u kubelet --no-pager
    
     # Check GKE node installation service status and logs
     sudo systemctl status kube-node-installation.service
     sudo journalctl -u kube-node-installation.service --no-pager
    
     # Check GKE node configuration service status and logs
     sudo systemctl status kube-node-configuration.service
     sudo journalctl -u kube-node-configuration.service --no-pager
    
  3. Comprime esta información en un archivo ZIP e inclúyela cuando envíes un caso de asistencia a Cloud Customer Care.

Siguientes pasos