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.
- Die Anzahl von
replicas
im Config Sync Operator Deployment auf 0 reduzieren. - Die Anzahl von
replicas
im Syncer-Deployment auf 0 reduzieren. - 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