En esta página, se explica cómo usar paquetes de flota de Sincronizador de configuración para implementar recursos de Kubernetes en clústeres registrados en una flota. Después de crear y, luego, implementar un paquete de flota, cuando agregues un clúster nuevo a tu flota, el paquete de flota implementará automáticamente los archivos de configuración de Kubernetes en el repositorio de Git en el clúster nuevo.
Un FleetPackage es una API declarativa para implementar manifiestos sin procesar de Kubernetes en una flota de clústeres. Todos los recursos de Kubernetes que desees implementar con un paquete de flota deben estar ya hidratados (WET).
Antes de comenzar
Crea un repositorio de Git con los recursos de Kubernetes que deseas implementar en una flota, o asegúrate de tener acceso a uno.
Instala e inicializa Google Cloud CLI, que proporciona los comandos
gcloudynomos. Si usas Cloud Shell, Google Cloud CLI ya está instalada. Si ya instalaste Google Cloud CLI, ejecutagcloud components updatepara obtener la versión más reciente.Habilita la API de Sincronizador de configuración (
anthosconfigmanagement) y la API deConfigDelivery:gcloud services enable anthosconfigmanagement.googleapis.com configdelivery.googleapis.comEstablece una ubicación predeterminada:
gcloud config set config_delivery/location us-central1Sigue estos pasos para establecer un proyecto predeterminado:
gcloud config set project PROJECT_IDReemplaza
PROJECT_IDpor el ID del proyecto host de la flota.Asegúrate de que tus clústeres estén registrados en una flota.
Usa repositorios de Cloud Build para crear una conexión con un proveedor compatible, como GitHub o GitLab. Cuando usas un paquete de flota, debes configurar Cloud Build solo una vez por cada repositorio que quieras sincronizar.
Revisa los requisitos del clúster
Antes de instalar Sincronizador de configuración en tu clúster, revisa las recomendaciones y los requisitos de configuración del clúster.
Prepara el entorno
Para preparar tu entorno para los paquetes de flotas de Sincronizador de configuración, otorga los roles de IAM necesarios al usuario que registra el clúster.
Instalar el Sincronizador de configuración
Puedes instalar Sincronizador de configuración con la Google Cloud consola o Google Cloud CLI.
Console
Para instalar Sincronizador de configuración, todos los clústeres deben estar registrados en una flota. Cuando instalas Sincronizador de configuración en la Google Cloud consola, la selección de clústeres individuales los registra automáticamente en tu flota.
- En la Google Cloud consola, ve a la página Config en la sección Features.
Haz clic en add Instalar Config Sync.
En Opciones de instalación, selecciona Instalar el Sincronizador de configuración en toda la flota (recomendado).
Haz clic en Instalar el Sincronizador de configuración. En la pestaña Configuración, después de unos minutos, deberías ver Habilitado en la columna Estado para los clústeres de tu flota.
gcloud
Habilita la función de flota
ConfigManagement:gcloud beta container fleet config-management enablePara habilitar Sincronizador de configuración, crea un archivo llamado
apply-spec.yamlcon el siguiente contenido:applySpecVersion: 1 spec: configSync: enabled: trueAplica el archivo
apply-spec.yaml:gcloud beta container fleet config-management apply \ --membership=MEMBERSHIP_NAME \ --config=apply-spec.yamlReemplaza
MEMBERSHIP_NAMEpor el nombre de membresía de la flota que elegiste cuando registraste tu clúster. Para encontrar el nombre de la membresía, ejecuta el comandogcloud container fleet memberships list.
Crea una cuenta de servicio para Cloud Build
Los paquetes de flota usan Cloud Build para recuperar los recursos de Kubernetes de tu repositorio de Git y, luego, implementarlos en tus clústeres. Cloud Build requiere una cuenta de servicio que tenga los permisos para ejecutar este trabajo. Para crear la cuenta de servicio y otorgar los permisos necesarios, completa los siguientes pasos:
Crea la cuenta de servicio:
gcloud iam service-accounts create "SERVICE_ACCOUNT_NAME"Reemplaza
SERVICE_ACCOUNT_NAMEpor un nombre para la cuenta de servicio. El nombre debe ser un ID alfanumérico de entre 6 y 30 caracteres, por ejemplo,my-service-account. Después de crear una cuenta de servicio, no podrás cambiar su nombre.Agrega una vinculación de política de IAM para el rol de publicador de paquetes de recursos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/configdelivery.resourceBundlePublisher'Si se te solicita, selecciona
Nonecomo la condición de la política.Agrega una vinculación de política de IAM para el rol de escritor de registros:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/logging.logWriter'Si se te solicita, selecciona
Nonecomo la condición de la política.Agrega una vinculación de política de IAM para el rol de escritor de Artifact Registry:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/artifactregistry.writer'Si se te solicita, selecciona
Nonecomo la condición de la política.
Crea un paquete de flota
Para crear un paquete de flota, debes definir una especificación FleetPackage que apunte al repositorio con los recursos de Kubernetes que conectaste a Cloud Build. Luego, aplicas el FleetPackage, que recupera los recursos de Git y los implementa en toda la flota.
Crea un archivo llamado
fleetpackage-spec.yamlcon el siguiente contenido:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/CONNECTION_NAME/repositories/REPOSITORY_NAME tag: TAG serviceAccount: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com path: CONFIG_FILE_PATH target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: MAX_CLUSTERS # set the state to SUSPENDED to pause new rollouts # set the state back to ACTIVE to resume rollouts # state: SUSPENDEDReemplaza lo siguiente:
CONNECTION_NAME: Es el nombre que elegiste cuando conectaste tu host de Git a Cloud Build. Puedes ver todas las conexiones de Cloud Build en tu proyecto ejecutandogcloud builds connections listo abriendo la página Repositorios en la consola de Google Cloud :REPOSITORY_NAME: el nombre de tu repositorio. Debe ser idéntico al valor que ingresaste cuando configuraste tu conexión de Cloud Build.TAG: Es la etiqueta de Git de tu repositorio. El formato debe ser la versión semántica completa con el número de versión principal, secundaria y de parche. Por ejemplo,v1.0.0es una etiqueta válida, mientras quev1ov1.0no lo son.CONFIG_FILE_PATH: Es la ruta de acceso a tus recursos de Kubernetes en el repositorio. Si tus archivos están en la raíz del repositorio, puedes omitir este campo.MAX_CLUSTERS: Es la cantidad máxima de clústeres en los que se pueden implementar recursos de Kubernetes al mismo tiempo. Por ejemplo, si configuras este parámetro en1, los paquetes de recursos se implementarán en un clúster a la vez.Para obtener una lista completa de todos los campos que puedes configurar, consulta la documentación de referencia de
FleetPackage.
Crea el paquete de flota:
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlReemplaza
FLEET_PACKAGE_NAMEpor un nombre para el lanzamiento del paquete de la flota.Verifica que se haya creado el paquete de la flota:
gcloud container fleet packages listEl resultado muestra el estado del activador de compilación. Después de unos segundos, el campo
MESSAGEse actualiza con un resultado similar al siguiente:MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:Puedes hacer clic en el vínculo proporcionado para ver los registros de transmisión del trabajo de Cloud Build. Cloud Build puede tardar unos minutos en procesar el activador de compilación.
Si el activador de compilación se ejecuta correctamente, el paquete de flota comienza a implementar los recursos de Kubernetes en tu flota.
Cuando el activador de compilación se completa correctamente, el resultado de
gcloud container fleet packages listes similar al siguiente:NAME STATE CREATE_TIME ACTIVE_ROLLOUT LAST_COMPLETED_ROLLOUT MESSAGES my-fleet-package ACTIVE 2024-07-09T15:15:56 rollout-20240709-153621El paquete de flota comienza a implementar los recursos de Kubernetes en tu flota.
Ahora que implementaste un paquete de flota, cuando agregues un clúster nuevo a tu flota, los recursos de Kubernetes definidos en el paquete de flota se implementarán automáticamente en el clúster nuevo.
Actualiza un paquete de flota
Puedes actualizar un paquete de flota para cambiar la configuración o los recursos que implementa, como en los siguientes ejemplos:
- Cambia la estrategia de lanzamiento modificando el valor del campo
maxConcurrent. - Pausa temporalmente un paquete de flota estableciendo
state: SUSPENDED. Cuando se suspende un paquete de la flota, continúan las versiones en curso. No se crearán ni programarán nuevos lanzamientos hasta que vuelvas a cambiar el estado aACTIVE. - Actualiza los recursos de Kubernetes que implementa el paquete de flota actualizando el campo
tagpara extraer datos de una etiqueta de Git diferente.
Para actualizar un paquete de flota, completa los siguientes pasos:
Actualiza la especificación de
FleetPackagecon tus cambios.Actualiza el paquete de flota:
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlEl cambio puede tardar unos minutos en implementarse y comenzar a lanzarse en tus clústeres.
Administra los lanzamientos de paquetes de la flota
Puedes supervisar el progreso de las implementaciones de paquetes de la flota y administrar los lanzamientos activos. Cuando se cambia un paquete de la flota, se crea automáticamente un nuevo lanzamiento. Los siguientes comandos te ayudan a obtener información detallada sobre los lanzamientos. Por ejemplo, si necesitas depurar un problema de implementación, puedes examinar los detalles del lanzamiento y pausar o cancelar un lanzamiento si es necesario.
Si enumeras un lanzamiento, podrás ver el estado de todos los lanzamientos vinculados a un paquete, incluidos los errores que podrían provocar que un lanzamiento falle. Para enumerar los lanzamientos y ver su estado, ejecuta el siguiente comando:
gcloud container fleet packages rollouts list --fleet-package FLEET_PACKAGE_NAMEEl resultado se ve de la manera siguiente:
ROLLOUT RELEASE START_TIME END_TIME STATE MESSAGE rollout-20250515-132857 v2-0-0 2025-05-15T13:28:58Z STALLED rollout-20250418-165528 v1-0-0 2025-04-18T16:55:29Z 2025-04-18T16:57:47Z COMPLETEDLa descripción de un lanzamiento proporciona información detallada sobre un lanzamiento específico, incluido el estado de cada clúster objetivo y los errores específicos de cada clúster. Para describir un lanzamiento, ejecuta el siguiente comando:
gcloud container fleet packages rollouts describe ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMEReemplaza ROLLOUT_NAME por el nombre de tu lanzamiento. Puedes obtener el nombre completo del lanzamiento del comando
listdel paso anterior.El resultado se ve de la manera siguiente:
CLUSTER CURRENT_VERSION SYNC_STATE DESIRED_VERSION START_TIME END_TIME STATE MESSAGES cluster1 v2.0.0 SYNCED v2.0.0 2025-05-15T13:28:58Z 2025-05-15T13:30:27Z COMPLETED cluster2 v1.0.0 SYNCED v2.0.0 2025-05-15T13:30:27Z ERROR Membership no longer existsPuedes administrar los lanzamientos activos con los siguientes comandos:
Suspender un lanzamiento pone un lanzamiento en curso en estado
SUSPENDED. Se continuarán las actualizaciones de paquetes en curso y no se programarán más actualizaciones de paquetes. Para suspender un lanzamiento, ejecuta el siguiente comando:gcloud container fleet packages rollouts suspend ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMECuando se reanuda un lanzamiento, este cambia de
SUSPENDEDaIN_PROGRESS. Las actualizaciones de paquetes se implementan en los clústeres de destino según lo previsto. Para reanudar un lanzamiento, ejecuta el siguiente comando:gcloud container fleet packages rollouts resume ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMESi cancelas un lanzamiento en curso, este se detendrá de inmediato y pasará al estado
ABORTED. Se cancelarán todas las actualizaciones de paquetes pendientes que se hayan planificado como parte del lanzamiento. Para cancelar un lanzamiento, ejecuta el siguiente comando:gcloud container fleet packages rollouts abort ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAME
Usa etiquetas para implementar en diferentes clústeres
Las etiquetas son pares clave-valor que adjuntas a los objetos. Los paquetes de flota solo admiten etiquetas de membresía de flota. No se admiten las etiquetas de clúster de GKE.
Puedes usar etiquetas para implementar un paquete de flota en un subconjunto de clústeres de tu flota.
Cómo agregar etiquetas de membresía
Para agregar una etiqueta de membresía, completa los siguientes pasos:
Obtén una lista de las membresías de la flota:
gcloud container fleet memberships listAgrega una etiqueta a la membresía:
gcloud container fleet memberships update MEMBERSHIP_NAME \ --update-labels=KEY=VALUEReemplaza lo siguiente:
MEMBERSHIP_NAME: Es el nombre del clúster registrado en la flota.KEYyVALUE: Son las etiquetas que se agregarán a la membresía. Si existe una etiqueta, su valor se modifica. De lo contrario, se crea una etiqueta nueva. Las claves deben comenzar con un carácter en minúscula y contener solo guiones (-), guiones bajos (_), caracteres en minúscula y números. Los valores deben contener solo guiones (-), guiones bajos (_), caracteres en minúscula y números.
Repite este comando para cada membresía a la que quieras agregar una etiqueta.
Implementa en un subconjunto de clústeres
Puedes realizar la implementación en un subconjunto de clústeres si especificas el campo target.fleet.selector.matchLabels con tu par clave-valor. Por ejemplo, si configuras matchLabels como country: "us", el servicio de paquetes de la flota implementa tus recursos solo en los clústeres con la etiqueta country que coincide con "us".
Para implementar un paquete de flota en un subconjunto de clústeres, completa los siguientes pasos:
Crea o actualiza tu especificación
FleetPackagecon el selector de etiquetas:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/CONNECTION_NAME/repositories/REPOSITORY_NAME tag: TAG serviceAccount: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com path: CONFIG_FILE_PATH target: fleet: project: projects/PROJECT_ID selector: matchLabels: KEY: "VALUE" rolloutStrategy: rolling: maxConcurrent: MAX_CLUSTERSCrea o actualiza el paquete de flota:
Crea un paquete de flota
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlActualiza un paquete de flota
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yaml
Implementa recursos de variantes en clústeres
Las variantes son versiones diferentes de un recurso. Estos recursos pueden tener valores diferentes según la ubicación, el proyecto o el nombre del clúster. Puedes implementar recursos de variantes en diferentes clústeres especificando los campos variantsPattern y variantNameTemplate.
Puedes usar etiquetas de membresía o cualquier otro metadato de membresía, como la ubicación, el proyecto o el nombre, para hacer coincidir las variantes.
Para implementar un paquete de flota con variantes, completa los siguientes pasos:
Crea o actualiza tu especificación
FleetPackagecon los detalles de la variante:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/CONNECTION_NAME/repositories/REPOSITORY_NAME tag: TAG serviceAccount: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com path: CONFIG_FILE_PATH variantsPattern: VARIANT_PATTERN target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: MAX_CLUSTERS target: fleet: project: projects/PROJECT_ID variantSelector: variantNameTemplate: VARIANT_NAME_TEMPLATEReemplaza lo siguiente:
VARIANT_PATTERN: Es el patrón de la variante, por ejemplo,"variants/*.yaml"o"us-*".VARIANT_NAME_TEMPLATE: Es una cadena de plantilla que hace referencia a variables que contienen metadatos de membresía del clúster, como la ubicación, el proyecto, el nombre o la etiqueta, para determinar el nombre de la variante para un clúster de destino. Para obtener más ejemplos, consulta la documentación de referencia deFleetPackage.
Crea o actualiza el paquete de flota:
Crea un paquete de flota
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlActualiza un paquete de flota
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yaml
Borra un paquete de flota
Si borras un paquete de flota, también se borrarán los siguientes recursos:
- Los recursos de Kubernetes implementados en tus clústeres
- Historial de lanzamiento del paquete de flota
Para borrar un paquete de la flota, ejecuta el siguiente comando:
gcloud container fleet packages delete FLEET_PACKAGE_NAME --force
Solucionar problemas
Si deseas encontrar métodos para diagnosticar y resolver errores relacionados con Cloud Build, consulta Soluciona problemas de errores de compilación.
¿Qué sigue?
- Consulta la página de referencia de los campos de
FleetPackage.