Actualizar manualmente un clúster o un grupo de nodos


De forma predeterminada, las actualizaciones automáticas están habilitadas para los clústeres de Google Kubernetes Engine (GKE) y los grupos de nodos de GKE Standard.

En esta página, se explica cómo solicitar de forma manual una actualización o un cambio a una versión inferior del plano de control o los nodos de un clúster de GKE. Puedes actualizar la versión de forma manual de la siguiente manera:

Para actualizar un clúster, GKE actualiza la versión que el plano de control y los nodos ejecutan. Los clústeres se actualizan a una versión secundaria más nueva (por ejemplo, de la 1.24 a la 1.25) o a una versión de parche más reciente (por ejemplo, de 1.24.2-gke.100 a 1.24.5-gke.200). Para obtener más información, consulta Control de versiones y asistencia de GKE.

Puedes obtener más información sobre cómo funcionan las actualizaciones automáticas y manuales del clúster. También puedes controlar cuándo pueden o no ocurrir las actualizaciones automáticas mediante la configuración de períodos de mantenimiento y exclusiones.

Las versiones nuevas de GKE se anuncian con regularidad; puedes recibir avisos sobre las versiones nuevas a las que se puede actualizar un clúster específico con notificaciones de clústeres.

Para obtener información sobre las versiones disponibles, consulta Control de versiones. Para obtener más información sobre los clústeres, consulta Arquitectura del clúster. A fin de obtener orientación sobre la actualización de clústeres, consulta Prácticas recomendadas para actualizar clústeres.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Guarda tus datos en discos persistentes

Antes de actualizar un grupo de nodos, debes asegurarte de que todos los datos que quieres conservar estén almacenados en un pod con volúmenes persistentes que usen discos persistentes. En lugar de borrarse, los discos persistentes se desactivan durante las actualizaciones y sus datos se “transfieren” entre los pods.

Las siguientes restricciones aplican a los discos persistentes:

  • Los nodos en los que se ejecutan los pods deben ser VM de Compute Engine.
  • Esas VM deben estar en la misma zona y proyecto de Compute Engine que el disco persistente.

Para aprender a agregar un disco persistente a una instancia de nodo existente, consulta Agrega o cambia el tamaño de los discos persistentes zonales en la documentación de Compute Engine.

Información sobre la actualización

El plano de control y los nodos de un clúster se actualizan por separado.

Los planos de control de clúster siempre se actualizan de forma periódica, sin importar si tu clúster está inscrito en un canal de versiones o no.

Para recibir notificaciones de actualización de forma proactiva, consulta Recibe notificaciones de clúster.

Limitaciones

Los clústeres Alfa no se pueden actualizar.

Versiones compatibles

Las notas de la versión anuncian cuándo están disponibles versiones nuevas y cuándo las versiones anteriores dejan de estarlo. En cualquier momento, puedes enumerar todas las versiones de clústeres y nodos compatibles mediante este comando:

gcloud container get-server-config

Si tu clúster está inscrito en un canal de versiones, puedes actualizar a una versión de parche en un canal de versiones diferente con la misma versión secundaria que tu plano de control. Por ejemplo, puedes actualizar tu clúster de la versión 1.21.12-gke.1700 en el canal regular a la versión 1.21.13-gke.900 en el canal rápido. Para obtener más información, consulta Ejecuta versiones de parche desde un canal más reciente. Todos los clústeres de Autopilot se inscriben en un canal de versiones.

Limitaciones del cambio a una versión inferior

En ciertas situaciones, puedes cambiar a una versión anterior del clúster.

Para mitigar una actualización incorrecta del plano de control del clúster, puedes cambiar el plano de control a una versión inferior del parche si la versión es una versión de parche anterior dentro de la misma versión secundaria. Por ejemplo, si el plano de control de tu clúster ejecuta GKE 1.25.3-gke.400, puedes cambiar a una versión inferior el plano de control a 1.25.2-gke.100, si esa versión aún está disponible.

