En este documento, se muestra cómo administrar las actualizaciones de clústeres de Google Kubernetes Engine (GKE) que usan secuencias de lanzamientos con etapas personalizadas. Para crear una secuencia de lanzamiento, usa grupos de clústeres organizados en flotas y, de manera opcional, subconjuntos de clústeres de esas flotas. Puedes elegir cuánto tiempo de prueba deseas después de que se completen las actualizaciones de clústeres en un grupo (30 días como máximo). Puedes incluir clústeres de Autopilot y Standard. Para obtener más información sobre cómo funciona esta función, consulta Acerca de la secuenciación de lanzamiento con etapas personalizadas.
Si administras lanzamientos en varias flotas, te recomendamos que uses un proyecto dedicado para alojar tus objetos RolloutSequence. Este proyecto actúa como coordinador y superior de las versiones en toda la secuencia. Por lo general, este proyecto no forma parte de la secuencia, es decir, no contiene flotas ni clústeres que sí formen parte de ella.
Antes de comenzar
-
Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:
gcloud initSi usas un proveedor de identidad (IdP) externo, primero debes acceder a la gcloud CLI con tu identidad federada.
- Asegúrate de tener clústeres existentes de Autopilot o Standard. Para crear un clúster nuevo, consulta Crea un clúster de Autopilot.
(Opcional) Si aún no tienes un proyecto de Google Cloud dedicado para alojar tu configuración de
RolloutSequence, crea uno con la consola de Google Cloud o con otro método.Asegúrate de haber habilitado las APIs necesarias para las flotas. Estas APIs deben estar habilitadas en los proyectos host de tu flota para crear cualquier tipo de secuencia de lanzamiento. En el proyecto host de la secuencia de lanzamiento, habilita la API de
gkehub.googleapis.com.
Roles obligatorios
Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
Para crear o modificar una secuencia de lanzamiento, debes tener el rol de IAM de editor de flota (roles/gkehub.editor) en cada proyecto host de la flota de la secuencia de lanzamiento y en el proyecto host de la secuencia de lanzamiento. Este rol proporciona los siguientes permisos:
gkehub.rolloutsequences.creategkehub.rolloutsequences.getgkehub.rolloutsequences.listgkehub.rolloutsequences.updategkehub.rolloutsequences.deletegkehub.fleet.get
Estos permisos te permiten crear, acceder y modificar objetos RolloutSequence, y usar flotas en la secuencia de lanzamiento.
Si necesitas registrar clústeres en una flota o anular su registro, debes tener todos los siguientes permisos:
- Permisos de registro de clústeres en los proyectos host de tu flota.
- Permisos de administrador del clúster para que se registre cualquier clúster de GKE.
- Permisos de registro de clústeres entre proyectos para que cualquier clúster de GKE se registre en una flota en un proyecto diferente.
Para obtener más información sobre los roles de IAM con privilegios mínimos necesarios para diferentes tareas, consulta Obtén sugerencias de roles predefinidos con la ayuda de Gemini.
Configura una secuencia de lanzamiento
Para crear una secuencia de lanzamiento, tus clústeres deben estar organizados en grupos de flotas. También puedes crear etapas detalladas que se pueden segmentar para subconjuntos específicos de clústeres dentro de una flota con etiquetas de Kubernetes. Para obtener orientación sobre cómo organizar tus clústeres, consulta el ejemplo del banco comunitario. Después de organizar los clústeres en grupos y, de manera opcional, etiquetarlos, debes crear una secuencia de lanzamiento definiendo la lista ordenada de etapas y el tiempo de prueba para cada grupo.
Organiza los clústeres en flotas
En una secuencia de lanzamiento, recomendamos inscribir todos los clústeres en el mismo canal de versiones. Si los clústeres no están inscritos en el mismo canal, GKE selecciona una versión del canal más conservador de la secuencia. Por ejemplo, si los clústeres están inscritos en los canales Estable y Regular, GKE elige la versión del canal Estable. También recomendamos que todos los clústeres ejecuten la misma versión secundaria para que sean aptos para la misma versión de destino de actualización automática.
Si ya organizaste tus clústeres en flotas, puedes omitir los siguientes pasos y continuar con la sección Crea subconjuntos de clústeres.
- Agrupa tus clústeres en flotas. Puedes organizar tus clústeres por entornos de implementación, como Pruebas, Etapa de pruebas y Producción (recomendado).
- Registra cada clúster con una flota según la agrupación elegida.
Crea subconjuntos de clústeres (opcional)
Para que una etapa de tu secuencia de lanzamiento se dirija a clústeres específicos, debes etiquetarlos.
Por ejemplo, para probar una versión nueva en un subconjunto pequeño de clústeres antes de un lanzamiento completo, puedes aplicar una etiqueta canary a esos clústeres. Para agregar la etiqueta canary con el valor true a un clúster con Google Cloud CLI, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--location=CLUSTER_LOCATION\
--update-labels=canary=true
Reemplaza lo siguiente:
CLUSTER_NAME: es el nombre del clúster existente.CLUSTER_LOCATION: La región o zona de Compute Engine del clúster.
La marca --update-labels=canary=true indica a GKE que aplique la etiqueta canary al clúster .
Para obtener más información sobre cómo agregar una etiqueta a un clúster, consulta Agrega o actualiza etiquetas en clústeres existentes.
Crea una secuencia de lanzamiento con etapas personalizadas
Una secuencia de lanzamiento define el orden de las actualizaciones por etapas. Para crear una secuencia de lanzamiento, primero debes crear un archivo YAML que defina las etapas y, luego, crear un RolloutSequence.
Para garantizar que la secuencia capture todos los clústeres, cada flota debe incluir una etapa general (una etapa sin un selector de etiquetas). Esta etapa general captura todos los clústeres restantes que GKE no seleccionó en etapas anteriores. Si asignas un solo clúster a varias etapas dentro de un solo RolloutSequence, para resolver conflictos, GKE asigna implícitamente el clúster solo a la etapa más temprana.
En el siguiente ejemplo de configuración, se crean tres etapas:
- La primera etapa se dirige a todos los clústeres de la flota
dev. Una vez que se completa la actualización, hay un tiempo de prueba de 7 días (un valor de604800segundos). - La segunda etapa segmenta los clústeres de la flota
prodque tienen la etiquetacanary=true. Una vez que se completa la actualización, hay un tiempo de estabilización de 7 días. - La tercera etapa se dirige a los clústeres restantes de la flota
prod. Una vez que se completa la actualización, hay un período de estabilización de 7 días.
Guarda el siguiente manifiesto como
rollout-sequence.yaml:- stage: fleet-projects: - projects/dev soak-duration: 604800s - stage: fleet-projects: - projects/prod soak-duration: 604800s label-selector: resource.labels.canary=='true' - stage: fleet-projects: - projects/prod soak-duration: 604800sTen en cuenta lo siguiente:
stage: Incluye una flota o un subconjunto de clústeres dentro de una flota. Los clústeres en etapas anteriores deben actualizarse y probarse por completo antes de que la secuencia avance a la siguiente etapa. Sin embargo, si un clúster no finalizó la actualización 30 días después de que comenzó el proceso, GKE inicia el período de prueba.fleet-projects: Es una lista de flotas desde las que se pueden seleccionar clústeres para esta etapa. Se puede hacer referencia a un máximo de una flota por etapa. Una flota se identifica por el proyecto en el que se aloja. Este proyecto puede ser diferente del proyecto en el que residen los clústeres si la flota contiene membresías entre proyectos. El formato para especificar un proyecto de flota esprojects/PROJECT_ID.label-selector(opcional): Selecciona un subconjunto de clústeres de las flotas especificadas. Este campo usa la sintaxis de Common Expression Language (CEL) y debe comenzar conresource.labels.soak-duration: Es el tiempo de espera después de actualizar todos los clústeres en una etapa anterior antes de continuar con la siguiente etapa. Se expresa en segundos.
Para crear la secuencia de lanzamiento que definiste en el manifiesto
rollout-sequence.yaml, ejecuta el siguiente comando:gcloud beta container fleet rolloutsequences create ROLLOUT_SEQUENCE_NAME \ --display-name=DISPLAY_NAME \ --stage-config=rollout-sequence.yamlReemplaza lo siguiente:
ROLLOUT_SEQUENCE_NAME: Es un identificador inmutable que se ajusta a las especificaciones de RFC-1034, por ejemplo,test-rollout-sequence.DISPLAY_NAME: Es una cadena legible para tu secuencia de lanzamiento.
Verifica el estado de un lanzamiento
Después de configurar una secuencia de lanzamiento, el sistema crea automáticamente objetos Rollout para administrar las actualizaciones. Puedes observar y hacer un seguimiento del progreso de estos objetos con los comandos de Google Cloud CLI.
Enumera lanzamientos
Para enumerar todos los lanzamientos activos y los históricos en el proyecto host de la secuencia de lanzamiento, ejecuta el siguiente comando:
gcloud beta container fleet rollouts list --project=HOST_PROJECT_ID
Reemplaza HOST_PROJECT_ID por el ID de tu proyecto host de la secuencia de lanzamiento.
Puedes omitir la marca --project=HOST_PROJECT_ID si ya estás en el proyecto en el que se aloja tu secuencia de lanzamiento.
El resultado es similar a lo siguiente:
NAME STATE CREATE_TIME
05eb251e4f19269e23-node-1-33-5-gke-1201000-t7mqd COMPLETED 2025-10-30T20:07:46
05eb251e4f19269e23-kcp-1-33-5-gke-1201000-djwst COMPLETED 2025-10-30T18:07:06
05eb251e4f19269e23-node-1-33-5-gke-1125000-6bxvu COMPLETED 2025-10-23T17:46:54
05eb251e4f19269e23-kcp-1-33-5-gke-1125000-2f6ct RUNNING 2025-10-23T16:41:33
En el resultado anterior, los nombres de la implementación que contienen kcp hacen referencia a las actualizaciones del plano de control, y los nombres que contienen node hacen referencia a las actualizaciones de nodos. El segmento del nombre de la versión de lanzamiento después de kcp o node se deriva de la versión de GKE.
Describe un lanzamiento
Para obtener información detallada sobre un lanzamiento en particular, incluida la versión de destino, el estado y los clústeres que se actualizaron, usa el comando describe con el ID del lanzamiento que obtuviste del comando anterior:
gcloud beta container fleet rollouts describe ROLLOUT_ID \
--project=HOST_PROJECT_ID
Reemplaza lo siguiente:
ROLLOUT_ID: ID de la versión que obtuviste cuando enumeraste las versiones.HOST_PROJECT_ID: Es el ID del proyecto en el que se aloja tu secuencia de lanzamiento.
Por ejemplo:
gcloud beta container fleet rollouts describe 927e9a989930cf3b55-kcp-1-32-4-gke-1106006 \
--project=my-hostfleet
El resultado es similar a lo siguiente:
createTime: '2025-05-26T11:47:29.909959672Z'
membershipStates:
projects/dev-project-id/locations/us-central1/memberships/c-1:
lastUpdateTime: '2025-05-26T12:20:55.601542481Z'
targets:
- cluster: projects/dev-project-id/locations/us-central1/clusters/c-1
operation: //container.googleapis.com/v1/projects/dev-project-id/locations/us-central1/operations/operation-1234567890-abcdefg-hijklm-nopqrst
state: SUCCEEDED
stageAssignment: 1
projects/dev-project-id/locations/us-central1/memberships/c-2:
lastUpdateTime: '2025-05-26T12:22:57.151203493Z'
targets:
- cluster: projects/dev-project-id/locations/us-central1/clusters/c-2
operation: //container.googleapis.com/v1/projects/dev-project-id/locations/us-central1/operations/operation-987654321-ghijkl-mno-pqr-stu-vwxyz
state: SUCCEEDED
stageAssignment: 1
projects/prod-project-id/locations/us-central1/memberships/c-1:
lastUpdateTime: '2025-05-26T13:03:34.134308942Z'
targets:
- cluster: projects/prod-project-id/locations/us-central1/clusters/c-1
operation: //container.googleapis.com/v1/projects/prod-project-id/locations/us-central1/operations/operation-567891234-efghij-klm-nopq-rstu-vwxyz
state: SUCCEEDED
stageAssignment: 2
projects/prod-project-id/locations/us-central1/memberships/c-2:
lastUpdateTime: '2025-05-26T13:06:34.025261641Z'
targets:
- cluster: projects/prod-project-id/locations/us-central1/clusters/c-1
operation: //container.googleapis.com/v1/projects/prod-project-id/locations/us-central1/operations/operation-765432198-01a7b896-67c2-523-6fjjh4-icmdydh
state: SUCCEEDED
stageAssignment: 2
name: projects/user-hostfleet/locations/global/rollouts/05eb251e4f19269e23-kcp-1-32-4-gke-1106006
rolloutSequence: projects/project-id/locations/global/rolloutSequences/my-sequence
state: COMPLETED
updateTime: '2025-07-22T07:36:51.052691989Z'
versionUpgrade:
desiredVersion: 1.32.4-gke.1106006
type: TYPE_CONTROL_PLANE
stages:
- state: COMPLETED
endTime: '2025-05-26T12:22:28.828506491Z'
stageNumber: 1
startTime: '2025-05-26T11:48:28.772658427Z'
soakDuration: 600s
- state: COMPLETED
endTime: '2025-05-26T13:06:20.026390832Z'
stageNumber: 2
startTime: '2025-05-26T12:32:38.419372153Z'
soakDuration: 600s
Información de estado de un lanzamiento
Cuando describes un lanzamiento, los campos stages y membershipStates del resultado proporcionan el estado de progreso de cada etapa y clúster dentro de esa etapa, respectivamente.
En la siguiente tabla, se enumeran los estados posibles de una etapa:
| Estado | Descripción |
|---|---|
PENDING |
La actualización aún no comenzó para esta etapa. |
RUNNING |
La actualización está en curso para esta etapa. Si configuraste un período de mantenimiento para los clústeres en la etapa, GKE espera a que se abra el período antes de actualizar los clústeres. |
SOAKING |
Todos los clústeres en esta etapa completaron sus actualizaciones, y la etapa se encuentra en su período de prueba configurado. |
FORCED_SOAKING |
La actualización tardó más que el tiempo máximo de actualización (30 días) y, por lo tanto, GKE inició la fase de prueba de forma forzada. La actualización aún continúa en los clústeres restantes. |
COMPLETED |
La etapa finalizó su período de permanencia y el lanzamiento continúa con la siguiente etapa. |
En la siguiente tabla, se enumeran los estados posibles de un clúster dentro de una secuencia:
| Estado | Descripción |
|---|---|
PENDING |
La actualización está pendiente en este clúster. |
INELIGIBLE |
Este clúster no es apto para la actualización, posiblemente debido a una discrepancia de versión. El motivo por el que no cumple con los requisitos se proporciona en el resultado. |
RUNNING |
La actualización está en curso en este clúster. |
SUCCEEDED |
La actualización se completó correctamente en este clúster. |
FAILED |
No se pudo realizar la actualización en este clúster. Los destinos con errores se reintentan de forma indefinida mientras su etapa está activa (en estado RUNNING o FORCED_SOAKING). |
Administra una secuencia de lanzamiento
Puedes controlar las actualizaciones automáticas del clúster con la secuencia de lanzamiento de varias maneras, que se explican en las siguientes secciones.
Enumera tus secuencias de lanzamiento
Para enumerar todas las secuencias de lanzamiento en tu proyecto host, ejecuta el siguiente comando:
gcloud beta container fleet rolloutsequences list --project=HOST_PROJECT_ID
Reemplaza HOST_PROJECT_ID por el ID de tu proyecto host de la secuencia de lanzamiento.
Describe una secuencia de lanzamiento
Para ver los detalles de una secuencia de lanzamiento específica, ejecuta el siguiente comando:
gcloud beta container fleet rolloutsequences describe ROLLOUT_SEQUENCE_NAME \
--project=HOST_PROJECT_ID
Reemplaza lo siguiente:
ROLLOUT_SEQUENCE_NAME: Es el nombre de la secuencia de lanzamiento.HOST_PROJECT_ID: Es el ID de tu proyecto host de la secuencia de lanzamiento.
El resultado es similar a lo siguiente:
createTime: '2025-10-23T16:40:16.403871189Z'
displayName: my-display-name
name: projects/HOST_PROJECT_ID/locations/global/rolloutSequences/ROLLOUT_SEQUENCE_NAME
stages:
- clusterSelector:
labelSelector: resource.labels.canary=='true'
fleetProjects:
- projects/FLEET_PROJECT_ID
soakDuration: 600s
- fleetProjects:
- projects/FLEET_PROJECT_ID
soakDuration: 300s
uid: 5c5b2ac8-9d76-45f9-92ca-5e6bd3fbcaef
updateTime: '2025-10-23T17:11:57.285678399Z'
Modifica una secuencia de lanzamiento
Puedes modificar una secuencia de lanzamiento existente editando el archivo de configuración YAML en el que definiste la secuencia. Por ejemplo, puedes actualizar el tiempo de prueba de una etapa o actualizar la etapa para cambiar el orden de las actualizaciones. Después de editar el archivo, aplica los cambios.
Por ejemplo, si definiste la secuencia de lanzamiento original en un archivo llamado rollout-sequence.yaml, edita el archivo según sea necesario. Luego, ejecuta el siguiente comando:
gcloud beta container fleet rolloutsequences update test-rollout-sequence \
--display-name="My Updated Rollout Sequence" \
--stage-config=rollout-sequence.yaml
Cómo borrar una secuencia de lanzamiento
Para borrar una secuencia de lanzamiento, ejecuta el siguiente comando:
gcloud beta container fleet rolloutsequences delete ROLLOUT_SEQUENCE_NAME \
--project=HOST_PROJECT_ID
Reemplaza lo siguiente:
ROLLOUT_SEQUENCE_NAMEpor el nombre de la secuencia de lanzamiento.HOST_PROJECT_IDcon el ID de tu proyecto host de la secuencia de lanzamiento.
Cuando borras una secuencia de lanzamiento, se cancelan todos los lanzamientos en curso de esa secuencia. Los clústeres que formaban parte de la secuencia vuelven al comportamiento predeterminado de actualización automática para su canal de versiones inscrito.
Migra una secuencia de lanzamiento existente para usar etapas personalizadas
Si usas la versión de lanzamiento secuenciado basada en flotas disponible de forma general, puedes migrar a una secuencia que use etapas personalizadas creando un nuevo RolloutSequence que haga referencia a tus flotas existentes.
Antes de migrar la secuencia, te recomendamos que hagas una copia de la configuración actual de la secuencia de lanzamiento.
Para migrar tu secuencia de lanzamiento, completa los siguientes pasos:
- Crea un proyecto Google Cloud dedicado para alojar tu secuencia de lanzamiento. Por lo general, este proyecto no forma parte de la secuencia, es decir, no contiene flotas ni clústeres que sí formen parte de la secuencia.
- Si deseas que la secuencia de lanzamiento incluya clústeres específicos dentro de una flota, agrega etiquetas a esos clústeres. Este paso es opcional.
Sigue las instrucciones en Crea una secuencia de lanzamiento con etapas personalizadas.
Por ejemplo, el siguiente manifiesto, llamado
rollout-sequence-migrate.yaml, hace referencia a las versiones existentes en una secuencia de lanzamiento anterior. En este manifiesto, se describen tres etapas, incluida una etapa decanaryen la flota deprod:- stage: fleet-projects: - projects/dev soak-duration: 604800s - stage: fleet-projects: - projects/prod soak-duration: 604800s label-selector: canary=true - stage: fleet-projects: - projects/prod soak-duration: 604800s
Inmediatamente después de que definas un nuevo RolloutSequence para tus flotas, GKE comenzará a actualizarlas según la nueva secuencia y quitará la configuración anterior.
Migra una secuencia de lanzamiento con etapas personalizadas a la secuencia de lanzamiento anterior
En esta sección, se describe cómo volver de la secuenciación de lanzamientos con etapas personalizadas al modelo de secuenciación basado en flotas disponible de forma general. Este proceso implica borrar el nuevo RolloutSequence y restablecer la configuración original basada en la flota.
Evita la actualización desordenada durante la migración
Para evitar actualizaciones no deseadas o fuera de orden mientras reconfiguras tu secuencia, aplica una exclusión de mantenimiento a tus clústeres de producción. Con este paso, se pausan temporalmente todas las actualizaciones automáticas en esos clústeres. Por ejemplo, puedes configurar una exclusión de mantenimiento de tipo no upgrades en tus clústeres de producción.
Borra la secuencia de lanzamiento
Borra el objeto RolloutSequence que administra tus clústeres. Esta eliminación desactiva la función de etapas personalizadas.
Para borrar el RolloutSequence, ejecuta el siguiente comando:
gcloud beta container fleet rolloutsequences delete ROLLOUT_SEQUENCE_NAME
Reemplaza ROLLOUT_SEQUENCE_NAME por el nombre de tu secuencia de lanzamiento.
Restablece la configuración anterior de la secuencia de lanzamiento (sin etapas personalizadas)
Después de borrar el RolloutSequence, puedes restablecer la configuración original basada en la flota. Este proceso implica volver a crear las funciones de clusterupgrade con sus parámetros originales, incluidos los vínculos de upstreamFleet y los tiempos de absorción de cada flota en tu secuencia. Para obtener más información, consulta Crea una secuencia de lanzamiento.
Quita las exclusiones de mantenimiento
Después de restablecer la configuración original de la secuencia de lanzamiento basada en la flota, quita la exclusión de mantenimiento que aplicaste en el primer paso de esta sección. GKE reanuda las actualizaciones automáticas, que ahora se rigen por la secuencia basada en la flota que restableciste.
Pasos siguientes
- Obtén más información sobre las actualizaciones de clústeres con secuencia de lanzamiento.