Como alterar configurações

Neste tutorial, mostramos como alterar uma configuração, validá-la e sincronizá-la com um cluster. Este tutorial é baseado nas habilidades que você aprendeu no guia de início rápido para sincronizar a partir de um repositório Git. Imagine que você é um novo membro da equipe de compliance da sua organização e está criando seu primeiro config.

Antes de começar

Antes de começar este tutorial, conclua as seguintes etapas:

  1. Siga o guia de início rápido para sincronizar de um repositório Git e não exclua o cluster que você configurou.

  2. Crie uma conta do GitHub se você não tiver uma.

  3. Siga as instruções para adicionar uma nova chave SSH à sua conta do GitHub (em inglês) na documentação do GitHub. Você precisa da localização da sua chave privada para concluir este tutorial.

É bom também estar familiarizado com a bifurcação e clonagem de repositórios do Git (em inglês).

Criar seu repo

Nesta seção, você criará um repositório Git gerando uma bifurcação do repositório de amostras do Anthos Config Management e, em seguida, criando um clone local como sua cópia de trabalho.

Para criar o repositório, conclua as etapas a seguir:

  1. No navegador, acesse o repositório de amostras do Anthos Config Management e clique em bifucar.

  2. No seu sistema local, clone sua bifurcação:

    git clone git@github.com:GIT_USERNAME/anthos-config-management-samples.git

    Substitua GIT_USERNAME pelo nome de usuário do GitHub:

  3. Configure o sistema local para autenticar no GitHub usando a chave SSH que você adicionou na seção Antes de começar.

Criar o hook de pré-confirmação nomos vet

O comando nomos vet impede que você confirme uma config com erros de sintaxe. É possível instalar um hook de pré-confirmação que executa o comando nomos vet na alteração. Com esse hook, o nomos vet verifica se há erros de sintaxe ou outros problemas nas alterações antes de você confirmar no repositório local.

Para adicionar o hook de pré-confirmação, conclua as seguintes etapas:

  1. Em um terminal, vá para o diretório onde você clonou seu repo.

  2. Edite o arquivo .git/hooks/pre-commit. Observe o caractere . no diretório .git/.

  3. nomos vet deve ser executado no diretório quickstart/multirepo/root do seu repo clonado localmente. Defina --source-format=unstructured porque o não estruturado é o formato recomendado para a maioria dos usuários, e o exemplo no guia de início rápido não está estruturado. Adicione o seguinte ao arquivo:

    nomos vet --path=REPO_PATH/quickstart/multirepo/root --source-format=unstructured
    

    Substitua REPO_PATH pelo caminho totalmente qualificado do local onde você clonou o repo.

  4. Salve o arquivo.

  5. Verifique se o arquivo .git/hooks/pre-commit é executável:

    chmod +x .git/hooks/pre-commit
  6. Para testar a pré-confirmação, adicione intencionalmente um erro de sintaxe a uma configuração (como excluir um caractere :) antes de tentar executar git commit. nomos vet é executado e mostra uma mensagem de erro.

Configurar o cluster

Criar secrets do Kubernetes para os Secrets do Git

  1. Acesse a chave privada registrada no seu repositório do Git. Esteja atento a como você faz o download do arquivo e onde o armazena, porque ele pode ser usado para autenticar seu repositório do Git.

  2. Crie um secret usando um par de chaves SSH.

    • Crie um secret para o repositório raiz:

      kubectl create secret generic SECRET_NAME \
       --namespace=config-management-system \
       --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
      
    • Crie um secret para cada repositório de namespace:

      O repositório raiz inclui um objeto RepoSync. Portanto, é necessário criar um secret no namespace do objeto do RepoSync (gamestore):

      kubectl create secret generic SECRET_NAME \
       --namespace=gamestore
       --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
      

    Substitua:

    • SECRET_NAME: adicione o nome do secret.
    • /path/to/KEYPAIR_PRIVATE_KEY_FILENAME: adicione o nome da chave privada (aquela sem o sufixo .pub).
  3. Proteja a chave privada no seu disco local ou exclua-a.

Atualizar as configurações do Git

