Interrompere e riprendere la sincronizzazione delle configurazioni

In alcuni casi, potrebbe essere necessario interrompere rapidamente la sincronizzazione delle configurazioni da parte di Config Sync dalla fonte attendibile. Uno di questi scenari si verifica se qualcuno esegue il commit di una configurazione sintatticamente valida, ma non corretta, all'origine e vuoi limitarne gli effetti sui cluster in esecuzione mentre la configurazione viene rimossa o corretta.

Prerequisiti

Per utilizzare i comandi in questo documento, devi disporre delle seguenti autorizzazioni Kubernetes RBAC negli spazi dei nomi config-management-system su tutti i cluster in cui vuoi interrompere la sincronizzazione:

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

Interrompere e riprendere la sincronizzazione da una fonte attendibile

Questa sezione riguarda un'unica fonte attendibile e mostra come interrompere rapidamente la sincronizzazione e come ripristinarla una volta risolto il problema. Per informazioni su come interrompere la sincronizzazione per più fonti attendibili, consulta la sezione Interruzione e ripresa della sincronizzazione da più fonti attendibili.

Interrompi sincronizzazione

Per interrompere la sincronizzazione per un singolo cluster, esegui i comandi seguenti, che vengono forniti come singolo comando per praticità, ma possono anche essere eseguiti separatamente:

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

I comandi eseguono le seguenti operazioni, in sequenza. Se un comando non va a buon fine, i comandi rimanenti non vengono eseguiti.

  1. Riduci il conteggio di replicas nel deployment dell'operatore di ConfigManagement a 0.
  2. Riduci a 0 il numero di replicas di tutti i deployment in esecuzione nello spazio dei nomi config-management-system. L'insieme esatto di deployment interessati varia a seconda della versione del prodotto.

Tutti i deployment sono ancora nel cluster, ma non sono disponibili repliche dell'operatore o dei processi responsabili della sincronizzazione, pertanto le configurazioni non vengono sincronizzate dalla fonte attendibile.

Per verificare che tutti i processi siano stati arrestati, utilizza il seguente comando e verifica che tutti i deployment non abbiano repliche:

kubectl get -n config-management-system deployment

Se devi interrompere la sincronizzazione su più cluster, esegui i comandi precedenti per ciascun cluster.

Riprendi sincronizzazione

Per riprendere la sincronizzazione per un singolo cluster, esegui questo comando:

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

Questo comando scala il deployment dell'operatore a 1 replica. L'operatore nota quindi che i pod nello spazio dei nomi config-management-system vengono scalati in modo errato e li scala in base al numero di repliche appropriato.

Se devi riprendere la sincronizzazione su più cluster, esegui il comando precedente per ogni cluster.

Interrompere e riprendere la sincronizzazione da più fonti attendibili

La sezione riguarda più fonti attendibili e mostra come interrompere temporaneamente e riprendere la sincronizzazione da più fonti attendibili. Per informazioni su come interrompere la sincronizzazione per una singola fonte attendibile, consulta Interrompere e riprendere la sincronizzazione da una fonte attendibile.

Solo un amministratore centrale può interrompere la sincronizzazione nella fonte attendibile principale.

La possibilità di interrompere la sincronizzazione in più fonti attendibili dipende dal metodo di configurazione utilizzato quando hai configurato la sincronizzazione da più fonti attendibili:

  • Se è stato utilizzato il metodo Controlla le origini in una fonte attendibile principale, un amministratore centrale è l'unico che può interrompere e riprendere la sincronizzazione.

  • Se è stato utilizzato il metodo Controlla una fonte attendibile con l'API Kubernetes, gli operatori delle applicazioni possono interrompere e riprendere la sincronizzazione dalle origini attendibili basate sullo spazio dei nomi su cui lavorano.

Interrompi sincronizzazione

Le seguenti sezioni mostrano come interrompere la sincronizzazione per la fonte attendibile principale e le fonti attendibili basate sullo spazio dei nomi. Per impedire al Gestore riconciliazione di ripristinare la modifica, devi prima arrestarlo eseguendo questi comandi:

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

I comandi eseguono le seguenti operazioni, in sequenza. Se un comando non va a buon fine, i comandi rimanenti non vengono eseguiti.

  1. Riduci il conteggio di replicas nel deployment dell'operatore di ConfigManagement a 0.
  2. Riduci il conteggio di replicas nel deployment di Reconciler Manager a 0.

Interrompi la sincronizzazione dalla fonte attendibile principale

Per interrompere la sincronizzazione di un cluster dalla fonte attendibile principale, un amministratore centrale può eseguire questo comando:

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

Questo comando riduce a 0 il conteggio di replicas nel deployment di root-reconciler.

Se devi interrompere la sincronizzazione su più cluster, esegui il comando precedente per ogni cluster.

