Interrompere e riprendere la sincronizzazione delle configurazioni

In alcune situazioni, potrebbe essere necessario interrompere rapidamente la sincronizzazione di Config Sync dalle fonti attendibili. Uno scenario di questo tipo si verifica se qualcuno esegue il commit di una configurazione valida dal punto di vista sintattico ma errata nell'origine e vuoi limitarne gli effetti sui cluster in esecuzione mentre la configurazione viene rimossa o corretta.

Questa pagina è rivolta agli amministratori e agli operatori IT che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli utente e attività comuni di GKE. Google Cloud

Per i cluster con Config Sync versione 1.20.0 e successive o qualsiasi cluster con gli upgrade automatici abilitati, l'operatore ConfigManagement non viene eseguito sul cluster. Non è necessario interrompere manualmente la sincronizzazione seguendo i passaggi descritti in questa pagina. In alternativa, puoi utilizzare il campo spec.configSync.stopSyncing dell'interfaccia a riga di comando gcloud impostando true nel file di configurazione di Config Sync. Quindi, per riprendere la sincronizzazione, imposta il campo su false.

Se hai installato Config Sync manualmente utilizzando kubectl, non puoi utilizzare il campo stopSyncing. In questo caso, puoi seguire i passaggi descritti in questa pagina per interrompere manualmente la sincronizzazione. I passaggi manuali variano a seconda della versione di Config Sync installata sui cluster.

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 una singola fonte di verità e mostra come interrompere rapidamente la sincronizzazione e come riprenderla quando il problema è risolto. Per scoprire come interrompere la sincronizzazione per più di una fonte attendibile, consulta Interruzione e ripresa della sincronizzazione da più di una fonte attendibile.

Interrompere la sincronizzazione

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

1.20.0 o versioni successive

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

I comandi riducono a 0 il conteggio di replicas di tutti i deployment in esecuzione nello spazio dei nomi config-management-system. Il set esatto di deployment interessati varia in base alla versione del prodotto.

1.19.2 o versioni precedenti

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 a 0 il conteggio di replicas nel deployment dell'operatore ConfigManagement.
  2. Riduci il conteggio di replicas di tutti i deployment in esecuzione nello spazio dei nomi config-management-system a 0. Il set esatto di deployment interessati varia in base alla versione del prodotto.

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

Per verificare che tutti i processi siano stati interrotti, utilizza il seguente comando 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.

Riprendere la sincronizzazione

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

1.20.0 o versioni successive

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

Questo comando ridimensiona il deployment di Reconciler Manager a 1 replica. Il gestore di riconciliazione nota quindi che i pod nei deployment dello spazio dei nomi config-management-system sono scalati in modo errato e li scala al numero di repliche appropriato.

1.19.2 o versioni precedenti

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

Questo comando ridimensiona il deployment dell'operatore a 1 replica. L'operatore nota quindi che i pod nei deployment dello spazio dei nomi config-management-system vengono scalati in modo errato e li ridimensiona 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ù di una fonte attendibile

Questa sezione è dedicata a più fonti attendibili e mostra come interrompere temporaneamente e riprendere la sincronizzazione da più fonti attendibili. Per scoprire come interrompere la sincronizzazione per un'unica fonte attendibile, consulta Interruzione e ripresa della sincronizzazione da una fonte attendibile.

Solo un amministratore centrale può interrompere la sincronizzazione nell'origine principale della verità.

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

  • Se è stato utilizzato il metodo Controlla le origini in un'unica origine attendibile, solo un amministratore centrale può interrompere e riprendere la sincronizzazione.

  • Se è stato utilizzato il metodo Controllare una sorgente attendibile con l'API Kubernetes, gli operatori delle applicazioni possono interrompere e riprendere la sincronizzazione dalle sorgenti attendibili con ambito spazio dei nomi su cui lavorano.

Interrompere la sincronizzazione

Le sezioni seguenti mostrano come interrompere la sincronizzazione per l'origine principale di riferimento e le origini di riferimento con ambito spazio dei nomi. Per impedire a Reconciler Manager di ripristinare la modifica, devi prima arrestarlo eseguendo i seguenti comandi:

1.20.0 o versioni successive

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 riducono a 0 il conteggio di replicas nel deployment di Reconciler Manager.

1.19.2 o versioni precedenti

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 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 a 0 il conteggio di replicas nel deployment dell'operatore ConfigManagement.
  2. Riduci il conteggio di replicas nel deployment di Reconciler Manager a 0.

Interrompere 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 il conteggio di replicas nel root-reconciler Deployment a 0.

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

Interrompere la sincronizzazione dalla fonte attendibile con ambito a livello di spazio dei nomi

Seleziona la scheda Metodo di origine principale di riferimento o Metodo API Kubernetes per visualizzare le istruzioni pertinenti.

Metodo della fonte attendibile principale

Se è stato utilizzato il metodo Controlla le origini attendibili dello spazio dei nomi nell'origine attendibile principale, gli amministratori centrali possono eseguire i seguenti comandi per impedire la sincronizzazione di un cluster da un'origine 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 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 di 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 di RepoSync:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    Questo comando attiva Reconciler Manager 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 ogni cluster.

Impedisci al webhook di ammissione di bloccare le derive (facoltativo)

Il webhook di ammissione di Config Sync è disattivato per impostazione predefinita e puoi attivare e disattivare la funzionalità di prevenzione della deriva fornita dal webhook di ammissione utilizzando Google Cloud CLI o kubectl.

Interrompere la sincronizzazione da tutte le fonti attendibili

Per interrompere la sincronizzazione da tutte le fonti attendibili, inclusa la fonte attendibile principale e le fonti con ambito spazio dei nomi, esegui i seguenti 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 il conteggio replicas di tutti i pod di riconciliazione in esecuzione nello spazio dei nomi config-management-system a 0 e attendono l'eliminazione di tutti i pod di riconciliazione.

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

Riprendere la sincronizzazione

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

Riprendere la sincronizzazione dalla fonte attendibile principale

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

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

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

Riprendere la sincronizzazione da un'origine con ambito spazio dei nomi

Seleziona la scheda Metodo di origine principale di riferimento o Metodo API Kubernetes per visualizzare le istruzioni pertinenti.

Metodo della fonte attendibile principale

Se hai utilizzato il metodo Controlla le origini con ambito spazio dei nomi in un'origine principale attendibile, 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 Controllare le origini con ambito namespace con l'API Kubernetes, gli operatori delle applicazioni possono riprendere la sincronizzazione riapplicando repo-sync.yaml che contiene la configurazione RepoSync:

kubectl apply -f repo-sync.yaml

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

Attivare e disattivare il webhook di ammissione

Il webhook di ammissione di Config Sync è disattivato per impostazione predefinita e puoi attivare e disattivare la funzionalità di prevenzione della deriva fornita dal webhook di ammissione utilizzando Google Cloud CLI o kubectl.

Riprendere la sincronizzazione da tutte le fonti attendibili

1.20.0 o versioni successive

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

Questo comando ridimensiona il deployment di Reconciler Manager a 1 replica. Il gestore di riconciliazione scala quindi il riconciliatore principale e i riconciliatori dello spazio dei nomi al numero di repliche corrispondente.

1.19.2 o versioni precedenti

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

Questo comando ridimensiona 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 ridimensiona il riconciliatore principale e i riconciliatori dello spazio dei nomi in base al numero di repliche corrispondente.

Passaggi successivi