Interrompi e riprendi la sincronizzazione delle configurazioni

In alcune situazioni, potrebbe essere necessario interrompere rapidamente la sincronizzazione delle configurazioni a Config Sync dalla tua fonte attendibile. Uno di questi scenari è se qualcuno esegue il commit di una configurazione sintattica valida ma errata nell'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 RBAC di Kubernetes 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 è dedicata a un'unica fonte attendibile e illustra come interrompere la sincronizzazione rapidamente e come riprenderla dopo aver risolto il problema. Per informazioni su come interrompere la sincronizzazione per più origini dati attendibili, consulta l'articolo su come interrompere e riprendere la sincronizzazione da più origini dati.

Interrompi sincronizzazione

Per interrompere la sincronizzazione per un singolo cluster, esegui questi comandi, che vengono forniti come singolo comando per comodità, 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 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 si trovano ancora nel cluster, ma non sono disponibili repliche dell'operatore o dei processi responsabili della sincronizzazione, quindi le configurazioni non vengono sincronizzate dalla fonte attendibile.

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

kubectl get -n config-management-system deployment

Se devi interrompere la sincronizzazione su più cluster, esegui i comandi precedenti per ogni 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 poi che i pod nello spazio dei nomi config-management-system dei deployment non vengono scalati correttamente e li scala 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ù di una fonte di riferimento e mostra come interrompere temporaneamente e riprendere la sincronizzazione da più fonti. Per informazioni su come interrompere la sincronizzazione per un'unica fonte attendibile, consulta l'articolo su come 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 durante la configurazione della sincronizzazione da più fonti attendibili:

  • Se è stato utilizzato il metodo Controlla le origini in una fonte attendibile, l'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 fonti di riferimento basate sullo spazio dei nomi su cui lavorano.

Interrompi sincronizzazione

Le sezioni seguenti mostrano come interrompere la sincronizzazione per la fonte attendibile principale e quelle basate sullo spazio dei nomi. Per impedire a Gestore riconciliatore 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 ConfigManagement a 0.
  2. Riduci il numero di replicas nel deployment di Reconciler Manager a 0.

Interrompi la sincronizzazione dalla fonte attendibile

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 il conteggio di replicas nel deployment root-reconcilera 0.

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

Interrompi la sincronizzazione da una fonte attendibile con ambito dello spazio dei nomi

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

Metodo della fonte di riferimento principale

Se è stato utilizzato il metodo Controlla le origini attendibili dello spazio dei nomi nella fonte principale di riferimento, gli amministratori centrali possono eseguire i comandi seguenti 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 il numero di repliche nel deployment ns-reconciler-NAMESPACE a 0.

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 con ambito dello spazio dei nomi con l'API Kubernetes, gli operatori delle applicazioni possono interrompere la sincronizzazione di un cluster eseguendo i seguenti comandi:

  1. Recupera la configurazione RepoSync e salvala per utilizzarla in un secondo momento quando vorrai 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 riconciliatore per rimuovere il riconciliatore dello spazio dei nomi (ns-reconciler-NAMESPACE) da NAMESPACE e interrompere la sincronizzazione.

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

(Facoltativo) Impedisci 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 della deviazione 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 origini attendibili, incluse quelle con ambito basato su spazio dei nomi e quelle principali, 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 replicas di tutti i pod di riconciliazione in esecuzione nello spazio dei nomi config-management-system e attendono l'eliminazione di tutti i pod del riconciliazione.

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

Riprendi sincronizzazione

Questa sezione mostra come riprendere la sincronizzazione per l'origine attendibile principale e per le origini con ambito a livello di spazio dei nomi.

Riprendi la sincronizzazione dalla fonte attendibile

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

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 il Metodo della fonte di attendibilità principale o la scheda Metodo API Kubernetes per visualizzare le istruzioni pertinenti.

Metodo della fonte di riferimento principale

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

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

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

Metodo API Kubernetes

Se hai utilizzato il metodo Controlla le origini con ambito dello 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 il gestore della riconciliazione in modo che crei un processo di riconciliazione dello spazio dei nomi e crei 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 della deviazione 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 poi che il deployment di Gestore riconciliazione non è correttamente scalato e lo ridimensiona al numero di repliche appropriato. Alla fine, il Gestore riconciliatore scala i riconciliatori dei riconciliatori radice e dello spazio dei nomi in base al numero di repliche corrispondente.

Passaggi successivi