Interrompi la sincronizzazione da una fonte attendibile basata sullo spazio dei nomi

Seleziona la scheda Metodo della fonte di verità principale o Metodo API Kubernetes per visualizzare le istruzioni pertinenti.

Metodo della fonte principale della verità

Se è stato utilizzato il metodo Controlla le origini dei nomi degli spazi dei nomi nella fonte attendibile principale, gli amministratori centrali possono eseguire i seguenti comandi per interrompere la sincronizzazione di un cluster da una fonte attendibile dello spazio dei nomi:

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

Il comando riduce a 0 il numero di repliche nel deployment ns-reconciler-NAMESPACE.

Se devi interrompere la sincronizzazione su più cluster, esegui il comando precedente per ogni cluster.

Metodo API Kubernetes

Se è stato utilizzato il metodo Controlla le origini basate sullo spazio dei nomi con l'API Kubernetes, gli operatori delle applicazioni possono interrompere la sincronizzazione di un cluster eseguendo questi comandi:

  1. Recupera la configurazione RepoSync e salvala per utilizzarla in un secondo momento quando vuoi riprendere la sincronizzazione:

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

    Sostituisci NAMESPACE con lo spazio dei nomi dell'oggetto RepoSync.

  2. Elimina la configurazione RepoSync:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    Questo comando attiva il Gestore riconciliazione per rimuovere il riconciliatore dello spazio dei nomi (ns-reconciler-NAMESPACE) da NAMESPACE e interrompe la sincronizzazione.

    Se devi interrompere la sincronizzazione su più cluster, esegui i comandi precedenti per ciascun cluster.

(Facoltativo) Impedire al webhook di ammissione di bloccare le deviazioni

Il webhook di ammissione di Config Sync è disabilitato per impostazione predefinita e puoi enable e disattivare la funzionalità di prevenzione delle deviazioni fornita dal webhook di ammissione utilizzando Google Cloud CLI o kubectl.

Interrompi la sincronizzazione da tutte le fonti attendibili

Per interrompere la sincronizzazione da tutte le fonti attendibili, incluse le origini attendibili e basate sullo spazio dei nomi, esegui questi comandi:

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

I comandi riducono a 0 il numero di tutti i pod di riconciliazione in esecuzione nello spazio dei nomi config-management-system e attendono che vengano eliminati tutti i pod di riconciliazione.replicas

Tutti i deployment dei riconciliatori sono ancora nel cluster, ma non sono disponibili repliche dei riconciliatori o dei processi responsabili della sincronizzazione, pertanto le configurazioni non vengono sincronizzate dalla fonte attendibile.

Riprendi sincronizzazione

Questa sezione mostra come riprendere la sincronizzazione per la fonte di riferimento principale e per le origini con ambito a livello di spazio dei nomi.

Riprendi la sincronizzazione dalla fonte attendibile principale

Per riprendere la sincronizzazione da una fonte attendibile principale, un amministratore centrale può eseguire il comando seguente:

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

Questo comando scala il deployment root-reconciler a 1 replica.

Riprendi la sincronizzazione da un'origine con ambito dello spazio dei nomi

Seleziona la scheda Metodo della fonte di verità principale o Metodo API Kubernetes per visualizzare le istruzioni pertinenti.

Metodo della fonte principale della verità

Se hai utilizzato il metodo Controlla le origini con ambito dello spazio dei nomi in una fonte di riferimento principale, un amministratore centrale può eseguire il seguente comando:

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

Questo comando scala il deployment ns-reconciler-NAMESPACE a 1 replica.

Metodo API Kubernetes

Se hai utilizzato il metodo Controlla le origini basate sullo spazio dei nomi con l'API Kubernetes, gli operatori delle applicazioni possono riprendere la sincronizzazione applicando nuovamente repo-sync.yaml, che contiene la configurazione RepoSync:

kubectl apply -f repo-sync.yaml

Questo comando attiva tne Reconciler Manager per creare un processo di riconciliazione dello spazio dei nomi e creare un deployment ns-reconciler-NAMESPACE.

Attiva e disattiva il webhook di ammissione

Il webhook di ammissione di Config Sync è disabilitato per impostazione predefinita e puoi enable e disattivare la funzionalità di prevenzione delle deviazioni fornita dal webhook di ammissione utilizzando Google Cloud CLI o kubectl.

Riprendi la sincronizzazione da tutte le fonti attendibili

Per riprendere la sincronizzazione da tutte le fonti attendibili, esegui questo comando:

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

Questo comando scala il deployment dell'operatore a 1 replica. L'operatore nota quindi che il deployment di Reconciler Manager è scalato in modo errato e lo scala al numero di repliche appropriato. Alla fine, Reconciler Manager scala i riconciliatori principali e i riconciliatori dello spazio dei nomi in base al numero di repliche corrispondente.

Passaggi successivi