No puedes cambiar un plano de control de un clúster de Kubernetes a una versión secundaria anterior. Por ejemplo, si el plano de control ejecuta la versión 1.25 de GKE, no podrás cambiar a la versión inferior 1.24. Si intentas hacerlo, aparecerá el siguiente mensaje de error:

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.24.3-gke.100": specified version is not
newer than the current version.

No puedes cambiar a una versión inferior del plano de control de un clúster, por lo que te recomendamos probar y calificar las actualizaciones de versiones secundarias con clústeres en un entorno de pruebas cuando una versión secundaria nueva está disponible, pero antes de que la versión pase a ser predeterminada. Esto es muy recomendable si tu clúster puede verse afectado por cambios significativos en la próxima versión secundaria, como las APIs o las funciones obsoletas que se quitan.

Para mitigar una actualización incorrecta del grupo de nodos, puedes cambiar un grupo de nodos a una versión inferior o una versión secundaria del parche. Asegúrate de no cambiar los nodos a una versión superior a dos versiones secundarias anteriores a la versión del plano de control del clúster.

Actualiza el clúster

Google actualiza clústeres y nodos de forma automática. Para tener más control sobre las actualizaciones automáticas que reciben tu clúster y sus nodos, puedes inscribirlo en un canal de versiones. Todos los clústeres de Autopilot se inscriben en un canal de versiones de forma automática.

Para obtener más información sobre cómo administrar la versión de GKE de tu clúster, consulta Actualizaciones.

Puedes iniciar una actualización manual en cualquier momento cuando haya una versión nueva disponible.

Actualiza manualmente el plano de control

Cuando se inicia la actualización de un clúster, no se puede modificar la configuración de este durante varios minutos, hasta que se pueda acceder al plano de control de nuevo. Si necesitas prevenir el tiempo de inactividad durante las actualizaciones del plano de control, considera usar un clúster de Autopilot o un clúster estándar regional. Esta operación no afecta la disponibilidad de los nodos trabajadores en los que se ejecutan las cargas de trabajo, ya que permanecen disponibles durante las actualizaciones del plano de control.

Puedes actualizar tu plano de control de Autopilot o Standard de forma manual con la consola de Google Cloud o Google Cloud CLI.

gcloud

Para ver las versiones disponibles del plano de control de tu clúster, ejecuta el siguiente comando:

gcloud container get-server-config

Para actualizar a la versión de clúster predeterminada, ejecuta el siguiente comando:

gcloud container clusters upgrade CLUSTER_NAME --master

Para actualizar a una versión específica que no sea la predeterminada, especifica la marca --cluster-version, como en el siguiente comando:

gcloud container clusters upgrade CLUSTER_NAME --master \
    --cluster-version VERSION

Reemplaza VERSION por la versión a la que deseas actualizar tu clúster. Puedes usar una versión específica, como 1.18.17-gke.100, o un alias de versión, como latest. Para obtener más información, consulta Especifica la versión del clúster.

Console

Para actualizar el plano de control de tu clúster de forma manual, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster deseado.

  3. En Conceptos básicos del clúster, haz clic en Actualización disponible junto a Versión.

  4. Selecciona la versión deseada y, luego, haz clic en Guardar cambios.

Después de actualizar un plano de control de Standard, puedes actualizar sus nodos. De forma predeterminada, los nodos de Standard que se crearon con la consola de Google Cloud tienen habilitada la actualización automática, por lo que esto ocurre de forma automática. Autopilot siempre actualiza los nodos automáticamente.

Pasa los clústeres a una versión anterior

  1. Establece una exclusión de mantenimiento antes de cambiar a una versión inferior para evitar que GKE actualice el plano de control de forma automática después de cambiarlo a una versión inferior.
  2. Cambia el plano de control del clúster a una versión anterior del parche:

     gcloud container clusters upgrade CLUSTER_NAME \
         --master --cluster-version VERSION
    

