Sobre os pacotes de frota

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 ou RepoSync.

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ão us-central1. É possível implantar em clusters em regiões diferentes, mas é necessário configurar o Cloud Build e a CLI gcloud em us-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.

Diagrama que mostra o fluxo de recursos do Kubernetes na sincronização do Git para uma frota de 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']}

A seguir

Implantar pacotes de frota