Nesta página, explicamos como usar pacotes de frota do Config Sync para implantar recursos do Kubernetes em clusters registrados em uma frota. Depois de criar e implantar um pacote de frota, quando você adiciona um novo cluster à frota, o pacote de frota implanta automaticamente os arquivos de configuração do Kubernetes no repositório Git no novo cluster.
Um FleetPackage é uma API declarativa para implantar manifestos brutos do Kubernetes em uma frota de clusters. Todos os recursos do Kubernetes que você quer implantar com um pacote de frota já precisam estar
hidratados (WET).
Antes de começar
Crie ou verifique se você tem acesso a um repositório Git com os recursos do Kubernetes que você quer implantar em uma frota.
Instale e inicialize a Google Cloud CLI, que fornece os comandos
gcloudenomos. Se você usa Cloud Shell, a Google Cloud CLI já vem pré-instalada. Se você já instalou a Google Cloud CLI, instale a versão mais recente executandogcloud components update.Ative a API Config Sync (
anthosconfigmanagement) e a APIConfigDelivery:gcloud services enable anthosconfigmanagement.googleapis.com configdelivery.googleapis.comDefina um local padrão:
gcloud config set config_delivery/location us-central1Defina um projeto padrão:
gcloud config set project PROJECT_IDSubstitua
PROJECT_IDpelo ID do projeto host da frota.Verifique se os clusters estão registrados em uma frota.
Use repositórios do Cloud Build para criar uma conexão com um provedor compatível como GitHub ou GitLab. Ao usar um pacote de frota, você precisa configurar o Cloud Build apenas uma vez por repositório que quer sincronizar.
Analisar os requisitos do cluster
Antes de instalar o Config Sync no cluster, analise as recomendações e os requisitos de configuração do cluster.
Preparar o ambiente
Para preparar o ambiente para pacotes de frota do Config Sync, conceda os papéis do IAM necessários ao usuário que registra o cluster.
Instalar o Config Sync
É possível instalar o Config Sync com o Google Cloud console ou a Google Cloud CLI.
Console
Para instalar o Config Sync, todos os clusters precisam estar registrados em uma frota. Ao instalar o Config Sync no Google Cloud console, a seleção de clusters individuais os registra automaticamente na frota.
- Noconsole, acesse a página Configuração na seção Recursos. Google Cloud
Clique em add Instalar o Config Sync.
Em Opções de instalação, selecione Instalar o Config Sync em toda a frota (recomendado).
Clique em Instalar o Config Sync. Na guia Configurações, após alguns minutos, a mensagem Ativado vai aparecer na coluna Status dos clusters na sua frota.
gcloud
Ative o recurso de frota
ConfigManagement:gcloud beta container fleet config-management enablePara ativar o Config Sync, crie um arquivo chamado
apply-spec.yamlcom o seguinte conteúdo:applySpecVersion: 1 spec: configSync: enabled: trueAplique o arquivo
apply-spec.yaml:gcloud beta container fleet config-management apply \ --membership=MEMBERSHIP_NAME \ --config=apply-spec.yamlSubstitua
MEMBERSHIP_NAMEpelo nome da associação de frota escolhido ao registrar o cluster. Para encontrar o nome da associação, execute o comandogcloud container fleet memberships list.
Criar uma conta de serviço para o Cloud Build
Os pacotes de frota usam o Cloud Build para buscar os recursos do Kubernetes no seu repositório Git e implantá-los nos clusters. O Cloud Build exige uma conta de serviço que tenha as permissões para executar esse job. Para criar a conta de serviço e conceder as permissões necessárias, siga estas etapas:
Crie a conta de serviço:
gcloud iam service-accounts create "SERVICE_ACCOUNT_NAME"Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. O nome precisa ser um ID alfanumérico entre 6 e 30 caracteres, por exemplo,my-service-account. Depois de criar uma conta de serviço, não é possível alterar o nome dela.Adicione uma vinculação de política do IAM para o papel de editor de pacote de recursos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/configdelivery.resourceBundlePublisher'Se solicitado, selecione
Nonecomo a condição da política.Adicione uma vinculação de política do IAM para o papel de gravador de registros:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/logging.logWriter'Se solicitado, selecione
Nonecomo a condição da política.Adicione uma vinculação de política do IAM para o papel de gravador do Artifact Registry:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/artifactregistry.writer'Se solicitado, selecione
Nonecomo a condição da política.
Criar um pacote de frota
Para criar um pacote de frota, defina uma especificação FleetPackage que aponte para o repositório com os recursos do Kubernetes conectados ao Cloud Build. Em seguida, aplique o FleetPackage, que busca os recursos do Git e os implanta na frota.
Crie um arquivo chamado
fleetpackage-spec.yamlcom o conteúdo a seguir: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 # Match all files and directories to generate variants variantsPattern: "*" target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: MAX_CLUSTERS variantSelector: variantNameTemplate: "VARIANT_NAME" # set the state to SUSPENDED to pause new rollouts # set the state back to ACTIVE to resume rollouts # state: SUSPENDEDSubstitua:
CONNECTION_NAME: o nome escolhido ao conectar o host do Git ao Cloud Build. É possível conferir todas as conexões do Cloud Build no seu projeto executandogcloud builds connections listou abrindo a página Repositórios noconsole: Google CloudREPOSITORY_NAME: o nome do seu repositório Ele precisa ser idêntico ao valor inserido ao configurar a conexão do Cloud Build.TAG: a tag Git do seu repositório. O formato precisa ser a versão semântica completa com o número principal, secundário e de patch. Por exemplo,v1.0.0é uma tag válida, enquantov1ouv1.0são inválidas.CONFIG_FILE_PATH: o caminho para os recursos do Kubernetes no repositório. Se os arquivos estiverem na raiz do repositório, você poderá omitir esse campo.MAX_CLUSTERS: o número máximo de clusters para implantar recursos do Kubernetes de uma só vez. Por exemplo, se você definir esse valor como1, os pacotes de recursos serão implantados em um cluster por vez.VARIANT_NAME: a variante a ser implantada nos clusters. O nome precisa corresponder a uma variante no repositório (o nome do arquivo sem extensão ou o nome do diretório). Por exemplo, se você tiver um arquivo chamadoprod.yaml, defina esse campo comoprod. Para usar o comportamento padrão (por exemplo, para implantar a mesma configuração em todos os clusters de uma frota), defina esse campo comodefaulte verifique se o repositório contém um arquivo chamadodefault.yaml.Para uma lista completa de todos os campos que podem ser configurados, consulte a
FleetPackagedocumentação de referência.
Crie o pacote de frota:
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlSubstitua
FLEET_PACKAGE_NAMEpor um nome para o lançamento do pacote de frota.Verifique se o pacote de frota foi criado:
gcloud container fleet packages listA saída lista o status do gatilho de build. Após alguns segundos, o campo
MESSAGEé atualizado com uma saída semelhante a esta:MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:Clique no link fornecido para visualizar os logs de streaming do job do Cloud Build. O Cloud Build pode levar alguns minutos para processar o gatilho de compilação.
Se o gatilho de build for bem-sucedido, o pacote de frota começará a lançar os recursos do Kubernetes na sua frota.
Quando o gatilho de compilação é concluído, a saída do
gcloud container fleet packages listé semelhante ao seguinte:NAME STATE CREATE_TIME ACTIVE_ROLLOUT LAST_COMPLETED_ROLLOUT MESSAGES my-fleet-package ACTIVE 2024-07-09T15:15:56 rollout-20240709-153621O pacote de frota começa a lançar os recursos do Kubernetes na sua frota.
Agora que você implantou um pacote de frota, quando você adiciona um novo cluster à frota, os recursos do Kubernetes definidos no pacote de frota são implantados automaticamente no novo cluster.
Atualizar um pacote de frota
É possível atualizar um pacote de frota para mudar as configurações ou os recursos que o pacote de frota implanta, como nos exemplos a seguir:
- Mude a estratégia de lançamento alterando o valor do campo
maxConcurrent. - Pause temporariamente um pacote de frota definindo
state: SUSPENDED. Quando um pacote de frota é suspenso, todos os lançamentos em andamento continuam. Nenhum novo lançamento é criado ou programado até que você mude o estado de volta paraACTIVE. - Atualize os recursos do Kubernetes que o pacote de frota implanta atualizando o campo
tagpara extrair de uma tag Git diferente.
Para atualizar um pacote de frota, siga estas etapas:
Atualize a especificação
FleetPackagecom as mudanças.Atualize o pacote de frota:
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlPode levar alguns minutos até que a mudança seja detectada e comece a ser lançada nos clusters.
Inspecionar pacotes de recursos e versões
Ao criar ou atualizar um pacote de frota com base no repositório Git, a API FleetPackages cria automaticamente recursos de pacote de recursos e versão. A inspeção desses recursos é útil para a solução de problemas, especialmente se você precisar verificar as variantes geradas no repositório.
Para inspecionar pacotes de recursos e versões, use um ou mais dos seguintes comandos:
Confira informações detalhadas sobre um pacote de recursos específico:
gcloud container fleet packages resource-bundles describe flpkg-rb-FLEET_PACKAGE_NAMEListe todas as versões associadas a um pacote de recursos:
gcloud container fleet packages resource-bundles releases list \ --resource-bundle flpkg-rb-FLEET_PACKAGE_NAMEConfira informações detalhadas sobre uma versão específica, incluindo o pacote de recursos que ela usa. Esse comando é particularmente útil para depurar problemas relacionados a variantes, porque permite inspecionar exatamente quais variantes foram incluídas em uma versão específica:
gcloud container fleet packages resource-bundles releases describe RELEASE_NAME\ --resource-bundle flpkg-rb-FLEET_PACKAGE_NAME
Substitua:
FLEET_PACKAGE_NAME: o nome do pacote de frota. O nome do pacote de recursos é prefixado automaticamente comflpkg-rb-.RELEASE_NAME: o nome da versão na resposta ao comandolist.
Gerenciar lançamentos de pacotes de frota
É possível monitorar o progresso das implantações de pacotes de frota e gerenciar lançamentos ativos. Quando um pacote de frota é alterado, um novo lançamento é criado automaticamente. Os comandos a seguir ajudam a receber informações detalhadas sobre os lançamentos. Por exemplo, se você precisar depurar um problema de implantação, examine os detalhes do lançamento e pause ou cancele um lançamento, se necessário.
A listagem de um lançamento permite conferir o status de todos os lançamentos vinculados a um pacote, incluindo erros que podem causar falha em um lançamento. Para listar os lançamentos e conferir o status deles, execute o seguinte comando:
gcloud container fleet packages rollouts list --fleet-package FLEET_PACKAGE_NAMEA saída será assim:
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 COMPLETEDA descrição de um lançamento fornece informações detalhadas sobre um lançamento específico, incluindo o status de cada cluster segmentado e erros específicos do cluster. Para descrever um lançamento, execute o seguinte comando:
gcloud container fleet packages rollouts describe ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMESubstitua ROLLOUT_NAME pelo nome do lançamento. É possível receber o nome completo do lançamento no comando
listna etapa anterior.A saída será assim:
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 existsÉ possível gerenciar lançamentos ativos executando os seguintes comandos:
A suspensão de um lançamento coloca um lançamento em andamento em um estado
SUSPENDED. Todas as atualizações de pacote em andamento continuam, e nenhuma outra atualização de pacote é programada. Para suspender um lançamento, execute o seguinte comando:gcloud container fleet packages rollouts suspend ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMEA retomada de um lançamento muda um lançamento
SUSPENDEDde volta para um estadoIN_PROGRESS. As atualizações de pacote são implantadas nos clusters de destino conforme planejado. Para retomar um lançamento, execute o seguinte comando:gcloud container fleet packages rollouts resume ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAMEO cancelamento de um lançamento em andamento encerra imediatamente o lançamento, colocando-o em um estado
ABORTED. Todas as atualizações de pacote pendentes planejadas como parte do lançamento são canceladas. Para cancelar um lançamento, execute o seguinte comando:gcloud container fleet packages rollouts abort ROLLOUT_NAME --fleet-package FLEET_PACKAGE_NAME
Estratégias de implantação
É possível implantar recursos de maneiras diferentes, seja implantando em um subconjunto de clusters especificando rótulos ou usando a correspondência de padrões de variantes para implantar recursos diferentes. É possível combinar as duas estratégias para ter maior controle sobre quais recursos são implantados em clusters diferentes.
Implantar em um subconjunto de clusters
É possível implantar o mesmo recurso em um subconjunto de clusters usando rótulos e especificando o campo target.fleet.selector.matchLabels com os rótulos (par de chave-valor). Por exemplo, se você definir matchLabels como country: "us", o
serviço de pacote de frota vai implantar seus recursos apenas em clusters com o rótulo
country que corresponda a "us".
Os pacotes de frota são compatíveis apenas com rótulos de associação de frota. Os rótulos de cluster do GKE não são compatíveis.
(Opcional) Se você ainda não tiver rótulos que quer usar, adicione-os seguindo estas etapas:
Receba uma lista de associações na frota:
gcloud container fleet memberships listAdicione um rótulo à associação:
gcloud container fleet memberships update MEMBERSHIP_NAME \ --update-labels=KEY=VALUESubstitua:
MEMBERSHIP_NAME: o nome do cluster registrado na frota.KEYeVALUE: o rótulo a ser adicionado à associação. Se um rótulo existir, o valor dele será modificado. Caso contrário, um novo rótulo será criado. As chaves precisam começar com um caractere minúsculo e conter apenas hifens (-), sublinhados (_), caracteres minúsculos e números. Os valores precisam conter apenas hifens (-), sublinhados (_), caracteres minúsculos e números.
Repita esse comando para cada associação a que você quer adicionar um rótulo.
Crie ou atualize a especificação
FleetPackagecom o seletor de rótulo: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_CLUSTERSCrie ou atualize o pacote de frota:
Criar um pacote de frota
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlAtualizar um pacote de frota
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yaml
Implantar recursos de variante em clusters
É possível implantar configurações exclusivas em clusters diferentes (por exemplo, dev versus prod) adicionando definições de variante ao pacote de frota.
Para uma visão geral conceitual de como as variantes são geradas na estrutura do repositório, consulte Como as variantes são geradas.
Para implantar um pacote de frota com variantes, siga estas etapas:
Crie ou atualize a especificação
FleetPackagepara incluir os camposvariantsPatternevariantNameTemplate: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_TEMPLATESubstitua:
VARIANT_PATTERN: um padrão glob para gerar variantes do repositório, como*(corresponde a todos os arquivos e diretórios) ou*.yaml(corresponde apenas a arquivos). Para mais informações sobre quais padrões são compatíveis, consultevariantsPatterncorrespondência.VARIANT_NAME_TEMPLATE: uma string ou modelo para selecionar uma variante para cada cluster. É possível usar variáveis de metadados como${membership.labels['env']}ou${membership.location}.
Crie ou atualize o pacote de frota:
Criar um pacote de frota
gcloud container fleet packages create FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yamlAtualizar um pacote de frota
gcloud container fleet packages update FLEET_PACKAGE_NAME \ --source=fleetpackage-spec.yaml
Excluir um pacote de frota
A exclusão de um pacote de frota também exclui os seguintes recursos:
- Os recursos do Kubernetes implantados nos clusters
- O histórico de lançamento do pacote de frota
Para excluir um pacote de frota, execute o seguinte comando:
gcloud container fleet packages delete FLEET_PACKAGE_NAME --force
Resolver problemas
Para encontrar métodos de diagnóstico e resolução de erros relacionados ao Cloud Build, consulte Solução de problemas de erros de build.
A seguir
- Consulte a página de referência dos campos
FleetPackage