Inhabilita las actualizaciones automáticas de clústeres

La seguridad de la infraestructura es de alta prioridad para GKE, y esos planos de control se actualizan periódicamente y no se pueden inhabilitar. Sin embargo, puedes aplicar exclusiones y períodos de mantenimiento para suspender de forma temporal las actualizaciones de los planos de control y los nodos.

Aunque no se recomienda, puedes inhabilitar la actualización automática de los nodos.

Actualiza grupos de nodos

De forma predeterminada, los nodos de un clúster tienen habilitada la actualización automática y se recomienda no inhabilitarla . Las actualizaciones automáticas de nodos garantizan que el plano de control y la versión de los nodos del clúster permanezcan sincronizados y cumplan con la política de sesgo de versiones de Kubernetes, que garantiza que los planos de control sean compatibles con los nodos de hasta dos versiones secundarias anteriores a la del plano de control. Por ejemplo, los planos de control de Kubernetes 1.29 son compatibles con los nodos de Kubernetes 1.27.

Con las actualizaciones del grupo de nodos de GKE, puedes elegir entre dos estrategias de actualización configurables, llamadas actualizaciones de aumento y actualizaciones azul-verde.

Elige una estrategia y usa los parámetros para ajustar la estrategia a fin de que se adapte mejor a las necesidades de tu entorno del clúster.

Mientras se actualiza un nodo, GKE deja de programar pods nuevos en él y, en cambio, intenta programar sus pods en ejecución en otros nodos. Esto es similar a otros eventos que recrean el nodo, como la habilitación o inhabilitación de una función en el grupo de nodos.

La actualización se completará cuando se vuelvan a crear todos los nodos y el clúster se encuentre en el estado deseado. Cuando un nodo recién actualizado se registra con el plano de control, GKE marca el nodo como programable.

Las instancias de nodo nuevas ejecutan la versión deseada de Kubernetes y también los elementos siguientes:

Actualiza un grupo de nodos de forma manual

Puedes actualizar la versión de un grupo de nodos de forma manual para que coincida con la versión del plano de control o con una versión inferior que aún esté disponible y que sea compatible con el plano de control. Puedes actualizar varios grupos de nodos en paralelo de forma manual, mientras que GKE actualiza de manera automática solo un grupo de nodos a la vez.

Cuando actualizas de forma manual un grupo de nodos, GKE quita las etiquetas que agregaste a los nodos individuales mediante kubectl. Para evitar esto, aplica etiquetas a los grupos de nodos en su lugar.

Puedes actualizar tus grupos de nodos de forma manual a una versión compatible con el plano de control mediante la consola de Google Cloud o Google Cloud CLI.

gcloud

Las siguientes variables se usan en los comandos de esta sección:

  • CLUSTER_NAME: el nombre del clúster del grupo de nodos que se actualizará.
  • NODE_POOL_NAME: el nombre del grupo de nodos que se actualizará.
  • VERSION: La versión de Kubernetes a la que se actualizan los nodos. Por ejemplo, --cluster-version=1.7.2 o cluster-version=latest.

Actualiza un grupo de nodos:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME

Si deseas especificar una versión diferente de GKE en los nodos, usa la marca opcional --cluster-version:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --cluster-version VERSION

Para obtener más información sobre cómo especificar versiones, consulta Control de versiones.

Para obtener más información, consulta la documentación gcloud container clusters upgrade.

Consola

Si deseas actualizar un grupo de nodos mediante la consola de Google Cloud, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:

    Ir a Google Kubernetes Engine

  2. Junto al clúster que deseas editar, haz clic en  Acciones y, luego, en  Editar.

  3. En la página Detalles del clúster, haz clic en la pestaña Nodos.

  4. En la sección Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas actualizar.

  5. Haz clic en  Editar.

  6. Haz clic en Cambiar, en Versión del nodo.

  7. Selecciona la versión deseada en la lista desplegable Versión del nodo y, luego, haz clic en Cambiar.

