Arrêter et reprendre les configurations de synchronisation

Dans certains cas, vous devrez peut-être rapidement arrêter la synchronisation des configurations de votre dépôt dans Anthos Config Management. Par exemple, si une personne effectue dans le dépôt un commit d'une configuration valide d'un point de vue syntaxique mais incorrecte, vous souhaiterez certainement limiter ses effets sur vos clusters en cours d'exécution le temps que la configuration soit supprimée ou corrigée.

Cette rubrique explique comment arrêter la synchronisation rapidement et comment reprendre la synchronisation une fois le problème résolu.

Prérequis

L'utilisateur exécutant les commandes décrites dans cette rubrique doit disposer des autorisations Kubernetes RBAC suivantes dans les espaces de noms kube-system et config-management-system sur tous les clusters pour lesquels vous souhaitez arrêter la synchronisation :

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

Arrêter la synchronisation

Pour arrêter la synchronisation, exécutez les commandes ci-dessous. Nous les présentons ici sous la forme d'une seule commande pour plus de commodité, mais vous pouvez également les exécuter séparément :

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

Les commandes effectuent les actions suivantes, dans l'ordre. Si une commande échoue, les autres commandes ne s'exécutent pas.

  1. Réduit le nombre de replicas du déploiement de l'opérateur Config Management à 0.
  2. Réduit le nombre de replicas du déploiement du synchroniseur à 0.
  3. Réduit le nombre de replicas du déploiement git-importer à 0.

Tous les déploiements sont toujours dans le cluster, mais aucune instance dupliquée de l'opérateur, de git-importer ou du synchroniseur n'est disponible. Les configurations ne sont donc pas synchronisées à partir du dépôt.

Arrêter la synchronisation sur tous les clusters enregistrés

Si vous devez arrêter la synchronisation sur tous les clusters enregistrés dans un même projet Google Cloud plutôt que de procéder cluster par cluster, vous pouvez créez un script qui utilise la commande nomos status pour obtenir la liste de tous les clusters enregistrés. Le script crée ensuite un contexte kubectl pour chaque cluster à l'aide de la commande gcloud container clusters get-credentials et exécute les commandes ci-dessus sur chacun d'eux. Voici un exemple simple d'un tel script :

#!/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

Reprendre la synchronisation

Pour reprendre la synchronisation, exécutez la commande suivante :

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

Cette commande effectue le scaling du déploiement de l'opérateur pour qu'il dispose d'une instance dupliquée. L'opérateur remarque ensuite que les déploiements du synchroniseur et de git-importer ne sont pas correctement mis à l'échelle et procède à un scaling pour qu'ils disposent également d'une instance dupliquée.

Reprendre la synchronisation sur tous les clusters enregistrés

Si vous devez reprendre la synchronisation sur tous les clusters enregistrés dans un même projet Google Cloud plutôt que de procéder cluster par cluster, vous pouvez créez un script qui utilise la commande nomos status pour obtenir la liste de tous les clusters enregistrés. Le script crée ensuite un contexte kubectl pour chaque cluster à l'aide de la commande gcloud container clusters get-credentials et exécute la commande ci-dessus sur chacun d'eux. Voici un exemple simple d'un tel script :

#!/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

Et ensuite ?