Actualizar manualmente un clúster o un grupo de nodos


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

En esta página, se explica cómo solicitar de forma manual una actualización o una versión inferior de un clúster de GKE o sus nodos. 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. 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:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece la configuración predeterminada de la herramienta de línea de comandos de gcloud para tu proyecto mediante uno de los siguientes métodos:
    • Usa gcloud init si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto.
    • Usa gcloud config para configurar el ID, la zona y la región del proyecto de manera individual.

    gcloud init

    1. Ejecuta gcloud init y sigue las instrucciones:

      gcloud init

      Si usas SSH en un servidor remoto, usa la marca --console-only para evitar que el comando abra un navegador:

      gcloud init --console-only
    2. Sigue las instrucciones para autorizar a la herramienta de gcloud a usar tu cuenta de Google Cloud.
    3. Crea una configuración nueva o selecciona una existente.
    4. Elige un proyecto de Google Cloud.
    5. Elige una zona de Compute Engine predeterminada.
    6. Elige una región de Compute Engine predeterminada.

    gcloud config

    1. Establece tu ID del proyecto predeterminado:
      gcloud config set project PROJECT_ID
    2. Configura la región de Compute Engine predeterminada (por ejemplo, us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Configura la zona de Compute Engine predeterminada (por ejemplo, us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Actualiza gcloud a la versión más reciente:
      gcloud components update

    Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la herramienta gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location.

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 obtener notificaciones proactivas de las actualizaciones, consulta Recibe notificaciones de actualización del 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

Limitaciones del cambio a una versión inferior

No se recomienda cambiar el plano de control de un clúster a una versión inferior. No puedes cambiar el plano de control de un clúster de una versión menor a otra. Por ejemplo, si el plano de control ejecuta la versión 1.17.17 de GKE, no podrás cambiar a la versión inferior 1.16.15. Si intentas hacerlo, verás un error similar al siguiente:

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

No se recomienda cambiar a una versión anterior de Kubernetes o aplicar parches, y solo se debe usar como mitigación para una actualización no exitosa.

Para mitigar una actualización incorrecta del plano de control del clúster, puedes cambiar la versión del parche por una anterior si la versión del parche es la misma versión menor que la que tiene el clúster Por ejemplo, si tu clúster ejecuta GKE 1.17.17, puedes cambiar a la versión inferior 1.17.16 si esa versión aún está disponible.

Para mitigar una actualización incorrecta del grupo de nodos, puedes cambiar un grupo de nodos a una versión de parche anterior a la versión del plano de control del clúster. Los nodos no pueden ser más de dos versiones menores 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.

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 regional.

Puedes actualizar tu clúster de forma manual con Cloud Console o la herramienta de línea de comandos de gcloud. Después de actualizar el clúster, puedes actualizar sus nodos. De forma predeterminada, los nodos que se crearon con Google Cloud Console tienen habilitada la actualización automática, por lo que esto ocurre de forma automática.

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 Cloud Console:

    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.

Pasa los clústeres a una versión anterior

Para cambiar un clúster a una versión anterior del parche, cambia la versión del plano de control del clúster mediante el siguiente comando:

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.

Cuando se actualiza un grupo de nodos, puedes definir la configuración de actualización de aumento para controlar cuántos nodos se actualizan GKE a la vez y cómo interrumpe la actualización a las cargas de trabajo. De forma predeterminada, GKE actualiza un nodo a la vez.

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. La política de compatibilidad de versiones y del sesgo de versiones de Kubernetes garantiza que los planos de control sean compatibles con nodos de hasta dos versiones secundarias inferiores a la del plano de control. Por ejemplo, los planos de control de Kubernetes 1.13 son compatibles con los nodos de Kubernetes 1.11.

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 (vista previa) en su lugar.

Puedes actualizar tus grupos de nodos de forma manual a una versión compatible con el plano de control mediante Google Cloud Console o la herramienta de línea de comandos de gcloud.

gcloud

Para actualizar todos los nodos a la misma versión que el plano de control, ejecuta el comando gcloud container clusters upgrade:

gcloud container clusters upgrade CLUSTER_NAME

Reemplaza CLUSTER_NAME por el nombre del clúster que deseas actualizar.

Para actualizar un grupo de nodos específico, establece la marca --node-pool:

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

Reemplaza VERSION por la versión de Kubernetes a la que se actualizarán los nodos. Por ejemplo, --cluster-version=1.7.2 o cluster-version=latest.

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.

Console

Si deseas actualizar un grupo de nodos mediante Cloud Console, sigue estos pasos:

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

    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

Comprueba el estado de actualización del grupo de nodos

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

Para obtener una lista de cada operación en ejecución o completada en el clúster, ejecuta el comando siguiente:

gcloud beta 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 en el siguiente comando:

gcloud beta container operations describe OPERATION_ID

Por ejemplo:

gcloud beta 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

Cancela la actualización de un grupo de nodos

Puedes cancelar una actualización en cualquier momento. Esto es lo que sucede cuando cancelas una actualización:

  • Los nodos que comenzaron la actualización la completan.
  • Los nodos que no comenzaron la actualización no se actualizan.
  • Los nodos que ya completaron de forma correcta la actualización no se ven afectados y no se revierten.
  1. Primero, obtén el ID de operación de la actualización mediante el siguiente comando:

    gcloud container operations list
    
  2. Ejecuta el siguiente comando para cancelar la actualización:

    gcloud beta container operations cancel OPERATION_ID
    

Consulta la documentación de gcloud container operations cancel.

Revierte la actualización de un grupo de nodos

Puedes revertir los grupos de nodos que no pudieron actualizarse, o cuyas actualizaciones fueron canceladas, a su versión anterior de Kubernetes. No puedes revertir los grupos de nodos una vez que se actualizaron con éxito. Los nodos que no comenzaron la actualización no se ven afectados.

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 que se debe revertir.
  • CLUSTER_NAME: el nombre del clúster en el que se revertirá el grupo de nodos.

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

Cambia los parámetros de actualización de aumento

Las actualizaciones de aumento te permiten cambiar la cantidad de nodos que GKE actualiza a la vez y la cantidad de interrupciones que una actualización genera en tus cargas de trabajo.

Las marcas max-surge-upgrade y max-unavailable-upgrade se definen para cada grupo de nodos. Para obtener más información sobre cómo elegir los parámetros adecuados, consulta la sección sobre cómo determinar la configuración de aumento óptima.

Puedes cambiar esta configuración cuando crees o actualices un clúster o un grupo de nodos.

Las siguientes variables se usan en los comandos que se mencionan a continuación:

  • CLUSTER_NAME: el nombre del clúster para el grupo de nodos.
  • COMPUTE_ZONE: la zona del clúster.
  • NODE_POOL_NAME: el nombre del grupo de nodos
  • NUMBER_NODES: la cantidad de nodos del grupo de nodos en cada una de las zonas del clúster.
  • SURGE_NODES: la cantidad de nodos adicionales (aumento) que se crearán en cada actualización del grupo de nodos.
  • UNAVAILABLE_NODES: la cantidad de nodos que pueden no estar disponibles simultáneamente en cada actualización del grupo de nodos.

Crea un clúster con diferentes parámetros de aumento

A fin de crear un clúster con una configuración específica para actualizaciones de aumento, usa las marcas max-surge-upgrade y max-unavailable-upgrade.

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Crea un clúster con las actualizaciones de aumento inhabilitadas

Para crear un clúster sin actualizaciones de aumento, establece el valor de la marca max-surge-upgrade en 0.

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=0 --max-unavailable-upgrade=1

Crea un grupo de nodos con diferentes parámetros de aumento

A fin de crear un grupo de nodos en un clúster existente con una configuración específica para actualizaciones de aumento, usa las marcas max-surge-upgrade y max-unavailable-upgrade.

gcloud container node-pools create NODE_POOL_NAME \
  --num-nodes=NUMBER_NODES --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Activa o desactiva la actualización de aumento para un grupo de nodos existente

Para actualizar la configuración de actualización de un grupo de nodos existente, usa las marcas max-surge-upgrade y max-unavailable-upgrade. Si estableces max-surge-upgrade en un valor mayor a 0, GKE crea nodos de aumento. Si estableces max-surge-upgrade en 0, GKE no creará nodos de aumento.

gcloud beta container node-pools update NODE_POOL_NAME \
  --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

Comprueba si las actualizaciones de aumento están habilitadas en un grupo de nodos

A fin de ver si las actualizaciones de aumento están habilitadas en un grupo de nodos, usa gcloud para describir los parámetros del clúster:

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

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?