Cuando necesites reparar o mantener nodos, primero debes poner los nodos en modo de mantenimiento. Esto vacía de forma correcta los Pods y las cargas de trabajo existentes, y excluye los Pods críticos del sistema, como el servidor de la API. El modo de mantenimiento también evita que el nodo reciba asignaciones de Pods nuevas. En el modo de mantenimiento, puedes trabajar en los nodos sin correr el riesgo de interrumpir el tráfico del Pod.
Cómo funciona
GKE en Bare Metal proporciona una forma de colocar nodos en modo de mantenimiento. Este enfoque permite que otros componentes del clúster sepan de forma correcta que el nodo está en modo de mantenimiento. Cuando colocas un nodo en modo de mantenimiento, no se pueden programar Pods adicionales en el nodo y los Pods existentes se detienen.
En lugar de usar el modo de mantenimiento, puedes usar de forma manual los comandos de Kubernetes, como kubectl cordon
y kubectl drain
, en un nodo específico. Si ejecutas GKE en Bare Metal versión 1.12.0 (anthosBareMetalVersion: 1.12.0
) o anterior, consulta el problema conocido en Nodos desacordonados si no usas el procedimiento del modo de mantenimiento.
Cuando usas el proceso del modo de mantenimiento, GKE en Bare Metal hace lo siguiente:
Se agregan taints de nodo a los nodos especificados para indicar que no se puede programar ni ejecutar ningún Pod en los nodos.
Se aplica un tiempo de espera de 20 minutos para garantizar que los nodos no se detengan a la espera de que finalicen los Pods. Es posible que los Pods no finalicen si están configurados para tolerar a todos los taints o si tienen finalizadores. GKE en Bare Metal intenta detener todos los Pods, pero si se supera el tiempo de espera, el nodo se pone en modo de mantenimiento. Este tiempo de espera evita que la ejecución de Pods bloquee las actualizaciones.
Coloca un nodo en modo de mantenimiento
Elige los nodos que deseas poner en modo de mantenimiento mediante la especificación de los rangos de IP para los nodos seleccionados en maintenanceBlocks
en tu archivo de configuración del clúster. Los nodos que elijas deben estar listos y funcionando en el clúster.
Para poner los nodos en modo de mantenimiento, realiza lo siguiente:
Edita el archivo de configuración del clúster para seleccionar los nodos que deseas poner en modo de mantenimiento.
Puedes editar el archivo de configuración con el editor que prefieras o puedes editar el recurso personalizado del clúster de forma directa si ejecutas el siguiente comando:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
Reemplaza lo siguiente:
CLUSTER_NAMESPACE
: el espacio de nombres del clúster.CLUSTER_NAME
: el nombre del clúster
Agrega la sección
maintenanceBlocks
al archivo de configuración del clúster a fin de especificar una sola dirección IP o un rango de direcciones para los nodos que deseas poner en modo de mantenimiento.En el siguiente ejemplo, se muestra cómo seleccionar varios nodos mediante la especificación de un rango de direcciones IP:
metadata: name: my-cluster namespace: cluster-my-cluster spec: maintenanceBlocks: cidrBlocks: - 172.16.128.1-172.16.128.64
Guarda y aplica la configuración actualizada del clúster.
GKE en Bare Metal comenzará a poner los nodos en modo de mantenimiento.
Ejecuta el siguiente comando para obtener el estado de los nodos del clúster:
kubectl get nodes --kubeconfig=KUBECONFIG
La respuesta es similar a la siguiente:
NAME STATUS ROLES AGE VERSION user-anthos-baremetal-01 Ready control-plane 2d22h v1.27.4-gke.1600 user-anthos-baremetal-04 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-05 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-06 Ready worker 2d22h v1.27.4-gke.1600
Ten en cuenta que los nodos aún son programables, pero los taints evitan que se programen Pods (sin una tolerancia adecuada) en el nodo.
Ejecuta el siguiente comando para obtener la cantidad de nodos en el modo de mantenimiento:
kubectl get nodepools --kubeconfig ADMIN_KUBECONFIG
La respuesta debería ser similar al siguiente ejemplo:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN np1 3 0 0 1 0
Esta columna
UNDERMAINTENANCE
en esta muestra que un nodo está en modo de mantenimiento.GKE en Bare Metal también agrega los siguientes taints a los nodos cuando se ponen en modo de mantenimiento:
baremetal.cluster.gke.io/maintenance:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
Modo de facturación y mantenimiento
La facturación de GKE en Bare Metal se basa en la cantidad de CPU virtuales que tiene tu clúster para los nodos capaces de ejecutar cargas de trabajo. Cuando pones un nodo en modo de mantenimiento, se agregan los taints NoExecute
y NoSchedule
al nodo, pero no inhabilitan la facturación. Después de poner un nodo en modo de mantenimiento, acordona el nodo (kubectl cordon NODE_NAME
) para marcarlo como no programable. Una vez que un nodo se marca como no programable, el nodo y sus CPU virtuales asociadas se excluyen de la facturación.
Como se describe en la página de precios, puedes usar kubectl
para ver la capacidad de CPU virtual (que se usa en la facturación de Anthos) de cada uno de los clústeres de usuario.
El comando no considera si el nodo es programable o no, sino que proporciona un recuento de CPU virtuales por nodo.
Para identificar la cantidad de CPU virtuales por nodo del clúster de usuario, haz lo siguiente:
kubectl get nodes \
--kubeconfig USER_KUBECONFIG \
-o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"} \
{.status.capacity.cpu}{\"\n\"}{end}"
Reemplaza USER_KUBECONFIG por la ruta de acceso del archivo kubeconfig del clúster de usuario.
Quita un nodo del modo de mantenimiento
Para quitar nodos del modo de mantenimiento, realiza lo siguiente:
Edita el archivo de configuración del clúster para borrar los nodos que deseas quitar del modo de mantenimiento.
Puedes editar el archivo de configuración con el editor que prefieras o puedes editar el recurso personalizado del clúster de forma directa si ejecutas el siguiente comando:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
Reemplaza lo siguiente:
CLUSTER_NAMESPACE
: el espacio de nombres del clúster.CLUSTER_NAME
: el nombre del clúster
Edita las direcciones IP para quitar nodos específicos del modo de mantenimiento o quita la sección
maintenanceBlocks
para quitar todos los nodos del modo de mantenimiento.Guarda y aplica la configuración actualizada del clúster.
Usa los comandos
kubectl
para verificar el estado de los nodos.