Synchronisierung von Konfigurationen anhalten und fortsetzen

In einigen Situationen müssen Sie Config Sync möglicherweise schnell daran hindern, Konfigurationen aus Ihrem Repository zu synchronisieren. Ein solches Szenario wäre, wenn jemand eine syntaktisch gültige, aber falsche Konfiguration an das Repository sendet und Sie deren Auswirkungen auf Ihre laufenden Cluster einschränken möchten, während die Konfiguration entfernt oder korrigiert wird.

Dieses Thema bezieht sich auf einzelne Repositories. Es zeigt Ihnen, wie Sie die Synchronisierung schnell beenden und die Synchronisierung fortsetzen können, wenn das Problem behoben wurde. Weitere Informationen dazu finden Sie unter Synchronisierung aus mehreren Repositories.

Vorbereitung

Der Nutzer, der die hier beschriebenen Befehle ausführt, benötigt die folgenden Kubernetes-RBAC-Berechtigungen in den Namespaces kube-system und config-management-system für alle Cluster, in denen Sie die Synchronisierung anhalten möchten:

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

Synchronisierung anhalten

Zum Anhalten der Synchronisierung führen Sie die folgenden Befehle aus, die hier zwar als ein einzelner Befehl angegeben sind, aber auch separat ausgeführt werden können:

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

Die Befehle führen nacheinander folgende Schritte aus. Wenn ein Befehl fehlschlägt, werden die verbleibenden Befehle nicht ausgeführt.

  1. Die Anzahl von replicas im Config Sync Operator Deployment auf 0 reduzieren.
  2. Die Anzahl von replicas im Syncer-Deployment auf 0 reduzieren.
  3. Die Anzahl von replicas im git-importer-Deployment auf 0 reduzieren.

Alle Deployments befinden sich noch im Cluster, aber es sind keine Replikate in den Operator-, git-importer- oder Syncer-Deployments verfügbar, sodass keine Konfigurationen aus dem Repository synchronisiert werden.

Synchronisierung für alle registrierten Cluster anhalten

Wenn Sie die Synchronisierung für alle registrierten Cluster in einem einzelnen Google Cloud-Projekt und nicht nur für einen Cluster anhalten müssen, können Sie ein Skript erstellen, das mit dem Befehl nomos status die Liste aller registrierten Cluster abruft. Das Skript erstellt dann mit dem Befehl gcloud container clusters get-credentials für jeden Cluster einen kubectl-Kontext und führt die obigen Befehle für jeden Cluster aus. Dieses vereinfachte Beispiel zeigt ein solches Skript:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
  && kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
  && kubectl -n config-management-system scale deployment syncer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=syncer \
  && kubectl -n config-management-system scale deployment git-importer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=git-importer
done

Synchronisierung fortsetzen

Führen Sie den folgenden Befehl aus, um die Synchronisierung fortzusetzen:

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

Mit diesem Befehl wird das Operator-Deployment auf ein Replikat skaliert. Der Operator stellt dann fest, dass die Syncer- und git-importer-Deployments falsch skaliert sind, und skaliert sie ebenfalls auf ein Replikat.

Synchronisierung für alle registrierten Cluster fortsetzen

Wenn die Synchronisierung für alle registrierten Cluster in einem Google Cloud-Projekt und nicht nur für einen Cluster fortgesetzt werden soll, können Sie ein Skript erstellen, das mit nomos status eine Liste aller registrierten Cluster abruft. Das Skript erstellt dann mit dem Befehl gcloud container clusters get-credentials für jeden Cluster einen kubectl-Kontext und führt den obigen Befehl für jeden Cluster aus. Dieses vereinfachte Beispiel zeigt ein solches Skript:

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

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

done

Nächste Schritte