Reparación automática de nodos

La función de reparación automática de nodos supervisa de manera continua el estado de cada nodo en un grupo de nodos. Si un nodo está en mal estado, la función de reparación automática de nodos lo repara automáticamente. Esta función disminuye la probabilidad de interrupciones del clúster y la degradación del rendimiento, y minimiza la necesidad de mantener los clústeres de forma manual.

Puedes habilitar la reparación automática de nodos cuando creas o actualizas un grupo de nodos. Ten en cuenta que puedes habilitar o inhabilitar esta función en grupos de nodos en lugar de nodos individuales.

Estado de los nodos en mal estado

La reparación automática de nodos examina el estado de cada nodo para determinar si requiere reparación. Se considera que un nodo está en buen estado si informa un estado Ready. De lo contrario, si, consecutivamente, informa un estado de mal estado durante un período específico, se inician las reparaciones.

Un mal estado puede surgir de un estado NotReady, detectado en verificaciones consecutivas durante aproximadamente 15 minutos. Como alternativa, es posible que un estado de mal estado se deba a la falta del espacio en el disco de arranque, que se identificó durante un período de alrededor de 30 minutos.

Puedes verificar de forma manual los indicadores de estado de tu nodo en cualquier momento mediante la ejecución del comando kubectl get nodes.

Estrategias de reparación de nodos

La reparación automática de nodos sigue ciertas estrategias para garantizar el estado general del clúster y la disponibilidad de las aplicaciones durante el proceso de reparación. En esta sección, se describe cómo la función de reparación automática de nodos respeta la configuración de PodDisruptionBudget, respeta la Pod Termination Grace Period y toma otras medidas que minimizan la interrupción del clúster cuando se reparan nodos.

Honra a PodDisruptionBudget por 30 minutos

Si un nodo requiere reparación, no se vacía ni se vuelve a crear al instante. En cambio, la función de reparación automática de nodos respeta la configuración de PodDisruptionBudget (PDB) durante un máximo de 30 minutos, después de lo cual se borran todos los Pods del nodo. (Una configuración de PDB define, entre otros aspectos, la cantidad mínima de réplicas de un Pod en particular que deben estar disponibles en un momento determinado).

Cuando se respeta el PodDisruptionBudget durante aproximadamente 30 minutos, la función de reparación automática del nodo proporciona un período para que los Pods se reprogramen y redistribuyan de forma segura entre otros nodos en buen estado del clúster. Esto ayuda a mantener el nivel deseado de disponibilidad de la aplicación durante el proceso de reparación.

Después del límite de tiempo de 30 minutos, la reparación automática del nodo continúa con el proceso de reparación, incluso si esto implica infringir PodDisruptionBudget. Sin un límite de tiempo, el proceso de reparación podría estancarse indefinidamente si la configuración de PodDisruptionBudget impide las expulsiones necesarias para una reparación.

Respete el período de gracia de finalización de Pods

La función de reparación automática de nodos también respeta un período de gracia de finalización de Pods de aproximadamente 30 minutos. El período de gracia de finalización de Pods proporciona a los Pods un período para un cierre correcto durante la finalización. Durante el período de gracia, el kubelet en un nodo es responsable de ejecutar las tareas de limpieza y liberar recursos asociados con los Pods de ese nodo. La función de reparación automática del nodo permite que kubelet complete esta limpieza en hasta 30 minutos. Si transcurren los 30 minutos asignados, el nodo se ve obligado a finalizar, sin importar si los Pods finalizaron de forma correcta.

Estrategias adicionales de reparación de nodos

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

  • Si varios nodos requieren reparación, se reparan uno a la vez para limitar la interrupción 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 tenga éxito o falle.

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

Puedes habilitar o inhabilitar la reparación automática de nodos cuando creas o actualizas un grupo de nodos. Puedes habilitar o inhabilitar esta función en grupos de nodos en lugar de hacerlo en nodos individuales.

Habilita la reparación automática para 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

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Es un nombre que elijas para el 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 conectará el grupo de nodos
  • INSTANCE_TYPE: el tipo de instancia de máquina de AWS deseado para este grupo de nodos, por ejemplo, m5.large
  • ROOT_VOLUME_SIZE: es el tamaño deseado para el volumen raíz de cada nodo, en Gb.
  • NODEPOOL_PROFILE: es el perfil de la instancia de IAM para las VM del grupo de nodos
  • NODE_VERSION: es la versión de Kubernetes que se instalará en cada nodo en el grupo de nodos (p. ej., “1.29.3-gke.600”)
  • MIN_NODES: la cantidad mínima de nodos que puede contener el grupo de nodos
  • MAX_NODES: la cantidad máxima de nodos que puede contener el grupo de nodos
  • MAX_PODS_PER_NODE: la cantidad máxima de Pods que se pueden crear en cualquier nodo único del grupo.
  • GOOGLE_CLOUD_LOCATION: el nombre de la ubicación de Google Cloud desde la que se administrará 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 rangos de IP del Pod/Service del clúster y la red de subred del grupo de nodos. Si quieres obtener más información sobre cómo seleccionar rangos de IP de Pod y de servicio para tu clúster, consulta Selecciona rangos de CIDR para tu clúster.
    • Si esta subred está fuera del bloque CIDR principal de VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta grupos de seguridad.
  • SSH_KEY_PAIR_NAME: el nombre del par de claves SSH de AWS creado para el acceso SSH (opcional)
  • CONFIG_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS que encripta los datos del usuario

Habilita la reparación automática para un grupo de nodos existente

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

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

Reemplaza lo siguiente:

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

Inhabilita la reparación automática para un grupo de nodos existente

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

Reemplaza lo siguiente:

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

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

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

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

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

Reemplaza lo siguiente:

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

Historial de reparación de nodos

Puedes ver el historial de reparaciones realizadas en un grupo de nodos si ejecutas 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

Reemplaza lo siguiente:

  • GOOGLE_CLOUD_LOCATION: Es la región de Google Cloud compatible que administra el clúster, por ejemplo, us-west1.
  • PROJECT_ID: es tu proyecto de Google Cloud
  • CLUSTER_NAME: Es el nombre de tu clúster.
  • NODE_POOL_NAME: Es un nombre único para tu grupo de nodos, por ejemplo, node-pool-1.

Resumen de estado del grupo de nodos

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

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

Un resumen de buen estado del grupo de nodos es similar al siguiente 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 de estado del grupo de nodos te ayuda a comprender el estado actual del grupo. En este ejemplo, el resumen contiene un mensaje de error que indica que uno de los dos nodos del grupo está en mal estado. También informa que ningún nodo se encuentra en el proceso de reparación.