Edite as configurações do Git nos objetos RootSync e RepoSync que você criou no guia de início rápido para sincronizar de um repositório Git. Faça as mudanças a seguir:

  1. Atualize os seguintes valores do seu objeto RootSync:

    • Altere o valor de repo para o endereço da bifurcação. Substitua GIT_USERNAME pelo nome de usuário do GitHub:
    • Altere o valor de auth para ssh
    • Defina spec.git.secretRef.name como SECRET_NAME. O secret SECRET_NAME já precisa existir no cluster.

    No exemplo a seguir, veja uma configuração atualizada:

    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git
        branch: main
        dir: quickstart/multirepo/root
        auth: ssh
        secretRef:
          name: SECRET_NAME
    

    Substitua SECRET_NAME pelo nome do secret.

    Para uma explicação dos campos, consulte Campos do ConfigManagement.

  2. Aplique a configuração ao seu cluster:

    kubectl apply -f root-sync.yaml
  3. Atualize os seguintes valores do seu objeto RepoSync:

    • Altere o valor de repo para o endereço da bifurcação. Substitua GIT_USERNAME pelo nome de usuário do GitHub:
    • Altere o valor de auth para ssh
    • Defina spec.git.secretRef.name como SECRET_NAME. O secret SECRET_NAME já precisa existir no cluster.

    No exemplo a seguir, veja uma configuração atualizada:

    apiVersion: configsync.gke.io/v1beta1
    kind: Repo
    metadata:
      name: repo-sync
      namespace: gamestore
    spec:
      sourceFormat: unstructured
      git:
        repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git
        branch: main
        dir: quickstart/multirepo/namespaces/gamestore
        auth: ssh
        secretRef:
          name: SECRET_NAME
    

    Substitua SECRET_NAME pelo nome do secret.

  4. Confirme antes as mudanças no repositório:

    git add .
    git commit -m 'Update gamestore RepoSync'
    git push
    

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

kubectl get pods -n config-management-system

Exemplo de saída:

NAME                                       READY   STATUS    RESTARTS   AGE
admission-webhook-7dbc55cbf5-9thcj         1/1     Running   0          6d18h
admission-webhook-7dbc55cbf5-pmrxt         1/1     Running   0          6d18h
ns-reconciler-gamestore-67ff4dcbc4-x4vnh   3/3     Running   0          14m
reconciler-manager-7cdb699bf8-8lvll        2/2     Running   0          6d18h
root-reconciler-84f976b74d-mh6zd           3/3     Running   0          14m

Nesse momento, o cluster tem as mesmas configurações do guia de início rápido para sincronizar de um repositório Git. Porque sua bifurcação tem o mesmo conteúdo. Siga os exercícios nesse guia de início rápido para ver os mesmos resultados.

Modificar uma configuração do repo

Quando você cria ou modifica uma configuração do repositório, o Config Sync detecta a confirmação e aplica a nova configuração a objetos relevantes do Kubernetes.

Fazer adições a uma configuração

Nesta seção, você adiciona o usuário admin@gamestore.com ao RoleBinding gamestore-admin no namespace gamestore:

  1. Abra um terminal e emita o comando a seguir para verificar alterações no RoleBinding gamestore:

    kubectl get rolebindings gamestore-admin -n gamestore -o yaml --watch
    
  2. Abra outro terminal e vá para o clone local do seu repo.

  3. Edite o arquivo quickstart/multirepo/root/rolebinding-gamestore-admin.yaml para adicionar admin@gamestore.com ao campo subjects.

    Após a edição, o arquivo terá este conteúdo:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: gamestore-admin
      namespace: gamestore
    subjects:
    - kind: ServiceAccount
      name: ns-reconciler-gamestore
      namespace: config-management-system
    - kind: User
      name: admin@gamestore.com
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: admin
      apiGroup: rbac.authorization.k8s.io
    
  4. Salve o arquivo:

    git add quickstart/multirepo/root/rolebinding-gamestore-admin.yaml
    
  5. Crie uma confirmação:

    git commit -m "Add admin@gamestore.com to cluster admin"
    
  6. Envie a confirmação para sua bifurcação:

    git push origin main
    
  7. Volte para o terminal em que você está verificando o objeto gamestore-admin. Em alguns segundos, a alteração será sincronizada com o cluster.

Reverter alterações

O Config Sync facilita a reversão de alterações.

Para reverter a alteração feita na seção anterior, siga estas etapas:

  1. Volte para o terminal em que você estava usando para o Git.

  2. Use o comando git log para encontrar o hash (neste exemplo, é a entrada principal)

  3. Reverta a última alteração:

    git revert HASH
    
    git push origin main
    

    Como uma operação de reversão cria uma nova confirmação, o nomos vet --source-format=unstructured verifica a configuração resultante novamente e garante que a sintaxe ainda esteja correta.

  4. Volte para o terminal em que você está verificando o objeto gamestore-admin e observe que admin@gamestore.com não está mais listado nos sujeitos do ClusterRole.

  5. Pressione Control+C para parar de assistir ao objeto gamestore-admin.

Este exercício mostra que o Config Sync mantém objetos sincronizados com os configs do seu repo quando você confirma alterações no repo.

Limpeza

Depois de concluir os exercícios deste tópico, execute as ações a seguir para limpeza:

  • Exclua o cluster usado para teste.
  • Exclua o clone local da bifurcação.
  • Exclua a chave SSH privada local, se aplicável.
  • Exclua a bifurcação do repositório de exemplo. Isso exclui todas as chaves de implantação (em inglês) associadas apenas ao repositório.

A seguir