Reparación automática de nodos

La función de reparación automática de nodos monitoriza continuamente el estado de cada nodo de un grupo de nodos. Si un nodo deja de estar en buen estado, la función de reparación automática de nodos lo reparará automáticamente. Esta función reduce la probabilidad de que se produzcan interrupciones y degradaciones del rendimiento en los clústeres, así como la necesidad de realizar tareas de mantenimiento manuales en ellos.

Puedes habilitar la reparación automática de nodos al crear o actualizar un grupo de nodos. Ten en cuenta que esta función se habilita o inhabilita en los grupos de nodos, no en los nodos individuales.

Estados de nodos incorrectos

La reparación automática de nodos examina el estado de cada nodo para determinar si necesita reparación. Se considera que un nodo está en buen estado si informa del estado Ready. De lo contrario, si informa de un estado incorrecto de forma consecutiva durante un periodo específico, se iniciará la reparación.

El estado de no saludable puede deberse a un estado NotReady, detectado en comprobaciones consecutivas durante aproximadamente 15 minutos. De lo contrario, el estado incorrecto puede deberse a que el espacio del disco de arranque se ha agotado, lo que se identifica en un periodo de aproximadamente 30 minutos.

Puedes comprobar manualmente las señales de estado de tu nodo en cualquier momento ejecutando el comando kubectl get nodes.

Estrategias de reparación de nodos

La reparación automática de nodos sigue ciertas estrategias para asegurar tanto el estado general del clúster como la disponibilidad de las aplicaciones durante el proceso de reparación. En esta sección se describe cómo funciona la función de reparación automática de nodos con las configuraciones de PodDisruptionBudget, cómo respeta el Pod Termination Grace Period y qué otras medidas toma para minimizar las interrupciones del clúster al reparar nodos.

Honor PodDisruptionBudget durante 30 minutos

Si un nodo necesita repararse, no se vacía ni se vuelve a crear al instante. En su lugar, la función de reparación automática de nodos respeta las configuraciones de PodDisruptionBudget (PDB) durante un máximo de 30 minutos. Después, se eliminan todos los pods del nodo. Una configuración de PDB define, entre otras cosas, el número mínimo de réplicas de un pod concreto que deben estar disponibles en cualquier momento.

Al respetar el PodDisruptionBudget durante aproximadamente 30 minutos, la función de reparación automática de nodos ofrece un periodo en el que los pods se pueden reprogramar y redistribuir de forma segura en otros nodos en buen estado del clúster. De esta forma, se mantiene el nivel de disponibilidad de la aplicación deseado durante el proceso de reparación.

Una vez transcurrido el límite de 30 minutos, la reparación automática de nodos continúa con el proceso de reparación, aunque esto suponga infringir el PodDisruptionBudget. Si no se establece un límite de tiempo, el proceso de reparación podría detenerse indefinidamente si la configuración de PodDisruptionBudget impide las expulsiones necesarias para la reparación.

Respetar el periodo de gracia de finalización de pods

La función de reparación automática de nodos también respeta un periodo de gracia de finalización de pods de aproximadamente 30 minutos. El periodo de gracia de finalización de pods ofrece a los pods un periodo de tiempo para que se apaguen correctamente durante la finalización. Durante el periodo de gracia, el kubelet de un nodo se encarga de ejecutar tareas de limpieza y liberar recursos asociados a los pods de ese nodo. La función de reparación automática de nodos permite que kubelet tarde hasta 30 minutos en completar esta limpieza. Si transcurren los 30 minutos asignados, el nodo se verá obligado a finalizar, independientemente de si los pods han finalizado correctamente.

Estrategias adicionales de reparación de nodos

La reparación automática de nodos también implementa las siguientes estrategias:

  • Si es necesario reparar varios nodos, se reparan de uno en uno para limitar las interrupciones del clúster y proteger las cargas de trabajo.
  • Si inhabilitas la reparación automática de nodos durante el proceso de reparación, las reparaciones en curso continuarán hasta que la operación de reparación se complete correctamente o falle.

Cómo habilitar e inhabilitar la reparación automática de nodos

Puedes habilitar o inhabilitar la reparación automática de nodos al crear o actualizar un grupo de nodos. Puedes habilitar o inhabilitar esta función en los grupos de nodos, no en nodos concretos.

Habilitar la reparación automática en un grupo de nodos nuevo

gcloud container aws node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --instance-type INSTANCE_TYPE \
   --root-volume-size ROOT_VOLUME_SIZE \
   --iam-instance-profile NODEPOOL_PROFILE \
   --node-version NODE_VERSION \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --max-pods-per-node MAX_PODS_PER_NODE \
   --location GOOGLE_CLOUD_LOCATION \
   --subnet-id NODEPOOL_SUBNET \
   --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
   --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
   --tags "Name=CLUSTER_NAME-NODE_POOL_NAME" \
   --enable-autorepair

Haz los cambios siguientes:

  • NODE_POOL_NAME: el nombre que elijas para tu grupo de nodos. Para obtener los nombres de tus grupos de nodos, ejecuta el comando gcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
  • CLUSTER_NAME: el nombre del clúster al que se va a adjuntar el grupo de nodos
  • INSTANCE_TYPE: el tipo de instancia de máquina de AWS que quieras para este grupo de nodos. Por ejemplo, m5.large.
  • ROOT_VOLUME_SIZE: tamaño deseado del volumen raíz de cada nodo, en GB
  • NODEPOOL_PROFILE: el perfil de instancia de gestión de identidades y accesos de las VMs del grupo de nodos
  • NODE_VERSION: la versión de Kubernetes que se va a instalar en cada nodo del grupo de nodos (por ejemplo, "1.32.4-gke.200")
  • MIN_NODES: número mínimo de nodos que puede contener el grupo de nodos
  • MAX_NODES: número máximo de nodos que puede contener el grupo de nodos.
  • MAX_PODS_PER_NODE: el número máximo de pods que se pueden crear en cualquier nodo del grupo.
  • GOOGLE_CLOUD_LOCATION: el nombre de la Google Cloud ubicación desde la que se gestionará este grupo de nodos
  • NODEPOOL_SUBNET: el ID de la subred en la que se ejecutará el grupo de nodos.
    • No debe haber ninguna superposición entre los intervalos de IPs de pods o servicios del clúster y la red de subredes del grupo de nodos. Para obtener más información sobre cómo seleccionar intervalos de IPs de pods y servicios para tu clúster, consulta Seleccionar intervalos de CIDR para tu clúster.
    • Si esta subred está fuera del bloque CIDR principal de la VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta Grupos de seguridad.
  • SSH_KEY_PAIR_NAME: nombre del par de claves SSH de AWS creado para el acceso SSH (opcional)
  • CONFIG_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de AWS KMS que cifra los datos de usuario.

Habilitar la reparación automática en un grupo de nodos

Para habilitar la reparación automática de nodos en un grupo de nodos, ejecuta el siguiente comando:

gcloud container aws node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --enable-autorepair

Haz los cambios siguientes:

  • NODE_POOL_NAME: un nombre único para tu grupo de nodos (por ejemplo, node-pool-1).
  • CLUSTER_NAME: el nombre de tu clúster
  • GOOGLE_CLOUD_LOCATION: la región Google Cloud que gestiona tu clúster

Inhabilitar la reparación automática en un grupo de nodos

gcloud container aws node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --no-enable-autorepair

Haz los cambios siguientes:

  • NODE_POOL_NAME: un nombre único para tu grupo de nodos (por ejemplo, node-pool-1).
  • CLUSTER_NAME: el nombre de tu clúster
  • GOOGLE_CLOUD_LOCATION: la región Google Cloud que gestiona tu clúster

Ten en cuenta que GKE on AWS inhabilita la reparación automática de nodos de forma correcta. Cuando se inhabilita la reparación automática de nodos en un grupo de nodos, GKE on AWS inicia una operación de actualización del grupo de nodos. La operación espera a que se completen las reparaciones de nodos existentes antes de continuar.

Comprobar si la reparación automática de nodos está habilitada

Ejecuta el siguiente comando para comprobar si la reparación automática de nodos está habilitada:

gcloud container aws node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Haz los cambios siguientes:

  • NODE_POOL_NAME: un nombre único para tu grupo de nodos (por ejemplo, node-pool-1).
  • CLUSTER_NAME: el nombre de tu clúster
  • GOOGLE_CLOUD_LOCATION: la región Google Cloud que gestiona tu clúster

Historial de reparaciones de nodos

Para ver el historial de las reparaciones realizadas en un grupo de nodos, ejecuta el siguiente comando:

gcloud container aws operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME/awsNodePools/NODEPOOL_NAME

Haz los cambios siguientes:

  • GOOGLE_CLOUD_LOCATION: la región Google Cloud donde se encuentra tu clúster. Por ejemplo, us-west1.
  • PROJECT_ID: tu Google Cloud proyecto
  • CLUSTER_NAME: el nombre de tu clúster
  • NODE_POOL_NAME: un nombre único para tu grupo de nodos (por ejemplo, node-pool-1).

Resumen del estado del grupo de nodos

Una vez que hayas habilitado la reparación automática de nodos, puedes generar un resumen del estado de un grupo de nodos ejecutando el siguiente comando:

gcloud container aws node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Un resumen del estado de un grupo de nodos es similar a este ejemplo:

{
  "name": "some-np-name",
  "version": "some-version",
  "state": "RUNNING",

  ...

  "errors": [
    {
      "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair."
    }
  ],
}

El resumen del estado de los grupos de nodos te ayuda a conocer el estado actual del grupo de nodos. En este ejemplo, el resumen contiene un mensaje de error que indica que uno de los dos nodos del grupo de nodos no está en buen estado. También indica que no hay nodos en proceso de reparación.