Usar a sincronização de configuração em vários ambientes com renderização automática


Este tutorial mostra como configurar o Config Sync para o Google Kubernetes Engine em dois ambientes, um para desenvolvimento e outro para produção, usando as práticas recomendadas para o Config Sync.

Neste cenário, faz parte de uma equipa de administração da plataforma na Foo Corp. As aplicações da Foo Corp são implementadas no GKE, com recursos divididos em dois projetos, dev e prod. O projeto dev contém um cluster GKE de desenvolvimento e o projeto prod contém o cluster GKE de produção. O seu objetivo enquanto administrador da plataforma é garantir que ambos os ambientes permanecem em conformidade com as políticas da Foo Corp e que os recursos de nível base, como os espaços de nomes do Kubernetes e as contas de serviço, permanecem consistentes em ambos os ambientes.

O diagrama seguinte mostra uma vista geral dos ambientes que configurou neste tutorial:

Uma vista geral dos ambientes que configurou neste tutorial.

Este tutorial tira partido da funcionalidade de renderização automática no Config Sync para renderizar os recursos no cluster. Cada um dos clusters está configurado para sincronizar a partir de um diretório que contém um ficheiro de configuração de personalização, o que aciona automaticamente o processo de renderização na sincronização de configuração. Para mais detalhes, consulte Use um repositório com configurações do Kustomize e gráficos do Helm.

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

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

Arquitetura do repositório

Neste tutorial, vai configurar o Config Sync para sincronizar com as configurações no diretório config-source/ do repositório de exemplos. Este diretório contém os seguintes diretórios e ficheiros:

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 ficheiro kustomization.yaml que lista os ficheiros que o Kustomize deve gerir e aplicar ao cluster. Em dev/kustomization.yaml e prod/kustomization.yaml, é definida uma série de patches. Estas correções manipulam os recursos base/ para esse ambiente específico.

Por exemplo, o RoleBinding dev permite que todos os programadores da Foo Corp implementem pods no cluster de desenvolvimento, enquanto o RoleBinding prod só permite que um agente de implementação contínua, deploy-bot@foo-corp.com, implemente pods na 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

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

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

Antes de começar este tutorial, certifique-se de que concluiu os seguintes passos:

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

    Aceder ao seletor de projetos

  2. Verify that billing is enabled for your Google Cloud project.

  3. Atualize a CLI Google Cloud para a versão mais recente.

  4. Instale ou atualize o comando nomos

Crie e registe os seus clusters

Para lhe permitir focar-se no fluxo de trabalho que tem de usar quando configura o Config Sync para vários ambientes, o diretório multi-environments-kustomize contém scripts que pode usar para automatizar a configuração do Config Sync.

  1. Clone o repositório de exemplo:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Navegue para 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, defina 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 o seguinte:

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

    ./create-clusters.sh
    

    Este script cria um cluster do GKE denominado dev no projeto de desenvolvimento e um cluster do GKE denominado prod no projeto de produção. Este script também ativa a API GKE e liga-se aos seus clusters dev e prod para que possa aceder às respetivas APIs 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 registar os seus clusters em duas frotas separadas, execute o script register-clusters.sh:

    ./register-clusters.sh
    

    Este script cria uma Google Cloud conta de serviço e uma chave para o registo do cluster do GKE e, em seguida, usa o comando gcloud container fleet memberships register para registar os clusters dev e prod no GKE nos respetivos projetos.

    Exemplo de saída:

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

Configurar o Config Sync

Agora que criou e registou os seus clusters, pode instalar o Config Sync e validar a instalação.

Instale 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

Resultado esperado:

🔁 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 está agora a sincronizar com as configurações nos seus repositórios.

Valide a configuração

Nesta secção, verifique se os seus clusters estão a ser sincronizados com as configurações no seu repositório:

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

    nomos status
    

    Deve ver que os clusters de desenvolvimento e de produção estão agora sincronizados com os respetivos 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 mudar para o cluster de programadores:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Para verificar se os recursos estão sincronizados, obtenha os espaços de nomes. Deve ver o espaço de nomes foo.

    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
    

    Configurou a renderização automática de configurações para um ambiente de desenvolvimento e produção, em vários Google Cloud projetos e ambientes.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine todos os recursos

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

./cleanup.sh

Elimine os projetos

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

O que se segue?