Como gerenciar objetos de cluster atuais

Quando o Anthos Config Management gerencia um objeto de cluster, ele observa o objeto e o conjunto de configs no repo que afetam o objeto e garante que eles estejam sincronizados. Neste tópico, você verá como começar a gerenciar um objeto atual e como parar de gerenciar um objeto sem o excluir.

Visão geral

Um objeto em um cluster é gerenciado pelo Anthos Config Management se tiver a anotação configmanagement.gke.io/managed: enabled.

Se um objeto não tiver o rótulo configmanagement.gke.io/managed ou se estiver definido como algo diferente de enabled, ele não será gerenciado.

No fluxograma a seguir, descrevemos algumas situações que fazem com que um objeto se torne gerenciado ou não gerenciado:

Como gerenciar ou não gerenciar um objeto do Kubernetes usando o Anthos Config Management

O gráfico contém três fluxos separados: começar a gerenciar um objeto, parar de gerenciar um objeto e excluir um objeto gerenciado.

  1. Quero gerenciar um objeto. O objeto tem um config no repo?
    • Não: crie um config para o objeto. O Anthos Config Management define a anotação configmanagement.gke.io/managed: enabled e começa a gerenciar o objeto.
    • Sim: o config define a anotação configmanagement.gke.io/managed: disabled?
      • Não: o objeto é gerenciado por padrão.
      • Sim: edite o config para remover a anotação configmanagement.gke.io/managed: disabled. Quando a alteração é enviada ao repo de origem, o Anthos Config Management percebe a alteração, aplica a anotação configmanagement.gke.io/managed: enabled e aplica o config.
  2. Quero parar de gerenciar um objeto, mas não o excluir.
    • Edite o config do objeto no repo e defina a anotação configmanagement.gke.io/managed: disabled. Quando a alteração no config é detectada, o Anthos Config Management para de gerenciar o objeto.
  3. Quero parar de gerenciar um objeto e excluí-lo.
    • Exclua o config do objeto do repo. Quando você exclui um config de um objeto gerenciado, o Anthos Config Management exclui o objeto de todos os clusters ou namespaces a que o config se aplica.

Além da anotação configmanagement.gke.io/managed: enabled, o Anthos Config Management aplica o rótulo app.kubernetes.io/managed-by: configmanagement.gke.io a todos os objetos que ele gerencia. Esse rótulo permite listar facilmente todos os objetos no Anthos Config Management.

Por que não aplicar a anotação manualmente?

O Anthos Config Management usa um modelo declarativo para aplicar alterações de configuração aos clusters, lendo a configuração pretendida no seu repo. Se você tentar aplicar a anotação manualmente, usando o comando kubectl ou a API Kubernetes, o Anthos Config Management modificará a manual automaticamente para o conteúdo do repo.

Antes de começar

Os exemplos a seguir se baseiam no guia de início rápido. Antes de iniciar as próximas etapas, siga o guia de início rápido e conclua todas as etapas antes de Examinar o cluster e o repositório.

Listar todos os objetos gerenciados

Para listar todos os objetos gerenciados pelo Anthos Config Management em um determinado cluster ou namespace, use um seletor de rótulo como este:

kubectl get object-type -l "app.kubernetes.io/managed-by=configmanagement.gke.io"

Para listar todos os objetos não gerenciados pelo Anthos Config Management, use um seletor de rótulo como este:

kubectl get object-type -l "app.kubernetes.io/managed-by!=configmanagement.gke.io"

Por exemplo, este comando lista RoleBindings no namespace shipping-dev que são gerenciados pelo Anthos Config Management:

kubectl get rolebindings -n shipping-dev \
    -l "app.kubernetes.io/managed-by=configmanagement.gke.io"
NAME           AGE
job-creators   12m
pod-creators   12m
sre-admin      12m
viewers        12m

Este comando lista RoleBindings no namespace kube-system que não são gerenciados pelo Anthos Config Management:

kubectl get rolebindings -n kube-system \
    -l "app.kubernetes.io/managed-by!=configmanagement.gke.io"
NAME                                             AGE
fluentd-gcp-scaler-binding                       2d21h
gce:cloud-provider                               2d21h
heapster-binding                                 2d21h
metrics-server-auth-reader                       2d21h
system::leader-locking-kube-controller-manager   2d21h
system::leader-locking-kube-scheduler            2d21h
system:controller:bootstrap-signer               2d21h
system:controller:cloud-provider                 2d21h
system:controller:token-cleaner                  2d21h

Começar a gerenciar um objeto atual

Neste exemplo, você cria um papel manualmente e começa a gerenciá-lo com o Anthos Config Management.

  1. Crie o papel myrole no namespace audit:

    kubectl create role -n audit myrole --verb=get --resource=pods
  2. Veja as permissões concedidas pelo papel myrole:

    kubectl describe role -n audit myrole
    Name:         myrole
    Labels:       <none>
    Annotations:  <none>
    PolicyRule:
      Resources  Non-Resource URLs  Resource Names  Verbs
      ---------  -----------------  --------------  -----
      pods       []                 []              [get]
    

    O papel tem permissão apenas para get pods.

  3. Neste ponto, o papel existe no cluster, mas o Anthos Config Management não sabe disso.

    1. Em um terminal, acesse o clone local do seu repo.
    2. Use o comando a seguir para criar um manifesto YAML para myrole e salvar o manifesto em um novo arquivo chamado namespaces/audit/myrole.yaml.

      kubectl get role myrole -n audit -o yaml > namespaces/audit/myrole.yaml
      
    3. Edite o arquivo myrole.yaml.

      1. Remova todos os campos da chave metadata, exceto name e namespace.
      2. Adicione o verbo list depois de get no campo de lista rules.verbs.

      Salve as alterações. O arquivo resultante tem o seguinte conteúdo:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: myrole
        namespace: audit
      rules:
      - apiGroups:
        - ""
        resources:
        - pods
        verbs:
        - get
        - list
      
    4. Confirme a alteração no repo.

    5. Aguarde alguns instantes até que o Config Management Operator perceba a confirmação. Para verificar se o papel myrole agora é gerenciado pelo Anthos Config Management, execute kubectl describe novamente.

      kubectl describe role myrole -n audit
      

Observe a anotação configmanagement.gke.io/managed: enabled, que indica que o objeto é gerenciado pelo Anthos Config Management. Observe também as anotações que mostram o caminho e o nome do arquivo no repo que causaram a alteração de configuração mais recente no objeto, e o hash do Git que representa a confirmação.

Name:         myrole
Labels:       app.kubernetes.io/managed-by=configmanagement.gke.io
Annotations:  configmanagement.gke.io/cluster-name: example-cluster-name
              configmanagement.gke.io/managed: enabled
              configmanagement.gke.io/source-path: namespaces/audit/myrole.yaml
              configmanagement.gke.io/token: 0836805a09f160f12aa934b9042527e7283c7030
PolicyRule:
Resources  Non-Resource URLs  Resource Names  Verbs
---------  -----------------  --------------  -----
pods       []                 []              [get list]

Parar de gerenciar um objeto gerenciado

Neste exemplo, mostramos como parar de gerenciar um objeto que o Anthos Config Management está gerenciando, como o papel myrole em Começar a gerenciar um objeto atual.

  1. Edite o arquivo namespaces/online/shipping-app-backend/shipping-dev/job-creator-rolebinding.yaml no clone local de seu repositório e adicione uma seção annotations: que corresponda ao texto em negrito abaixo:

     kind: RoleBinding
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: job-creators
     subjects:
     - kind: User
       name: sam@foo-corp.com
       apiGroup: rbac.authorization.k8s.io
     roleRef:
       kind: Role
       name: job-creator
       apiGroup: rbac.authorization.k8s.io
     annotations:
       configmanagement.gke.io/managed: disabled
    

    Salve o arquivo.

  2. Crie uma confirmação do Git com suas alterações e envie-a ao seu repo.

  3. Aguarde alguns instantes até o Anthos Config Management perceber e aplicar a nova confirmação.

  4. Use o comando a seguir para listar todas as anotações no RoleBinding job-creators. A resposta está truncada para facilitar a leitura.

    kubectl get rolebinding job-creators -n audit -o yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      annotations:
        configmanagement.gke.io/cluster-name: my-cluster
        configmanagement.gke.io/managed: disabled
        configmanagement.gke.io/source-path: namespaces/viewers-rolebinding.yaml
        configmanagement.gke.io/sync-token: fabdb51587d51a81c7e419eeb983aafcf293dc83
    ...
    

Depois de verificar se o objeto está desativado, será possível remover a configuração e verificar se o objeto now-unagedaged não foi excluído do namespace. Se você quiser gerenciar o objeto novamente, recrie a configuração dele. Por isso, talvez você queira gerenciar objetos e deixar os configs no repositório.

Agora que o objeto não é gerenciado, ele não é criado ou recriado em clusters novos ou atuais e não é removido, mesmo que exista. Para retomar o gerenciamento de um objeto que você parou de gerenciar anteriormente, consulte o próximo exemplo, Retomar o gerenciamento de um objeto anteriormente não gerenciado.

Retomar o gerenciamento de um objeto anteriormente não gerenciado

Neste exemplo, você verá como retomar o gerenciamento de um objeto removido anteriormente, como em Parar de gerenciar um objeto atual. Ele presume que você não removeu a configuração do RoleBinding job-creators.

  1. Se você excluiu o RoleBinding job-creators do seu repositório na última confirmação, execute as etapas a seguir.

    1. Use git revert para reverter a última confirmação:

      git revert HEAD~1
      

      Você precisará confirmar a operação de reversão.

    2. Envie a confirmação de reversão para seu repositório.

      git push
      
  2. Edite o arquivo namespaces/online/shipping-app-backend/shipping-dev/job-creator-rolebinding.yaml no clone local do seu repositório e remova a anotação configmanagement.gke.io/managed: disabled. Salve o arquivo.

  3. Confirme e envie sua alteração. O Anthos Config Management faz o seguinte:

    • Percebe a alteração
    • Aplica a anotação configmanagement.gke.io/managed: enabled. O objeto agora é gerenciado.
    • Aplica a configuração, como aconteceria com qualquer objeto gerenciado.
  4. Para verificar se o objeto agora é gerenciado, liste suas anotações:

    kubectl get rolebinding job-creators -n audit -o yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      annotations:
        configmanagement.gke.io/cluster-name: my-cluster
        configmanagement.gke.io/managed: enabled
    ...
    

Parar de gerenciar um namespace

É possível parar de gerenciar um namespace da mesma forma que você para de gerenciar qualquer tipo de objeto. Se você quiser parar de gerenciar outros recursos no namespace, execute as etapas a seguir:

  1. Adicione a anotação configmanagement.gke.io/managed:disabled ao config do namespace e a todos os configs no mesmo namespace.

  2. Confirme e envie suas alterações para o repositório. Aguarde a sincronização do operador com o repositório.

  3. Exclua os recursos não gerenciados do repositório.

Se houver configurações gerenciadas dentro de um diretório de namespace não gerenciado, a sincronização registrará erros, mas outras configurações continuarão sendo sincronizadas normalmente.

A seguir