Sincronizar com um repositório hierárquico


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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Limpeza.

Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. 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.

  3. 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

    1. 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 cluster
    • PROJECT_ID: ID do projeto

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.

  1. 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
    
  2. 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 arquivo apply-spec.yaml
    • PROJECT_ID: ID do projeto
  3. 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.

  1. 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
    
  2. 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
    
  3. 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

  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.

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