Como parar e retomar configurações de sincronização

Em algumas situações, pode ser necessário parar rapidamente o Anthos Config Management de sincronizar config do seu repo. Um exemplo desse tipo de situação é se alguém confirma no repo um config que é válido em termos de sintática, mas está incorreto, e você quer limitar os efeitos dele nos clusters em execução enquanto o config é removido ou corrigido.

Neste tópico, mostramos como interromper a sincronização rapidamente e retomá-la quando o problema é corrigido.

Pré-requisitos

O usuário que executa os comandos discutidos neste tópico precisa das seguintes permissões de RBAC do Kubernetes nos namespaces kube-system e config-management-system em todos os clusters em que você quer interromper a sincronização:

- apiGroups: ["extensions"]
  resources: ["deployments", "deployments/scale"]
  verbs: ["get", "update"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list", "watch"]

Como interromper a sincronização

Para interromper a sincronização, execute os seguintes comandos, que são apresentados como um comando único para sua conveniência, mas que também podem ser executados separadamente:

kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
&& kubectl -n config-management-system scale deployment syncer --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=syncer \
&& kubectl -n config-management-system scale deployment git-importer --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=git-importer

Veja a seguir os que os comandos fazem, em sequência. Se um comando falhar, os demais não serão executados.

  1. Reduza a contagem replicas no Config Management Operator Deployment para 0.
  2. Reduza a contagem de replicas na implantação do sincronizador para 0.
  3. Reduza a contagem de replicas na implantação do git-importer para 0.

Todas as implantações ainda estão no cluster, mas nenhuma réplica do operador, do git-importer ou do sincronizador está disponível. Portanto, as configurações não são sincronizadas do repositório.

Como interromper a sincronização em todos os clusters registrados

Se você precisa interromper a sincronização em todos os clusters registrados em um único projeto do Google Cloud, em vez de um cluster por vez, crie um script que use o comando nomos status para receber a lista de todos os clusters registrados. Em seguida, o script cria um contexto kubectl para cada cluster usando o comando gcloud container clusters get-credentials e executa os comandos acima em cada um deles. Veja a seguir um exemplo simples desse script:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
  && kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
  && kubectl -n config-management-system scale deployment syncer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=syncer \
  && kubectl -n config-management-system scale deployment git-importer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=git-importer
done

Como retomar a sincronização

Para retomar a sincronização, execute o seguinte comando:

kubectl -n kube-system scale deployment config-management-operator --replicas=1

Esse comando escalona a implantação do operador para uma réplica. Em seguida, o operador reconhece que as implantações do sincronizador e do git-importer foram escalonadas incorretamente e também as escalona para uma réplica.

Como retomar a sincronização em todos os clusters registrados

Se você precisa retomar a sincronização de todos os clusters registrados em um projeto do Google Cloud, em vez de um cluster por vez, crie um script que use nomos status para ver a lista de todos os clusters registrados. Em seguida, o script cria um contexto kubectl para cada cluster usando o comando gcloud container clusters get-credentials e executa o comando acima em cada um deles. Veja a seguir um exemplo simples desse script:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=1

done

A seguir