Como usar o Config Sync em vários ambientes com renderização automatizada


Neste tutorial, mostramos como configurar o Config Sync para a edição do Google Kubernetes Engine (GKE) Enterprise em dois ambientes, um para desenvolvimento e outro para produção, usando as práticas recomendadas do Config Sync.

Neste cenário, você faz parte de uma equipe de administração de plataforma na Foo Corp. Os aplicativos dessa empresa são implantados no GKE Enterprise, com recursos divididos em dois projetos, dev e prod. O projeto dev contém um cluster de desenvolvimento do GKE Enterprise, e o projeto prod contém o cluster de produção do GKE Enterprise. O objetivo do administrador da plataforma é garantir que os dois ambientes obedeçam às políticas da Foo Corp e que os recursos de nível básico, como namespaces e contas de serviço do Kubernetes, permaneçam consistentes nos dois ambientes.

O diagrama a seguir mostra uma visão geral dos ambientes que você configurará neste tutorial:

Visão geral dos ambientes configurados neste tutorial.

Neste tutorial, o recurso de renderização automática é usado no Config Sync para renderizar os recursos no cluster. Cada um dos clusters é configurado para sincronizar a partir de um diretório que contém um arquivo de configuração do Kustomization, que aciona o processo de renderização automaticamente no Config Sync. Para mais detalhes, consulte Usar um repositório com configurações do Kustomize e gráficos Helm.

Conforme mostrado no diagrama anterior, neste tutorial, você cria os seguintes recursos:

  • Dois projetos do Google Cloud que representam os ambientes de desenvolvimento e produção.
  • Dois clusters do GKE Enterprise, dev e prod, nos projetos separados, com o Config Sync instalado.

Arquitetura do repositório

Neste tutorial, mostramos como configurar o Config Sync para sincronizar com as configurações no diretório config-source/ do repositório de amostras. Esse diretório contém os seguintes diretórios e arquivos:

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

O diretório config-source inclui os manifestos base/ e as sobreposições dev/ e prod/ do Kustomize. Cada diretório contém um arquivo kustomization.yaml, que lista os arquivos que o Kustomize precisa gerenciar e aplicar ao cluster. Em dev/kustomization.yaml e prod/kustomization.yaml, uma série de patches é definida. Esses patches manipulam os recursos de base/ para esse ambiente específico.

Por exemplo, o RoleBinding dev permite que todos os desenvolvedores do Foo Corp implantem pods no cluster de desenvolvimento, enquanto o RoleBinding de produção permite que apenas um agente de implantação contínua, deploy-bot@foo-corp.com, implante pods em produção:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

Objetivos

  • Configurar o Config Sync para renderizar e sincronizar automaticamente a configuração dos dois ambientes separados.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

Antes de começar este tutorial, verifique se você concluiu as etapas a seguir:

  1. No Console do Google Cloud, na página do seletor de projetos, escolha ou crie dois projetos do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Faça upgrade da Google Cloud CLI para a versão mais recente.

  4. Instale ou faça upgrade do comando nomos

Criar e registrar clusters

Para permitir que você se concentre no fluxo de trabalho que precisa usar ao configurar o Config Sync para vários ambientes, o diretório multi-environments-kustomize (em inglês) contém scripts que podem ser usados para automatizar a configuração do Config Sync.

  1. Clone o repositório de amostra:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Navegue até a pasta que contém os recursos necessários para este tutorial:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Para executar os scripts usados neste tutorial, configure as seguintes variáveis:

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    Substitua:

    • DEV_PROJECT_ID: o ID do projeto do Google Cloud que você quer usar como projeto de desenvolvimento
    • PROD_PROJECT_ID: o ID do projeto do Google Cloud que você quer usar como projeto de produção
    • DEV_CLUSTER_ZONE: a zona do Compute Engine em que você quer criar o cluster de desenvolvimento Por exemplo, us-central1-c.
    • PROD_CLUSTER_ZONE: a zona do Compute Engine em que você quer criar o cluster de produção
  4. Para criar dois clusters, execute o script ./create-clusters.sh:

    ./create-clusters.sh
    

    Esse script cria um cluster do GKE Enterprise chamado dev no projeto dev e um cluster do GKE Enterprise chamado prod no projeto de produção. Este script também ativa a API GKE Enterprise e se conecta aos clusters dev e prod para que você possa acessar as APIs deles com kubectl.

    Exemplo de saída:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. Para registrar os clusters em duas frotas separadas, execute o script register-clusters.sh:

    ./register-clusters.sh
    

    Esse script cria uma conta de serviço e uma chave do Google Cloud para o registro de clusters do GKE Enterprise e usa o comando gcloud container fleet memberships register para registrar os clusters dev e prod no GKE Enterprise nos próprios projetos.

    Exemplo de saída:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Como configurar o Config Sync

Agora que você criou e registrou seus clusters, instale o Config Sync e verifique a instalação.

Instalar o Config Sync

Para instalar o Config Sync, no cluster de desenvolvimento e de produção, execute o script install-config-sync.sh:

./install-config-sync.sh

Saída esperada:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

O Config Sync agora está sincronizando com os configs nos seus repositórios.

Verificar a configuração

Nesta seção, você verifica se os clusters estão sincronizando com as configurações no repositório:

  1. Para verificar o estado da instalação do Config Sync, execute o comando nomos status:

    nomos status
    

    Você verá que os clusters de desenvolvimento e produção agora estão sincronizados com os respectivos repositórios:

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. Use kubectl para alternar para o cluster de desenvolvimento:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Para verificar se os recursos estão sincronizados, consiga os namespaces. O namespace foo será exibido.

    kubectl get namespace
    

    Exemplo de saída:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    Agora você configurou a renderização automática de configurações em um ambiente de desenvolvimento e produção em vários projetos e ambientes do Google Cloud.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir todos os recursos

Para excluir os recursos que você criou neste tutorial, mas manter os projetos de desenvolvimento e produção intactos, execute o script de limpeza:

./cleanup.sh

Excluir os projetos

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir