Esta página explica os pacotes de frota, a API FleetPackage
e como eles se relacionam
ao Config Sync.
Uma 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 em um lançamento progressivo ou total 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 de frota detecta
essas mudanças e as implanta nos clusters.
Vantagens
Use pacotes de frota para implantar recursos do Kubernetes em clusters que estão 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 do Git no novo cluster. Os pacotes de frota são baseados nos benefícios do Config Sync, como a correção automática de desvio, e oferecem as seguintes vantagens exclusivos:
Implantação automatizada de recursos:depois que você configura um pacote de frota, os recursos do Kubernetes a que ele aponta são implantados automaticamente pelo serviço de pacote de 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 escala:em vez de gerenciar clusters um por um, use pacotes de frota para implantar recursos em uma frota inteira de clusters.
Minimize o impacto de mudanças incorretas:escolha um número máximo de clusters para implantar recursos de uma só vez. É possível 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 de frota usam o Cloud Build para autenticação no Git, o que significa que você autentica uma vez por projeto em vez de uma vez por objeto
RootSync
ouRepoSync
.
Talvez seja melhor 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 de pacote de frota oferece com rótulos e variantes.
Requisitos e limitações
Somente os repositórios do Git são compatíveis como 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 sobreposições adicionais para transformar o recurso armazenado no Git. Para mais informações sobre as diferenças entre esses recursos, consulte Prática recomendada: criar repositórios WET.
A API
FleetPackage
está disponível apenas na regiãous-central1
. Ainda é 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 do Git. O serviço de pacote de frota implanta esses recursos nos clusters.
Exemplos de casos de uso
É possível usar pacotes de frota para implantar recursos de um repositório do Git em toda a frota de clusters. Também é possível configurar o pacote da frota para controlar como, onde e que tipo de recursos são implantados.
A seção a seguir mostra exemplos de diferentes configurações de FleetPackage
.
Para mais informações detalhadas 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 contínua para implantar
recursos do Kubernetes em três clusters por vez e segmenta
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 variantes em um cluster
Para este exemplo, no repositório do 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 de
nginx-size=small
ou nginx-size=large
.
O FleetPackage
neste exemplo seria semelhante ao seguinte:
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']}