Interromper e retomar as configurações de sincronização

Em algumas situações, pode ser necessário interromper rapidamente a sincronização das configurações da fonte de verdade pelo Config Sync. Por exemplo, se alguém confirma uma configuração sintaticamente válida, mas incorreta, na origem e você quer limitar os efeitos nos clusters em execução enquanto a configuração é removida ou corrigida.

Pré-requisitos

Para usar os comandos neste documento, você precisa das seguintes permissões do RBAC do Kubernetes nos namespaces config-management-system em todos os clusters em que você quer parar de sincronizar:

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

Parar e retomar a sincronização de uma fonte confiável

Esta seção apresenta uma única fonte de verdade e mostra como interromper a sincronização rapidamente e como retomar a sincronização quando o problema é corrigido. Para aprender a interromper a sincronização de mais de uma fonte de verdade, consulte Como interromper e retomar a sincronização de mais de uma fonte de verdade.

Interromper sincronização

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

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

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 de replicas na implantação do operador ConfigManagement para 0.
  2. Reduza a contagem de replicas de todas as implantações em execução no namespace config-management-system para 0. O conjunto exato de implantações afetadas varia de acordo com a versão do produto.

Todas as implantações ainda estão no cluster, mas não há réplicas do operador ou de qualquer um dos processos responsáveis pela sincronização disponíveis. Portanto, as configurações não são sincronizadas da fonte de verdade.

Para verificar se todos os processos foram interrompidos, use o seguinte comando e verifique se todas as implantações não têm réplicas:

kubectl get -n config-management-system deployment

Se você precisar interromper a sincronização em vários clusters, execute os comandos anteriores para cada um deles.

Retomar a sincronização

Para retomar a sincronização de um único cluster, execute o comando a seguir:

kubectl -n config-management-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 os pods no Deployment do namespace config-management-system são dimensionados incorretamente e os escalona para a contagem apropriada de réplicas.

Se você precisa retomar a sincronização em vários clusters, execute o comando anterior para cada cluster.

Parar e retomar a sincronização de mais de uma fonte de informações

A seção é para mais de uma fonte de informações e mostra como interromper temporariamente e retomar a sincronização de mais de uma fonte. Para aprender a interromper a sincronização em uma única fonte de verdade, consulte Como interromper e retomar a sincronização a partir de uma fonte de verdade.

Somente um administrador central pode interromper a sincronização na fonte raiz da verdade.

A capacidade de interromper a sincronização em mais de uma fonte de verdade depende do método de configuração usado quando você configurou a sincronização de mais de uma fonte de verdade:

  • Se o método Controlar fontes em uma fonte de verdade tiver sido usado, um administrador central será o único que poderá interromper e retomar a sincronização.

  • Se o método Controlar uma fonte de verdade com a API Kubernetes tiver sido usado, os operadores de aplicativos poderão interromper e retomar a sincronização das fontes de verdade com escopo de namespace em que trabalham.

Interromper sincronização

As seções a seguir mostram como interromper a sincronização da fonte de verdade raiz e das fontes de verdade com escopo de namespace. Para impedir que o Reconciler Manager reverta a alteração, é necessário interromper o Reconciler Manager primeiro. Basta executar os seguintes comandos:

kubectl -n config-management-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l k8s-app=config-management-operator --timeout=60s \
&& kubectl scale deployment -n config-management-system reconciler-manager --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler-manager

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 de replicas na implantação do operador ConfigManagement para 0.
  2. Reduza a contagem de replicas na implantação do Reconciler Manager para 0 (zero).

Parar de sincronizar da fonte raiz da verdade

Para interromper a sincronização de um cluster na fonte raiz de verdade, um administrador central pode executar o seguinte comando:

kubectl -n config-management-system scale deployment root-reconciler --replicas=0

Esse comando reduz a contagem de replicas na implantação root-reconciler para 0.

Se você precisar interromper a sincronização em vários clusters, execute os comando anterior para cada um deles.

Parar de sincronizar da fonte de verdade com escopo no namespace

Selecione a guia Método da fonte de informações raiz ou Método da API Kubernetes para consultar as instruções relevantes.

