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 se encuentra 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 y degradación del rendimiento del clúster, y minimiza la necesidad de realizar tareas de mantenimiento manuales en tus 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, no en nodos individuales.
Condiciones de nodos 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 consecutivamente un estado de mal funcionamiento durante un período específico, se inician las reparaciones.
El mal estado puede surgir de un estado NotReady
, detectado en verificaciones consecutivas durante aproximadamente 15 minutos. Como alternativa, el estado no saludable puede deberse a que se agotó el espacio en el disco de arranque, lo que se identifica durante un período de aproximadamente 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 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 la función de reparación automática de nodos respeta las configuraciones de PodDisruptionBudget
y Pod Termination
Grace Period
, y toma otras medidas que minimizan las interrupciones 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 cambio, 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 de los cuales 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 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 de nodos continúa con el proceso de reparación, incluso si eso significa incumplir 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 aproximadamente 30 minutos. El período de gracia de finalización del Pod 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 en ese nodo. La función de reparación automática de nodos permite que kubelet complete esta limpieza en un plazo de hasta 30 minutos. Si transcurren los 30 minutos asignados, se fuerza la finalización del nodo, independientemente de si los Pods finalizaron 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 de a uno por vez 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 realice 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 cuando crees o actualices un grupo de nodos. Puedes habilitar o inhabilitar esta función en grupos de nodos, en lugar de 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
: un nombre que eliges para el grupo de nodos. Para obtener los nombres de tus grupos de nodos, ejecuta el comandogcloud 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 nodosINSTANCE_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 nodosNODE_VERSION
: es la versión de Kubernetes que se instalará en cada nodo en el grupo de nodos (p. ej., "1.32.4-gke.200")MIN_NODES
: la cantidad mínima de nodos que puede contener el grupo de nodosMAX_NODES
: la cantidad máxima de nodos que puede contener el grupo de nodosMAX_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 nodosNODEPOOL_SUBNET
: el ID de la subred en la que se ejecutará el grupo de nodos.- No debe haber superposición entre los rangos de IP del pod/servicio del clúster y la red de subred del grupo de nodos. Si deseas obtener más información sobre cómo seleccionar los rangos de IP de Pods y Services para tu clúster, consulta Selecciona rangos 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 los 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 el grupo de nodos, por ejemplo,node-pool-1
.CLUSTER_NAME
: Es el nombre de tu clúster.GOOGLE_CLOUD_LOCATION
: Es la Google Cloud región que administra tu clúster.
Habilita 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 el grupo de nodos, por ejemplo,node-pool-1
.CLUSTER_NAME
: Es el nombre de tu clúster.GOOGLE_CLOUD_LOCATION
: Es la Google Cloud región que administra tu clúster.
Ten en cuenta que GKE en AWS inhabilita la reparación automática de nodos de forma correcta. Cuando se inhabilita la reparación automática de nodos para 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 nodos existentes antes de continuar.
Comprueba 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:
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 el grupo de nodos, por ejemplo,node-pool-1
.CLUSTER_NAME
: Es el nombre de tu clúster.GOOGLE_CLOUD_LOCATION
: Es la Google Cloud región que administra tu clúster.
Historial de reparación de nodos
Para ver el historial de las reparaciones realizadas en un grupo de nodos, ejecuta 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 Google Cloud compatible que administra tu clúster, por ejemplo,us-west1
.PROJECT_ID
: Tu proyecto de Google CloudCLUSTER_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 habilites la reparación automática de nodos, puedes 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 de un grupo de nodos se ve de la siguiente manera:
{ "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 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, actualmente, no hay nodos en proceso de reparación.