Reparación automática de nodos

La función de reparación automática de nodos supervisa continuamente el estado de cada nodo de un grupo. Si un nodo deja de funcionar correctamente, la función lo repara automáticamente. Esta función reduce la probabilidad de interrupciones del clúster y la degradación del rendimiento, y minimiza la necesidad de mantenimiento manual.

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

Condiciones de nodo no saludables

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 " Ready ". De lo contrario, si informa repetidamente un estado incorrecto durante un tiempo específico, se inician las reparaciones.

Un estado incorrecto puede deberse a un estado NotReady , detectado en comprobaciones consecutivas durante aproximadamente 15 minutos. Por otro lado, un estado incorrecto puede deberse a un espacio de disco de arranque agotado, detectado durante un período de aproximadamente 30 minutos.

Puede verificar manualmente las señales de salud de su 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 garantizar el estado general del clúster y la disponibilidad de las aplicaciones durante el proceso de reparación. Esta sección describe cómo la función de reparación automática de nodos respeta las configuraciones de PodDisruptionBudget , el Pod Termination Grace Period y otras medidas que minimizan la interrupción del clúster al reparar los nodos.

Honor PodDisruptionBudget de 30 minutos

Si un nodo requiere reparación, 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, tras lo cual 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 específico que deben estar disponibles en un momento dado).

Al respetar el PodDisruptionBudget durante aproximadamente 30 minutos, la función de reparación automática de nodos ofrece un margen de tiempo 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.

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

Honrar el período de gracia de terminación de pod

La función de reparación automática de nodos también ofrece un período de gracia de aproximadamente 30 minutos para la terminación de pods . Este período proporciona a los pods un margen de tiempo para un apagado correcto durante la terminación. Durante este período, el kubelet de un nodo se encarga de ejecutar las tareas de limpieza y liberar los recursos asociados a los pods. La función de reparación automática de nodos permite que el kubelet complete esta limpieza en hasta 30 minutos. Si transcurren los 30 minutos asignados, el nodo se ve obligado a terminar, independientemente de si los pods se han terminado correctamente.

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 deshabilita 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 habilitar y deshabilitar la reparación automática de nodos

Puede habilitar o deshabilitar la reparación automática de nodos al crear o actualizar un grupo de nodos. Esta función se habilita o deshabilita en grupos de nodos, no en nodos individuales.

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

gcloud container azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.31.4-gke.500 \
   --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

Reemplace lo siguiente:

  • NODE_POOL_NAME : un nombre único para su grupo de nodos, por ejemplo, node-pool-1
  • CLUSTER_NAME : el nombre de su clúster de GKE en Azure
  • GOOGLE_CLOUD_LOCATION : la Google Cloud ubicación que administra su clúster
  • NODE_VERSION : la versión de Kubernetes que se instalará en cada nodo del grupo de nodos (por ejemplo, "1.31.4-gke.500")
  • VM_SIZE : un tamaño de máquina virtual de Azure compatible
  • MIN_NODES : el número mínimo de nodos en el grupo de nodos; para obtener más información, consulte Escalador automático de clúster
  • MAX_NODES : el número máximo de nodos en el grupo de nodos
  • AZURE_ZONE : la zona de disponibilidad de Azure donde GKE en Azure lanza el grupo de nodos, por ejemplo, 3
  • SSH_PUBLIC_KEY : el texto de su clave pública SSH.
  • SUBNET_ID : el ID de la subred del grupo de nodos.

Habilitar 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, ejecute el siguiente comando:

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

Reemplace lo siguiente:

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

Deshabilitar 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

Reemplace lo siguiente:

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

Tenga en cuenta que GKE en Azure deshabilita la reparación automática de nodos de forma ordenada. Al deshabilitar la reparación automática de nodos en 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 completen las reparaciones de los nodos existentes antes de continuar.

Compruebe si la reparación automática del nodo está habilitada

Ejecute 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

Reemplace lo siguiente:

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

Historial de reparación de nodos

Puede ver el historial de reparaciones realizadas en un grupo de nodos ejecutando 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

Reemplace lo siguiente:

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

Resumen del estado del grupo de nodos

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

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

Un resumen del estado saludable de un grupo de nodos se parece 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 del grupo de nodos le 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 no está en buen estado. También informa que ningún nodo está en proceso de reparación.