Colocar los nodos en modo de mantenimiento

Cuando necesites reparar o mantener nodos, primero debes poner los nodos en modo de mantenimiento. La ubicación de nodos en modo de mantenimiento desvía de forma segura sus pods o cargas de trabajo y excluye los nodos de la programación de pods. En el modo de mantenimiento, puedes trabajar en tus nodos sin correr el riesgo de interrumpir el tráfico de los pods.

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 de modo de mantenimiento.

Cuando usas el proceso del modo de mantenimiento, GKE en Bare Metal hace lo siguiente:

  • Taints de nodo

    se agregan a los nodos especificados para indicar que no se pueden programar ni ejecutar pods 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 excede el tiempo de espera, el nodo se pone en modo de mantenimiento. Este tiempo de espera evita que los Pods en ejecución bloqueen 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:

  1. 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
  2. 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
    
  3. Guarda y aplica la configuración actualizada del clúster.

    GKE en Bare Metal comienza a poner los nodos en modo de mantenimiento.

  4. 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.25.10-gke.2100
    user-anthos-baremetal-04   Ready    worker          2d22h   v1.25.10-gke.2100
    user-anthos-baremetal-05   Ready    worker          2d22h   v1.25.10-gke.2100
    user-anthos-baremetal-06   Ready    worker          2d22h   v1.25.10-gke.2100
    

    Ten en cuenta que los nodos aún son programables, pero los taints evitan que los Pods (sin una tolerancia adecuada) se programen en el nodo.

  5. Ejecuta el siguiente comando para obtener la cantidad de nodos en el modo de mantenimiento:

    kubectl get nodepools

    La respuesta debería ser similar al siguiente resultado:

    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

Quita un nodo del modo de mantenimiento

Para quitar nodos del modo de mantenimiento, realiza lo siguiente:

  1. 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
  2. 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.

  3. Guarda y aplica la configuración actualizada del clúster.

  4. Usa los comandos kubectl para verificar el estado de los nodos.