Nesta página, explicamos os pacotes da frota, a API FleetPackage
e como eles se relacionam
com o Config Sync.
Um FleetPackage
é uma API declarativa que permite gerenciar pacotes em uma frota. Um pacote de frota é um conjunto de manifestos YAML do Kubernetes que definem
a configuração do cluster. Ao usar pacotes de frota, você
pode implantar pacotes por um lançamento progressivo ou de uma só vez em clusters
registrados na sua frota.
Você define cada objeto FleetPackage
uma vez e depois pode atualizar esse pacote
com uma nova revisão. Quando você aplica uma nova revisão, o serviço de pacote da frota coleta
essas mudanças e as implanta nos clusters.
Vantagens
Use pacotes de frota para implantar recursos do Kubernetes em clusters registrados em uma frota. Depois de criar e aplicar um pacote de frota, ele implanta automaticamente os arquivos de configuração do Kubernetes no repositório Git para o novo cluster. Os pacotes da frota aproveitam os benefícios do Config Sync, como a correção automática de desvios, e oferecem as seguintes vantagens exclusivas:
Automatizar o lançamento de recursos:depois de configurar um pacote da frota, os recursos do Kubernetes a que ele se refere são implantados automaticamente pelo serviço de pacote da frota em todos os clusters.
Configurar novos clusters automaticamente: se você configurar um pacote de frota e depois adicionar novos clusters a uma frota, todos os recursos definidos pelo pacote de frota serão implantados automaticamente no novo cluster.
Gerenciar a configuração do Kubernetes em grande escala:em vez de gerenciar clusters um por um, use pacotes da frota para implantar recursos em toda a frota de clusters.
Minimizar o impacto de mudanças incorretas:escolha um número máximo de clusters para implantar recursos de uma só vez. Você pode monitorar de perto as mudanças em cada cluster para garantir que alterações incorretas não afetem toda a frota.
Simplifique a configuração do Config Sync:os pacotes da frota usam o Cloud Build para autenticar no Git. Isso significa que você se autentica uma vez por projeto em vez de uma vez por objeto
RootSync
ouRepoSync
.
Talvez você prefira usar o Config Sync com objetos RootSync
ou RepoSync
em vez de pacotes de frota se um ou mais dos seguintes cenários se aplicarem a você:
Você gerencia um pequeno número de clusters.
Você precisa de mais controle sobre como os recursos são implantados nos clusters, além do que a API do pacote de frota oferece com rótulos e variantes.
Requisitos e limitações
Somente repositórios Git são compatíveis como a fonte de verdade ao configurar um pacote de frota.
Os recursos do Kubernetes armazenados no Git precisam representar o estado final do recurso. Não há suporte para outras sobreposições que transformam o recurso armazenado no Git. Para mais informações sobre as diferenças nesses recursos, consulte Prática recomendada: criar repositórios WET.
A API
FleetPackage
está disponível apenas na regiãous-central1
. É possível implantar em clusters em regiões diferentes, mas é necessário configurar o Cloud Build e a CLI gcloud emus-central1
.
Arquitetura
É possível usar a API FleetPackage
para implantar manifestos do Kubernetes em uma frota de clusters. A API FleetPackage
usa o Cloud Build para sincronizar e buscar
recursos do Kubernetes no seu repositório Git. Em seguida, o serviço de pacote de frota
implanta esses recursos nos seus clusters.
Exemplos de casos de uso
Use pacotes de frota para implantar recursos de um repositório Git em toda a frota de clusters. Também é possível configurar o pacote da frota para controlar como, onde e qual tipo de recurso é implantado.
A seção a seguir mostra exemplos de diferentes configurações de FleetPackage
.
Para mais informações sobre como aplicar pacotes de frota, consulte
Implantar pacotes de frota.
Implantação em todos os clusters de uma frota
O FleetPackage
a seguir usa uma estratégia de rolling para implantar
recursos do Kubernetes em três clusters por vez e tem como destino
todos os clusters em uma frota:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
rolloutStrategy:
rolling:
maxConcurrent: 3
Implantação em um subconjunto de clusters
O FleetPackage
a seguir usa um seletor de rótulos para implantar recursos do Kubernetes
apenas em clusters com o rótulo de associação country
que corresponde a "us"
na frota:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
selector:
matchLabels:
country: "us"
rolloutStrategy:
rolling:
maxConcurrent: 3
Implantação de recursos de variante em um cluster
Neste exemplo, no repositório Git, você tem uma pasta chamada "deployments" que contém duas especificações de implantação diferentes:
Réplicas: 3
# small.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Réplicas: 10
# large.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
É possível usar variantes para implantar as implantações "pequena" ou "grande"
em clusters diferentes. Cada cluster tem um rótulo nginx-size=small
ou nginx-size=large
.
O FleetPackage
neste exemplo seria semelhante a isto:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
path: deployments
variantsPattern: "*.yaml"
rolloutStrategy:
rolling:
maxConcurrent: 2
target:
fleet:
project: projects/my-project
variantSelector:
variantNameTemplate: ${membership.labels['nginx-size']}