Reparaciones de nodos automáticas

La función de reparación automática de nodos supervisa de forma 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 lo repara automáticamente. Esta función disminuye la probabilidad de interrupciones y degradación del rendimiento, y minimiza la necesidad de realizar mantenimiento manual de los clústeres.

Puedes habilitar la reparación automática de nodos cuando crees o actualices un grupo de nodos. Ten en cuenta que habilitas o inhabilitas esta función en grupos de nodos en lugar de en nodos individuales.

Condiciones de nodo en mal estado

La reparación automática de nodos examina el estado de cada nodo para determinar si requiere reparación. Un nodo se considera en buen estado si informa un estado Ready. De lo contrario, si informa de forma consecutiva un mal estado durante una duración específica, se inician las reparaciones.

Un mal estado puede surgir de un estado NotReady, detectado en verificaciones consecutivas durante aproximadamente 15 minutos. De manera alternativa, un mal estado puede ser el resultado del espacio en el disco de arranque agotado, que se identifica en un período de alrededor de 30 minutos.

Puedes verificar las señales de estado de tu nodo de forma manual en cualquier momento con el 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 el Pod Termination Grace Period y toma otras medidas que minimizan la interrupción del clúster cuando se reparan nodos.

Respeto de PodDisruptionBudget por 30 minutos

Si un nodo requiere reparación, no se vacía ni se vuelve a crear de forma instantánea. En su lugar, 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 en el nodo. (Una configuración de PDB define, entre otros aspectos, la cantidad mínima de réplicas de un Pod en particular que debe estar disponible en un momento determinado).

Cuando se respeta el PodDisruptionBudget durante aproximadamente 30 minutos, el nodo de reparación automática habilita una período de oportunidad que permite que los Pods se puedan reprogramar y redistribuir 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 implica infringir el PodDisruptionBudget. Sin un límite de tiempo, el proceso de reparación podría detenerse indefinidamente si la configuración del PodDisruptionBudget previene las expulsiones necesarias para una reparación.

Cumplir con el período de gracia de finalización del Pod

La función de reparación automática de nodos también respeta un período de gracia de finalización del Pod de alrededor de 30 minutos. El período de gracia de finalización del Pod les proporciona a los Pods un período para un cierre ordenado durante la finalización. Durante el período de gracia, el kubelet en un nodo es responsable de ejecutar tareas de limpieza y liberar recursos asociados con los Pods de ese nodo. La función de reparación automática de nodos permite que kubelet complete esta limpieza hasta por 30 minutos. Si transcurren los 30 minutos asignados, el nodo se fuerza a finalizar, sin importar si los Pods se 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 de a uno 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 continúan hasta que la operación de reparación se realice de forma correcta 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 crees o actualices un grupo de nodos. Puedes habilitar o inhabilitar esta función en grupos de nodos en lugar de en nodos individuales.

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

gcloud container azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.29.3-gke.600 \
   --vm-size VM_SIZE \
   --max-pods-per-node 110 \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --azure-availability-zone AZURE_ZONE \
   --ssh-public-key SSH_PUBLIC_KEY" \
   --subnet-id SUBNET_ID \
   --enable-autorepair

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es un nombre único para el grupo de nodos, por ejemplo, node-pool-1.
  • CLUSTER_NAME: es el nombre de tu clúster de GKE en Azure
  • GOOGLE_CLOUD_LOCATION: es la ubicación de Google Cloud que administra tus clústeres
  • 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")
  • VM_SIZE: un tamaño de VM de Azure compatible
  • MIN_NODES: es la cantidad mínima de nodos en el grupo de nodos. Para obtener más información, consulta Escalador automático de clúster.
  • MAX_NODES: cantidad máxima de nodos en el grupo de nodos
  • AZURE_ZONE: la zona de disponibilidad de Azure en la que GKE en Azure inicia el grupo de nodos, por ejemplo, 3
  • SSH_PUBLIC_KEY: el texto de tu clave pública SSH
  • SUBNET_ID: es el ID de la subred del grupo de nodos.

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 azure 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 el 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.

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

gcloud container azure 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 el 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 en Azure realiza una inhabilitación ordenada de la reparación automática de nodos. Cuando se inhabilita la reparación automática de nodos para un grupo de nodos existente, GKE en Azure inicia una operación de actualización del grupo de nodos. La operación espera a que se complete cualquier reparación de nodo existente antes de continuar.

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

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

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

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es un nombre único para el 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 azure operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME

Reemplaza lo siguiente:

  • GOOGLE_CLOUD_LOCATION: es la región de Google Cloud compatible con la que se 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 el 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 de estado del grupo de nodos mediante la ejecución del siguiente comando:

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

Un resumen de buen estado del grupo de nodos es similar a esta muestra:

{
  "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 de nodos. En este ejemplo, el resumen contiene un mensaje de error que indica que uno de los dos nodos del grupo de nodos está en mal estado. También informa que ningún nodo se encuentra en proceso de reparación.