Neste tutorial, mostramos como configurar o Config Sync para 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 da Foo Corp 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:
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
eprod
, nos projetos separados, com o Config Sync instalado.
Arquitetura do repositório
Neste tutorial, você configurará o Config Sync para sincronizar com as configurações no
diretório
do repositório config-source/
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.
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:
No Console do Google Cloud, na página do seletor de projetos, escolha ou crie dois projetos do Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
Faça upgrade da Google Cloud CLI para a versão mais recente.
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.
Clone o repositório de amostra:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Navegue até a pasta que contém os recursos necessários para este tutorial:
cd anthos-config-management-samples/multi-environments-kustomize/
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 desenvolvimentoPROD_PROJECT_ID
: o ID do projeto do Google Cloud que você quer usar como projeto de produçãoDEV_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
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 de desenvolvimento e outro chamadoprod
no projeto produção. Esse script também ativa a API GKE Enterprise e se conecta aos clustersdev
eprod
para que você possa acessar as APIs comkubectl
.Exemplo de saída:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
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 clustersdev
eprod
no GKE Enterprise em 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:
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 ```
Use
kubectl
para alternar para o cluster de desenvolvimento:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
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.
Limpeza
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Saiba mais sobre Lançamentos seguros com o Config Sync
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.