De forma predeterminada, Google actualiza de forma automática los clústeres y grupos de nodos de Google Kubernetes Engine. 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. Consulta Control de versiones y actualizaciones para conocer las versiones disponibles. 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 de gcloud
predeterminada mediante uno de los siguientes métodos:
- Usa
gcloud init
si deseas ver una explicación sobre cómo configurar parámetros predeterminados. - Usa
gcloud config
para establecer el ID, la zona y la región del proyecto de manera individual.
Usa gcloud init
Si recibes el error One of [--zone, --region] must be supplied: Please specify
location
, completa esta sección.
-
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
- Sigue las instrucciones a fin de autorizar a
gcloud
para que use tu cuenta de Google Cloud. - Crea una configuración nueva o selecciona una existente.
- Elige un proyecto de Google Cloud.
- Elige una zona predeterminada de Compute Engine.
Usa gcloud config
- Establece tu ID del proyecto predeterminado:
gcloud config set project project-id
- Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
gcloud config set compute/zone compute-zone
- Si trabajas con clústeres regionales, establece tu región de procesamiento predeterminada:
gcloud config set compute/region compute-region
- Actualiza
gcloud
a la versión más reciente:gcloud components update
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.
Sobre la actualización de clústeres
El plano de control y los nodos de un clúster se actualizan por separado.
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
Problemas conocidos
Si tienes Anthos Service Mesh o OSS Istio instalado en tu clúster, según la configuración de PodDisruptionBudget para los componentes de Istio, es posible que los nodos del usuario no se actualicen a la versión del plano de control después de varios intentos. A fin de evitar este error, te recomendamos que aumentes la configuración del ajuste de escala automático horizontal de Pods minReplicas
de 1 a 2 para los componentes del espacio de nombres istio-system
antes de la actualización. Esto garantizará que siempre tengas una instancia del plano de control de ASM en ejecución.
Si tienes Anthos Service Mesh 1.5+ o OSS Istio 1.5+, ejecuta lo siguiente:
kubectl patch hpa -n istio-system istio-ingressgateway -p '{"spec":{"minReplicas": 2}}' --type=merge
kubectl patch hpa -n istio-system istiod -p '{"spec":{"minReplicas": 2}}' --type=merge
Si tienes OSS Istio 1.4.x o Anthos Service Mesh 1.4.x, ejecuta lo siguiente:
kubectl patch hpa -n istio-system istio-galley -p '{"spec":{"minReplicas": 2}}' --type=merge
kubectl patch hpa -n istio-system istio-ingressgateway -p '{"spec":{"minReplicas": 2}}' --type=merge
kubectl patch hpa -n istio-system istio-nodeagent -p '{"spec":{"minReplicas": 2}}' --type=merge
kubectl patch hpa -n istio-system istio-pilot -p '{"spec":{"minReplicas": 2}}' --type=merge
kubectl patch hpa -n istio-system istio-sidecar-injector -p '{"spec":{"minReplicas": 2}}' --type=merge
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.
Limitaciones del cambio a una versión inferior
No se recomienda pasar un clúster a una versión inferior. Los nodos se pueden cambiar a una versión de parche anterior a la versión del clúster. No puedes cambiar un clúster de una versión secundaria a otra. Por ejemplo, si un clúster ejecuta GKE 1.11.5, puedes cambiar a la versión inferior 1.11.4 si todavía está disponible, pero no puedes cambiar a la versión inferior 1.10.9. Esto último genera un error como el siguiente:
ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.10.9-gke.9": specified version is not
newer than the current version.
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 Control de versiones y 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
Si quieres actualizar la versión del plano de control de tu clúster, primero ejecuta el siguiente comando a fin de ver las versiones disponibles:
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
Si deseas actualizar a una versión específica que no es la predeterminada, ejecuta el comando siguiente:
gcloud container clusters upgrade cluster-name \
--master --cluster-version cluster-version
Consulta la documentación de gcloud container clusters upgrade
.
Console
Para actualizar el plano de control de tu clúster de forma manual, sigue estos pasos:
Dirígete al menú de Google Kubernetes Engine en Google Cloud Console.
Selecciona el clúster que desees.
Haz clic en el vínculo Actualización disponible junto a Versión de la instancia principal.
Selecciona la versión deseada y, luego, haz clic en Cambiar.
Haz clic en la flecha en la parte superior de la pantalla para volver a la página de descripción general del clúster.
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 downgrade-version
Inhabilita las actualizaciones automáticas de clústeres
No se pueden inhabilitar las actualizaciones automáticas de clústeres. Aunque no se recomienda, puedes inhabilitar la actualización automática de los nodos.
Actualiza los 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, 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. El nodo se vuelve a crear en la versión nueva, pero con el mismo nombre que antes. 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:
- La imagen de nodo
- El daemon de Docker, si corresponde
kubelet
kube-proxy
Actualiza un nodo 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.
Puedes actualizar tus 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
Mediante el siguiente comando, se actualizan tus nodos a la versión que ejecuta tu plano de control:
gcloud container clusters upgrade cluster-name \
--node-pool=node-pool-name
en el que cluster-name es el nombre del clúster que debe actualizarse.
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 cluster-version
En el código anterior, cluster-version es la versión de Kubernetes a la que se actualizan 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 la documentación de Control de versiones y actualizaciones.
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:
Ve al menú de Google Kubernetes Engine en Cloud Console.
Haz clic en el botón Editar del clúster, que tiene forma de lápiz.
En la sección Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas actualizar.
Haz clic en el botón Editar.
Haz clic en el vínculo Cambiar junto a la Versión del nodo.
Selecciona la versión deseada y, luego, haz clic en Cambiar.
Haz clic en Guardar.
Cambia nodos a versiones inferiores
No es posible cambiar un grupo de nodos a una versión inferior. En su lugar, debes crear un grupo de nodos nuevo en la versión deseada y migrar tus cargas de trabajo a él. Los nodos que tienen la actualización automática habilitada se actualizan para coincidir con la versión del plano de control.
Verifica el estado de actualización 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 nodo
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.
Primero, obtén el ID de operación de la actualización mediante el siguiente comando:
gcloud container operations list
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 nodo
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
En el ejemplo anterior, se ilustra lo siguiente:
- node-pool-name es el nombre del grupo de nodos que debe revertirse.
- cluster-name es el nombre del clúster en el que se debe 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 Determina 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 es el nombre del clúster para el grupo de nodos.
- compute-zone es la zona del clúster.
- node-pool-name es el nombre del grupo de nodos.
- number-nodes es la cantidad de nodos en el grupo de nodos de cada una de las zonas del clúster.
- surge-nodes es la cantidad de nodos adicionales (aumento) que se crearán en cada actualización del grupo de nodos.
- unavailable-nodes es la cantidad de nodos que pueden no estar disponibles al mismo tiempo 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
¿Qué sigue?
- Obtén más información sobre la arquitectura del clúster.
- Obtén información sobre los canales de versiones.