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:
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
eprod
, 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.
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:
Na Google Cloud consola, na página do seletor de projetos, escolha ou crie dois Google Cloud projetos.
-
Verify that billing is enabled for your Google Cloud project.
Atualize a CLI Google Cloud para a versão mais recente.
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.
Clone o repositório de exemplo:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Navegue para 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, 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 desenvolvimentoPROD_PROJECT_ID
: o ID do projeto do Google Cloud projeto que quer usar como projeto de produçãoDEV_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
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 denominadoprod
no projeto de produção. Este script também ativa a API GKE e liga-se aos seus clustersdev
eprod
para que possa aceder às respetivas 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 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 clustersdev
eprod
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:
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 ```
Use
kubectl
para mudar para o cluster de programadores:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
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
- 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.
O que se segue?
- Saiba mais sobre as implementações seguras com o Config Sync