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 azure node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--node-version 1.32.4-gke.200 \
--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
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 de GKE en AzureGOOGLE_CLOUD_LOCATION
: la Google Cloud ubicación que gestiona tu clústerNODE_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")VM_SIZE
: a tamaño de máquina virtual de Azure compatibleMIN_NODES
: el número mínimo de nodos del grupo de nodos. Para obtener más información, consulta Autoescalador de clústeres.MAX_NODES
: número máximo de nodos del grupo de nodosAZURE_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
:el ID de la subred del grupo de nodos.
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 azure 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ústerGOOGLE_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 azure 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ústerGOOGLE_CLOUD_LOCATION
: la región Google Cloud que gestiona tu clúster
Ten en cuenta que GKE en Azure 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 en Azure 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 azure 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ústerGOOGLE_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 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
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 proyectoCLUSTER_NAME
: el nombre de tu clústerNODE_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 azure 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.