Neste tutorial, mostramos como usar um repositório raiz
do Config Sync para gerenciar a configuração de um cluster do Kubernetes
compartilhado por duas equipes diferentes, team-1
e team-2
.
Objetivos
- Aprender sobre as práticas recomendadas para usar um repositório hierárquico.
- Sincronizar um cluster com o repositório hierárquico de exemplo.
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 este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Limpeza.
Antes de começar
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Acesse um cluster com o Config Sync já instalado. Se você não tiver esse cluster, siga as instruções nas seções "Antes de começar" e "Preparar o ambiente" do Tutorial de sincronização dos repositórios Git
- Configure o acesso à linha de comando
kubectl
executando o comando a seguir:
gcloud container clusters get-credentials CLUSTER_NAME \ --zone ZONE \ --project PROJECT_ID
Substitua:
CLUSTER_NAME
: o nome do cluster registrado ao qual você quer aplicar essa configuração.ZONE
: a zona em que você criou o clusterPROJECT_ID
: ID do projeto
- Configure o acesso à linha de comando
Explorar a arquitetura do repositório
Neste tutorial, você configurará o Config Sync para sincronizar com as configurações no
diretório config/
do repositório hierarchical-format/
.
O diretório config/
contém os seguintes diretórios e arquivos:
├── cluster
│ ├── clusterrolebinding-namespace-reader.yaml
│ ├── clusterrole-namespace-reader.yaml
│ ├── clusterrole-secret-admin.yaml
│ ├── clusterrole-secret-reader.yaml
│ └── crontab-crd.yaml
├── namespaces
│ ├── limit-range.yaml
│ ├── team-1
│ │ ├── crontab.yaml
│ │ ├── namespace.yaml
│ │ ├── network-policy-default-deny-egress.yaml
│ │ ├── resource-quota-pvc.yaml
│ │ ├── rolebinding-secret-reader.yaml
│ │ └── sa.yaml
│ └── team-2
│ ├── crontab.yaml
│ ├── namespace.yaml
│ ├── network-policy-default-deny-all.yaml
│ ├── resource-quota-pvc.yaml
│ ├── rolebinding-secret-admin.yaml
│ └── sa.yaml
├── README.md
└── system
└── repo.yaml
Um repositório raiz hierárquico do Config Sync precisa
incluir três subdiretórios: cluster/
, namespaces/
e system/
.
O diretório cluster/
contém configurações que se aplicam a clusters inteiros (como
CRDs, ClusterRoles e ClusterRoleBindings), em vez de namespaces.
O diretório namespaces/
contém configs para os objetos de namespace e os objetos com escopo de namespace. Cada subdiretório em namespaces/
inclui as
configurações de um objeto de namespace e todos os objetos com escopo de namespace no
namespace. O nome de um subdiretório precisa ser igual ao nome do
objeto de namespace. Os objetos com escopo de namespace que precisam ser criados em cada
namespace podem ser colocados diretamente em namespaces/
(por exemplo, namespaces/limit-
range.yaml
).
Neste tutorial, cada equipe tem o próprio namespace do Kubernetes, a conta
de serviço do Kubernetes, as cotas de recursos, as políticas de rede e as RoleBindings. O administrador do cluster configura
uma política em namespaces/limit-range.yaml
para restringir as alocações de recursos
(para pods ou contêineres) nos dois namespaces. O administrador do cluster também configura
ClusterRoles e ClusterRoleBinidngs.
O diretório system/
contém configurações para o Config Sync Operator.
O diretório compiled/
(que não é necessário para usar o Config Sync)
contém a saída de nomos hydrate
,
que compila as configurações nos diretórios cluster/
, namespaces/
e system/
no formato exato que seria enviado ao
APIServer para aplicação. Os recursos com escopo de cluster estão diretamente nesse
diretório. Cada subdiretório inclui todas as configurações dos recursos em um
namespace. O diretório compiled/
contém os seguintes diretórios e
arquivos:
.
├── clusterrolebinding_namespace-reader.yaml
├── clusterrole_namespace-reader.yaml
├── clusterrole_secret-admin.yaml
├── clusterrole_secret-reader.yaml
├── customresourcedefinition_crontabs.stable.example.com.yaml
├── namespace_team-1.yaml
├── namespace_team-2.yaml
├── team-1
│ ├── crontab_my-new-cron-object.yaml
│ ├── limitrange_limits.yaml
│ ├── networkpolicy_default-deny-egress.yaml
│ ├── resourcequota_pvc.yaml
│ ├── rolebinding_secret-reader.yaml
│ └── serviceaccount_sa.yaml
└── team-2
├── crontab_my-new-cron-object.yaml
├── limitrange_limits.yaml
├── networkpolicy_default-deny-all.yaml
├── resourcequota_pvc.yaml
├── rolebinding_secret-admin.yaml
└── serviceaccount_sa.yaml
Sincronizar o cluster com o repositório raiz usando o Config Sync
Nesta seção, você sincronizará seu cluster com o repositório hierárquico usando o Config Sync e a Google Cloud CLI.
Crie um arquivo chamado
apply-spec.yaml
e copie o seguinte texto nele:# apply-spec.yaml applySpecVersion: 1 spec: configSync: enabled: true sourceFormat: hierarchy syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples/ syncBranch: init secretType: none policyDir: hierarchical-format/config
Aplique o arquivo
apply-spec.yaml
usando a Google Cloud CLI:gcloud alpha container fleet config-management apply \ --membership=CLUSTER_NAME \ --config=CONFIG_YAML_PATH \ --project=PROJECT_ID
Substitua:
CLUSTER_NAME
: o nome do cluster registrado ao qual você quer aplicar essa configuração.CONFIG_YAML_PATH
: o caminho para o arquivoapply-spec.yaml
PROJECT_ID
: ID do projeto
Verifique se o Config Sync está sincronizando todas as configurações com o cluster:
gcloud alpha container fleet config-management status --project=PROJECT_ID
Exemplo de saída:
Name Status Last_Synced_Token Sync_Branch Last_Synced_Time Policy_Controller Hierarchy_Controller CLUSTER_NAME SYNCED 6bfc9be init 2021-06-08T17:26:32Z GatekeeperControllerManager NOT_INSTALLED PENDING
Uma instalação bem-sucedida tem um status de
SYNCED
.
Examinar as configurações
O diretório config/
inclui os seguintes recursos:
- ClusterRoles
- ClusterRoleBindings
- CRDs
- Namespaces
- RoleBindings
- ServiceAccounts
- ResourceQuotas
- NetworkPolicies
- LimitRanges
- CRs
Essas configurações são aplicadas assim que o Config Sync é configurado para ler no repositório. Nesta seção, você verificará se o Config Sync está gerenciando os namespaces, os CRDs e os RoleBindings no diretório.
Todos os objetos gerenciados pelo Config Sync têm o rótulo app.kubernetes.io/managed-by
definido como configmanagement.gke.io
, e é possível usar esse rótulo para consultar seus
recursos.
Liste os namespaces gerenciados pelo Config Sync:
kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
Exemplo de saída:
NAME STATUS AGE team-1 Active 28m team-2 Active 28m
Liste os CRDs gerenciados pelo Config Sync:
kubectl get crds -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
Exemplo de saída:
NAME CREATED AT crontabs.stable.example.com 2021-05-04T14:58:14Z
Liste os RoleBindings gerenciados pelo Config Sync:
kubectl get rolebindings -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
Exemplo de saída:
NAMESPACE NAME ROLE AGE team-1 secret-reader ClusterRole/secret-reader 29m team-2 secret-admin ClusterRole/secret-admin 29m
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.
Exclua o projeto
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos individuais
Para impedir que o Config Sync gerencie o cluster, execute o seguinte comando:
gcloud alpha container fleet config-management unmanage \
--project=PROJECT_ID \
--membership=CLUSTER_NAME
Para excluir o cluster, execute o seguinte comando:
gcloud container clusters delete CLUSTER_NAME
A seguir
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.