Interrompere e riprendere la sincronizzazione delle configurazioni

In alcuni casi, potrebbe essere necessario interrompere rapidamente la sincronizzazione delle configurazioni da Config Sync dalla tua fonte attendibile. Uno di questi scenari si verifica quando qualcuno esegue il commit di una configurazione sintatticamente valida, 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 IT e agli operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica di base. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise. Google Cloud

Per i cluster su Config Sync versione 1.20.0 e successive o per qualsiasi cluster con gli upgrade automatici abilitati, l'operatore ConfigManagement non viene eseguito sul cluster. Non è necessario interrompere manualmente la sincronizzazione seguendo i passaggi indicati in questa pagina. In alternativa, puoi utilizzare spec.configSync.stopSyncing campo 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 attendibile e mostra come interrompere rapidamente la sincronizzazione e come riprendere la sincronizzazione una volta risolto il problema. Per scoprire come interrompere la sincronizzazione per più di una fonte attendibile, consulta Interrompere e riprendere la sincronizzazione da più di una fonte attendibile.

Interrompere la sincronizzazione

Per interrompere la sincronizzazione per un singolo cluster, esegui il seguente 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 replicas di tutti i deployment in esecuzione nello spazio dei nomi config-management-system. L'insieme esatto di implementazioni interessato 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 a 0 il conteggio replicas di tutti i deployment in esecuzione nello spazio dei nomi config-management-system. L'insieme esatto di implementazioni interessato varia in base alla versione del prodotto.

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

Per verificare che tutte le procedure siano state interrotte, 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 ogni cluster.

Ripristinare la sincronizzazione

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

1.20.0 o versioni successive

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

Questo comando esegue la scalabilità del deployment del gestore del riconciliatore a 1 replica. Il gestore del riconciliatore nota quindi che i pod nei deployment dello spazio dei nomi config-management-system sono scalati in modo errato e li scala in base 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 esegue il ridimensionamento del deployment dell'operatore a 1 replica. L'Operatore nota quindi che i pod nei deployment dello spazio dei nomi config-management-system sono 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ù di una fonte attendibile

La sezione è dedicata a più di una fonte attendibile e mostra come interrompere temporaneamente e riprendere la sincronizzazione da più di una fonte attendibile. Per scoprire come interrompere la sincronizzazione per un'unica fonte attendibile, consulta Interrompere e riprendere la sincronizzazione da una fonte attendibile.

Solo un amministratore centrale può interrompere la sincronizzazione nella source of truth principale.

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 Controllare 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 sorgente di dati con l'API Kubernetes, gli operatori delle applicazioni possono interrompere e riprendere la sincronizzazione dalle sorgenti di dati basate sul nome del namespace su cui lavorano.

Interrompere la sincronizzazione

Le sezioni seguenti mostrano come interrompere la sincronizzazione per l'origine della verità principale e per le origini della verità basate sullo spazio dei nomi. Per impedire a Reconciler Manager di annullare la variazione, devi prima interrompere Reconciler Manager 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 a 0 il conteggio di replicas nel deployment di Reconciler Manager.

Interrompere la sincronizzazione dalla fonte attendibile principale

Per interrompere la sincronizzazione di un cluster dall'origine della verità principale, un amministratore centrale può eseguire il seguente 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 basata sullo spazio dei nomi

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

Metodo dell'origine attendibile principale

Se è stato utilizzato il metodo Controlla le sorgenti di dati dello spazio dei nomi nella sorgente di dati principale, gli amministratori centrali possono eseguire i seguenti comandi per interrompere la sincronizzazione di un cluster da una sorgente di dati 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 dell'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 i seguenti 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 di RepoSync:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    Questo comando attiva il gestore del riconciliatore per rimuovere il riconciliatore del nome di spazio (ns-reconciler-NAMESPACE) da NAMESPACE e interrompe la sincronizzazione.

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

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

Il webhook di ammissione di Config Sync è disabilitato 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 basate sullo 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 a 0 il conteggio replicas di tutti i pod di riconciliazione in esecuzione nello spazio dei nomi config-management-system e aspettano che tutti i pod di riconciliazione vengano eliminati.

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 di riferimento.

Ripristinare la sincronizzazione

Questa sezione mostra come riprendere la sincronizzazione per l'origine della verità principale e per le origini basate sullo spazio dei nomi.

Ripristinare la sincronizzazione dall'origine 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 esegue il ridimensionamento del deployment root-reconciler a 1 replica.

Ripristinare la sincronizzazione da un'origine basata sullo spazio dei nomi

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

Metodo dell'origine attendibile principale

Se hai utilizzato il metodo Controllare le origini basate sullo spazio dei nomi in una sorgente attendibile principale, un amministratore centrale può eseguire il seguente comando:

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

Questo comando esegue il ridimensionamento del deployment ns-reconciler-NAMESPACE a 1 replica.

Metodo dell'API Kubernetes

Se hai utilizzato il metodo Controllare le origini basate sul nome del namespace 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 Reconciler Manager per creare un processo di riconciliazione dello spazio dei nomi e un deployment ns-reconciler-NAMESPACE.

Attivare e disattivare l'webhook di ammissione

Il webhook di ammissione di Config Sync è disabilitato 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.

Ripristinare 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 esegue la scalabilità del deployment del gestore del riconciliatore a 1 replica. Il gestore del riconciliatore esegue la scalabilità del riconciliatore principale e dei riconciliatori dello spazio dei nomi in base 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 esegue il ridimensionamento del deployment dell'operatore a 1 replica. L'operatore nota quindi che il deployment di Reconciler Manager è scalato in modo errato e lo scala in base al numero di repliche appropriato. Alla fine, il gestore del riconciliatore esegue la scalabilità del riconciliatore principale e dei riconciliatori dello spazio dei nomi in base al numero di repliche corrispondente.

.

Passaggi successivi