Cambia a una versión inferior de los grupos de nodos

Puedes cambiar un grupo de nodos a una versión inferior, por ejemplo, para mitigar una actualización incorrecta del grupo de nodos. Revisa las limitaciones antes de cambiar a una versión inferior de un grupo de nodos.

  1. Establece una exclusión de mantenimiento para el clúster a fin de evitar que GKE actualice el grupo de nodos de forma automática después de cambiar a una versión inferior.
  2. A fin de cambiar un grupo de nodos a una versión anterior, especifica una versión anterior mientras sigues las instrucciones para actualizar un grupo de nodos de forma manual.

Cambia los parámetros de actualización de aumento

Para obtener más información sobre cómo cambiar los parámetros de actualización de aumento, consulta Configura las actualizaciones de aumento.

Comprueba el estado de actualización del grupo de nodos

Puedes verificar el estado de una actualización con gcloud container operations.

Visualiza una lista de cada operación en ejecución o completada en el clúster:

gcloud container operations list

A cada operación se le asigna un ID de operación y un tipo de operación, tiempos de comienzo y finalización, un clúster de destino y un estado. La lista es similar al siguiente ejemplo:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

Para obtener más información sobre una operación en particular, especifica el ID de operación como se muestra en el siguiente comando:

gcloud container operations describe OPERATION_ID

Por ejemplo:

gcloud container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

Verifica la configuración de actualización del grupo de nodos

Puedes ver los detalles de la estrategia de actualización de grupos de nodos que se usa para tus grupos de nodos mediante el comando gcloud container node-pools describe. En las actualizaciones azul-verde, el comando también muestra la fase actual de la actualización.

Ejecuta el siguiente comando:

gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME

Reemplaza lo siguiente:

  • NODE_POOL_NAME: el nombre del grupo de nodos que se debe describir
  • CLUSTER_NAME: el nombre del clúster del grupo de nodos que deseas describir

Este comando generará la configuración de actualización actual. En el siguiente ejemplo, se muestra el resultado si usas la estrategia de actualización azul-verde.

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN

Si usas la estrategia de actualización azul-verde, el resultado también incluye detalles sobre la configuración de actualización azul-verde y su fase intermedia actual. En el siguiente ejemplo, se muestra cómo podría ser este resultado:

updateInfo:
  blueGreenInfo:
    blueInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{BLUE_INSTANCE_GROUP_NAME}
    bluePoolDeletionStartTime: {BLUE_POOL_DELETION_TIME}
    greenInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{GREEN_INSTANCE_GROUP_NAME}
    greenPoolVersion: {GREEN_POOL_VERSION}
    phase: DRAINING_BLUE_POOL

Cancela la actualización de un grupo de nodos

Puedes cancelar una actualización en cualquier momento. Para obtener más información sobre lo que sucede cuando cancelas una actualización de aumento, consulta Cancela una actualización de aumento. Para obtener más información sobre lo que sucede cuando cancelas una actualización azul-verde, consulta Cancela una actualización azul-verde.

  1. Obtén el ID de operación de la actualización:

    gcloud container operations list
    
  2. Cancela la actualización:

    gcloud container operations cancel OPERATION_ID
    

Consulta la documentación de gcloud container operations cancel.

Reanuda una actualización de un grupo de nodos

Para reanudar una actualización, vuelve a iniciarla de forma manual y especifica la versión de destino de la actualización original.

Por ejemplo, si pausaste una actualización a la versión 1.23.1-gke.100 en curso, puedes reanudar esta actualización cancelada si vuelves a iniciar la misma actualización en el grupo de nodos para la versión 1.23.1-gke.100.

Para obtener más información sobre lo que sucede cuando reanudas una actualización, consulta Reanuda una actualización de aumento y actualización azul-verde.