Método de fonte de verdade

Se o método Controlar fontes de verdade de namespace na fonte de verdade raiz tiver sido usado, os administradores centrais poderão executar os comandos a seguir para interromper a sincronização de um cluster de uma fonte de verdade do namespace:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0

O comando reduz a contagem de réplicas na implantação ns-reconciler-NAMESPACE para 0.

Se você precisar interromper a sincronização em vários clusters, execute os comando anterior para cada um deles.

Método da API Kubernetes

Se o método Controlar fontes com escopo de namespace com a API Kubernetes tiver sido usado, os operadores de aplicativos poderão interromper a sincronização de um cluster executando os seguintes comandos:

  1. Recupere e salve a configuração RepoSync para usá-la mais tarde, quando quiser retomar a sincronização:

    kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
    

    Substitua NAMESPACE pelo namespace do objeto RepoSync.

  2. Exclua a configuração RepoSync:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    Este comando aciona o Reconciler Manager para remover o conciliador de namespace (ns-reconciler-NAMESPACE) de NAMESPACE e parar a sincronização.

    Se você precisar interromper a sincronização em vários clusters, execute os comandos anteriores para cada um deles.

Impedir que o webhook de admissão impeça deslocamentos (opcional)

O webhook de admissão do Config Sync está desativado por padrão. É possível enable e desativar a funcionalidade de prevenção de deslocamento fornecida pelo webhook de admissão usando o Google. Cloud CLI ou kubectl.

Parar de sincronizar de todas as fontes da verdade

Para interromper a sincronização de todas as fontes da verdade, incluindo a fonte raiz da verdade e as com escopo de namespace, execute os seguintes comandos:

kubectl scale deployment -n config-management-system -l app=reconciler --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler

Os comandos reduzem a contagem de replicas de todos os pods do reconciliador em execução no namespace config-management-system para 0 e aguardam até que todos os pods do reconciliador sejam excluídos.

Todas as implantações do Reconciler ainda estão no cluster, mas nenhuma réplica dos Reconciliadores ou qualquer um dos processos responsáveis pela sincronização está disponível. Portanto, as configurações não são sincronizadas da fonte de verdade.

Retomar a sincronização

Esta seção mostra como retomar a sincronização para a fonte raiz da verdade e para origens com escopo de namespace.

Retomar a sincronização a partir da fonte raiz da verdade

Para retomar a sincronização a partir de uma fonte raiz de verdade, um administrador central pode executar o seguinte comando:

kubectl -n config-management-system scale deployment root-reconciler --replicas=1

Esse comando escalona a implantação root-reconciler do operador para uma réplica.

Retomar a sincronização de uma origem com escopo de namespace

Selecione a guia Método da fonte de informações raiz ou Método da API Kubernetes para consultar as instruções relevantes.

Método de fonte de verdade

Se você usou o método Controlar fontes com escopo de namespace em uma fonte de verdade raiz, um administrador central pode executar o seguinte comando:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1

Este comando escalona a implantação ns-conciliation-NAMESPACE para uma réplica.

Método da API Kubernetes

Se você usou o método Controlar fontes com escopo de namespace com a API Kubernetes, os operadores de aplicativos poderão retomar a sincronização aplicando repo-sync.yaml novamente, que contém a configuração RepoSync:

kubectl apply -f repo-sync.yaml

Esse comando aciona o Reconciler Manager para criar um processo de reconciliação de namespace e criar uma implantação ns-reconciler-NAMESPACE.

Ativar e desativar o webhook de admissão

O webhook de admissão do Config Sync está desativado por padrão. É possível enable e desativar a funcionalidade de prevenção de deslocamento fornecida pelo webhook de admissão usando o Google. Cloud CLI ou kubectl.

Retomar a sincronização de todas as fontes de verdade

Para retomar a sincronização de todas as fontes de verdade, execute o seguinte comando:

kubectl -n config-management-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 a implantação do Reconciler Manager está escalonada incorretamente e a escalona para a contagem de réplicas apropriada. No final, o Reconciler Manager redimensiona as reconciliações de raiz e de namespace para a contagem de réplicas correspondente.

A seguir