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 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
Reemplace lo siguiente:
-
NODE_POOL_NAME
: el nombre que elija para su grupo de nodos. Para obtener los nombres de sus grupos de nodos, ejecute el comandogcloud container aws node-pools list --cluster CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
-
CLUSTER_NAME
: el nombre del clúster al que se adjuntará 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
: el tamaño deseado para el volumen raíz de cada nodo, en Gb -
NODEPOOL_PROFILE
: el perfil de instancia de IAM para las máquinas virtuales del grupo de nodos -
NODE_VERSION
: la versión de Kubernetes que se instalará en cada nodo del grupo de nodos (por ejemplo, "1.31.4-gke.500") -
MIN_NODES
: el número mínimo de nodos que puede contener el grupo de nodos -
MAX_NODES
: el número máximo 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 individual del grupo -
GOOGLE_CLOUD_LOCATION
: el nombre de la Google CloudUbicación 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 de pods/servicios del clúster y la red de subred del grupo de nodos. Para obtener más información sobre cómo seleccionar rangos de IP de pods y servicios para su clúster, consulte Seleccionar rangos de CIDR para su clúster.
- Si esta subred está fuera del bloque CIDR principal de la VPC, se requieren pasos adicionales. Para obtener más información, consulte 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 de recurso de Amazon (ARN) de la clave AWS KMS que cifra los datos del usuario
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 aws 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 aws 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 AWS desactiva la reparación automática de nodos de forma ordenada. Al desactivar la reparación automática de nodos en un grupo de nodos existente, GKE en AWS 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 aws 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 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
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 aws 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.