Para reanudar una actualización, usa el siguiente comando:

    gcloud container clusters upgrade CLUSTER_NAME \
      --node-pool=NODE_POOL_NAME \
      --cluster-version VERSION

Reemplaza lo siguiente:

  • NODE_POOL_NAME: El nombre del grupo de nodos para el que deseas reanudar la actualización del grupo de nodos.
  • CLUSTER_NAME: El nombre del clúster del grupo de nodos para el que deseas reanudar la actualización.
  • VERSION: Es la versión de destino de la actualización del grupo de nodos cancelada.

Para obtener más información, consulta la documentación de gcloud container clusters upgrade.

Revierte la actualización de un grupo de nodos

Puedes revertir un grupo de nodos para cambiar los nodos actualizados a su estado original antes de que comience la actualización del grupo de nodos.

Usa el comando rollback si se canceló una actualización en curso, o si la actualización falló o está incompleta debido a un tiempo de espera de período de mantenimiento. Como alternativa, si deseas especificar la versión, sigue las instrucciones para cambiar a una versión inferior del grupo de nodos.

Para obtener más información sobre lo que sucede cuando se revierte una actualización de un grupo de nodos, consulta Revierte una actualización de aumento o Revierte una actualización azul-verde.

Para revertir una actualización, ejecuta el siguiente comando:

gcloud container node-pools rollback NODE_POOL_NAME \
  --cluster CLUSTER_NAME

Reemplaza lo siguiente:

  • NODE_POOL_NAME: el nombre del grupo de nodos en el que se revertirá la actualización del grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster del grupo de nodos para el que se debe revertir la actualización.

Consulta la documentación de gcloud container node-pools rollback.

Completa una actualización del grupo de nodos

Si usas la estrategia de actualización azul-verde, puedes completar una actualización del grupo de nodos durante la fase de prueba y omitir el resto del tiempo de prueba.

Para obtener información sobre cómo funciona la actualización de un grupo de nodos, consulta Completa una actualización de grupo de nodos.

Para completar una actualización cuando usas la estrategia de actualización azul y verde, ejecuta el siguiente comando:

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
  --cluster CLUSTER_NAME

Reemplaza lo siguiente:

  • NODE_POOL_NAME: El nombre del grupo de nodos para el que deseas completar la actualización.
  • CLUSTER_NAME: El nombre del clúster del grupo de nodos para el que deseas completar la actualización.

Consulta la documentación de gcloud container node-pools complete-upgrade.

Problemas conocidos

Si tienes objetos PodDisruptionBudget configurados que no pueden permitir interrupciones adicionales, es posible que las actualizaciones de los nodos no se actualicen a la versión del plano de control después de varios intentos. Para evitar esta falla, te recomendamos que escales verticalmente la Deployment o la HorizontalPodAutoscaler a fin de permitir que el nodo se desvíe y aún respete la configuración de PodDisruptionBudget.

Para ver todos los objetos PodDisruptionBudget que no permiten ninguna interrupción, haz lo siguiente:

kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'

Aunque las actualizaciones automáticas pueden encontrar el problema, el proceso de actualización automática fuerza a los nodos a actualizarse. Sin embargo, la actualización toma una hora de más en cada nodo del espacio de nombres istio-system que infringe el PodDisruptionBudget.

Soluciona problemas

El uso de CPU de los nodos es más alto de lo esperado

Es posible que surja algún problema en el que algunos nodos hacen un uso de CPU más alto que el esperado de los Pods en ejecución.

Esto puede ocurrir si el clúster o los nodos no ejecutan una versión compatible. Revisa las notas de la versión para asegurarte de que las versiones que usas estén disponibles y sean compatibles. También puedes ejecutar el siguiente comando para enumerar todas las versiones de clústeres y nodos compatibles:

gcloud container get-server-config

¿Qué sigue?