Como sincronizar de um repositório do Git

Neste guia de início rápido, mostramos como começar a usar o Config Sync em um novo cluster, usando o repositório de amostras do Anthos Config Management para inicializar um cluster com um conjunto de configurações. Neste guia de início rápido, você não precisa ter acesso de gravação ao repositório. Imagine que uma equipe de conformidade em sua organização seja responsável por criar configs e que cada cluster precise se sincronizar com o repositório.

Depois de concluir este guia de início rápido, siga um mais avançado sobre como escrever, testar e sincronizar configs.

Antes de começar

  1. Crie um cluster.

  2. Configure o comando kubectl para se autenticar no cluster e crie um RoleBinding para se tornar um administrador do cluster usando os comandos a seguir. Use o nome do cluster em que você vê [MY-CLUSTER] e use o endereço de e-mail da sua conta do Cloud Billing em que vê [USER-ACCOUNT]. Dependendo de como você configurou o comando gcloud no sistema local, talvez seja necessário adicionar os campos --project e --zone.

    gcloud container clusters get-credentials [MY-CLUSTER]
    
    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole cluster-admin --user [USER_ACCOUNT]
    
  3. Instale o comando nomos no sistema local.

  4. Instale o Config Sync Operator no cluster recém-criado.

Configurar o cluster

Crie um arquivo config-management.yaml e copie o arquivo YAML abaixo nele. Recomendamos ativar a sincronização de vários repositórios para ter mais recursos. Para saber mais, consulte Sincronização de vários repositórios.

# config-management.yaml
apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  # Enable multi-repo mode to use additional features
  enableMultiRepo: true

Aplique a configuração ao seu cluster:

kubectl apply -f config-management.yaml

Se o comando for bem-sucedido, o Kubernetes atualizará o Config Sync no cluster para criar controladores e CustomResourceDefinitions (CRDs). Para verificar se o Config Sync está em execução, aguarde os CRDs RootSync e RepoSync estarem disponíveis:

until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; \
do date; sleep 1; echo ""; done

Saída:

NAME                          CREATED AT
rootsyncs.configsync.gke.io   YYYY-MM-DDThh:mm:ssZ
reposyncs.configsync.gke.io   YYYY-MM-DDThh:mm:ssZ

Em seguida, crie um arquivo com um recurso personalizado RootSync. Recomendamos o uso do formato unstructured, já que ele permite que você organize suas configurações da maneira mais conveniente para você. Como o repositório é legível por todos, auth é definido como none. Para ver uma explicação dos campos, consulte Configuração para o repositório Git.

# root-sync.yaml
# If you are using a Config Sync version earlier than 1.7,
# use: apiVersion: configsync.gke.io/v1alpha1
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  name: root-sync
  namespace: config-management-system
spec:
  sourceFormat: unstructured
  git:
    repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    branch: init
    dir: quickstart/multirepo/root
    auth: none

Aplique o RootSync ao cluster:

kubectl apply -f root-sync.yaml

Se o comando for bem-sucedido, o Kubernetes atualizará o Config Sync no cluster para criar os reconciliadores e começar a sincronizar a configuração do cluster do repositório. Para verificar se o Config Sync está em execução, liste todos os pods em execução no namespace config-management-system:

kubectl get pods -n config-management-system

Saída:

NAME                                       READY   STATUS    RESTARTS   AGE
admission-webhook-7dbc55cbf5-thlnl         1/1     Running   1          89m
admission-webhook-7dbc55cbf5-x54n9         1/1     Running   0          89m
ns-reconciler-gamestore-7478cb7b87-hf6zn   3/3     Running   0          2m37s
reconciler-manager-7cdb699bf8-fns5r        2/2     Running   0          5m29s
root-reconciler-6c7c87b7b7-txptf           3/3     Running   0          4m51s

Verificar o status da sincronização

É possível verificar se o Config Sync sincroniza todos os configs com o cluster usando o comando nomos status.

 nomos status

Saída:

*my-cluster
  --------------------
  <root>  https://github.com/GoogleCloudPlatform/anthos-config-management-samples/quickstart/multirepo/root@init
  SYNCED   282a2023
  --------------------
  gamestore   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/quickstart/multirepo/namespaces/gamestore@init
  SYNCED      282a2023

Examinar o cluster e repo

O diretório quickstart/multirepo/root inclui ClusterRole, CustomResourceDefinition, configurações do Prometheus Operator para monitoramento, Rolebinding, Namespace e RepoSync. Esses configs são aplicados assim que o Config Sync é configurado para ler o repo.

Todos os objetos gerenciados pelo Config Sync têm o rótulo app.kubernetes.io/managed-by definido como configmanagement.gke.io.

  • Liste os namespaces gerenciados pelo Config Sync:

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Saída:

    NAME         STATUS   AGE
    gamestore    Active   58s
    monitoring   Active   58s
    

    Analise as configurações que causaram a criação desses namespaces, como namespace-gamestore.yaml e acm-monitor/namespace-monitoring.yaml.

  • Liste os ClusterRoles gerenciados pelo Config Sync:

    kubectl get clusterroles -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Saída:

    NAME                  CREATED AT
    namespace-reader      YYYY-MM-DDThh:mm:ssZ
    prometheus-acm        YYYY-MM-DDThh:mm:ssZ
    prometheus-operator   YYYY-MM-DDThh:mm:ssZ
    webstore-admin        YYYY-MM-DDThh:mm:ssZ
    

    Para analisar os configs do ClusterRole, declare:

    • clusterrole-namespace-reader.yaml
    • clusterrole-webstore-admin.yaml
  • Liste o RepoSyncs gerenciado pelo Config Sync:

    kubectl get reposyncs.configsync.gke.io -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Saída:

    NAMESPACE   NAME        SOURCECOMMIT                               SYNCCOMMIT
    gamestore   repo-sync   282a2023cf73ac94e8a85b464ac9f76d209067b0   282a2023cf73ac94e8a85b464ac9f76d209067b0
    

    Analise as configurações do RepoSync que declaram:

    • reposync-gamestore.yaml

É possível analisar outros objetos, como CRDs e Rolebindings, da mesma maneira.

Tentativa de modificar manualmente um objeto gerenciado

O Config Sync impede a mutação de objetos gerenciados por meio do webhook de admissão.

Se você tentar fazer uma alteração conflitante modificando manualmente um objeto do Kubernetes gerenciado pelo Config Sync, receberá um erro. Para fazer esse teste, tente excluir o namespace gamestore.

kubectl delete namespace gamestore

Saída:

error: admission webhook "v1.admission-webhook.configsync.gke.io" denied the request: requester is not authorized to delete managed resources

Como fazer a limpeza

Depois que você concluir os exercícios deste tópico, exclua o cluster usado nos testes para fazer a limpeza.

A seguir