Arrêter et reprendre la synchronisation des configurations
Dans certains cas, vous devrez peut-être rapidement arrêter la synchronisation des configurations de votre dépôt dans Config Sync. 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.
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
(obligatoire uniquement pour les versions antérieures à 1.9.0) 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"]
Configurer une variable d'espace de noms config-management-operator
L'opérateur config-management-operator se trouve dans l'espace de noms kube-system
pour les versions d'Anthos Config Management antérieures à la version 1.9.0. Dans Anthos Config Management 1.9.0, config-management-operator a été déplacé dans l'espace de noms config-management-system
. Avant d'exécuter l'une des commandes suivantes, définissez une variable d'environnement pour indiquer l'espace de noms spécifique à la version.
Pour Anthos Config Management versions 1.9.0 ou ultérieures :
export OPERATOR_NAMESPACE=config-management-system
Pour les versions antérieures à 1.9.0 :
export OPERATOR_NAMESPACE=kube-system
Arrêter et reprendre la synchronisation à partir de dépôts uniques
Cette section concerne les dépôts uniques. Elle explique comment arrêter la synchronisation rapidement et comment reprendre la synchronisation une fois le problème résolu. Pour savoir comment arrêter la synchronisation de plusieurs dépôts, consultez la section Arrêter et reprendre la synchronisation à partir de plusieurs dépôts.
Arrêter la synchronisation
Pour arrêter la synchronisation d'un seul cluster, exécutez les commandes suivantes, qui sont fournies en tant que commande unique pour plus de commodité, mais qui peuvent également être exécutées séparément :
kubectl scale -n $OPERATOR_NAMESPACE deployment config-management-operator --replicas=0 \ && kubectl wait -n $OPERATOR_NAMESPACE --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
Les commandes effectuent les actions suivantes, dans l'ordre. Si une commande échoue, les autres commandes ne s'exécutent pas.
- Réduit le nombre de
replicas
du déploiement de l'opérateur Config Management à 0. - Réduit le nombre de
replicas
de tous les pods exécutés dans l'espace de nomsconfig-management-system
à 0. L'ensemble exact de pods concernés varie selon la version du produit.
Tous les déploiements sont toujours dans le cluster, mais aucune instance dupliquée de l'opérateur ni aucun des processus responsables de la synchronisation n'est disponible. Les configurations ne sont donc pas synchronisées à partir du dépôt.
Si vous devez arrêter la synchronisation sur plusieurs clusters, exécutez les commandes précédentes pour chaque cluster.
Reprendre la synchronisation
Pour reprendre la synchronisation pour un seul cluster, exécutez la commande suivante :
kubectl -n $OPERATOR_NAMESPACE 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 pods de
l'espace de noms config-management-system
sont déployés de manière incorrecte et
les adaptent au bon nombre d'instances dupliquées.
Si vous devez reprendre la synchronisation sur plusieurs clusters, exécutez la commande précédente pour chaque cluster.
Arrêter et reprendre la synchronisation à partir de plusieurs dépôts
Cette section concerne plusieurs dépôts. Elle explique comment arrêter temporairement la synchronisation et comment la reprendre à partir de plusieurs dépôts. Pour savoir comment arrêter la synchronisation pour des dépôts uniques, consultez la section Arrêter et reprendre la synchronisation à partir de dépôts uniques.
Seul un administrateur central peut arrêter la synchronisation dans le dépôt racine.
La possibilité d'arrêter la synchronisation dans les dépôts d'espaces de noms dépend de la méthode de configuration utilisée pour ceux-ci.
Si la méthode Contrôler les dépôts d'espaces de noms dans le dépôt racine a été utilisée, un administrateur central est le seul à pouvoir arrêter et reprendre la synchronisation.
Si la méthode Contrôler les dépôts d'espaces de noms avec l'API Kubernetes a été utilisée, les opérateurs d'application peuvent arrêter et reprendre la synchronisation à partir des dépôts d'espaces de noms sur lesquels ils travaillent.
Arrêter la synchronisation
Les sections suivantes expliquent comment arrêter la synchronisation du dépôt racine et des dépôts d'espaces de noms. Pour empêcher le gestionnaire de rapprochement d'annuler la modification, vous devez d'abord arrêter le gestionnaire de rapprochement en exécutant les commandes suivantes :
kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=0 \ && kubectl wait -n $OPERATOR_NAMESPACE --for=delete pods -l k8s-app=config-management-operator --timeout=60s \ && kubectl scale deployment -n config-management-system reconciler-manager --replicas=0 \ && kubectl wait -n config-management-system --for=delete pods -l app=reconciler-manager
Les commandes effectuent les actions suivantes, dans l'ordre. Si une commande échoue, les autres commandes ne s'exécutent pas.
- Réduit le nombre de
replicas
du déploiement de l'opérateur Config Management à 0. - Réduit le nombre de
replicas
du déploiement du gestionnaire de rapprochement à 0.
Arrêter la synchronisation à partir du dépôt racine
Pour arrêter la synchronisation d'un cluster à partir du dépôt racine, un administrateur central peut exécuter la commande suivante :
kubectl -n config-management-system scale deployment root-reconciler --replicas=0
Cette commande réduit à 0 le nombre de replicas
dans le déploiement de root-reconciler
.
Si vous devez arrêter la synchronisation sur plusieurs clusters, exécutez la commande précédente pour chaque cluster.
Arrêter la synchronisation à partir des dépôts d'espaces de noms
Sélectionnez l'onglet Méthode du dépôt racine ou Méthode de l'API Kubernetes pour afficher les instructions correspondantes.
Méthode du dépôt racine
Si la méthode Contrôler les dépôts d'espaces de noms dans le dépôt racine a été utilisée, les administrateurs centraux peuvent effectuer les commandes suivantes pour arrêter la synchronisation à partir du dépôt d'un espace de noms :
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0
Cette commande réduit à 0 le nombre d'instances dupliquées du déploiement ns-reconciler-NAMESPACE
.
Si vous devez arrêter la synchronisation sur plusieurs clusters, exécutez la commande précédente pour chaque cluster.
Méthode de l'API Kubernetes
Si la méthode Contrôler les dépôts d'espaces de noms avec l'API Kubernetes a été utilisée, les opérateurs d'application peuvent arrêter la synchronisation d'un cluster en exécutant les commandes suivantes :
Récupérez la configuration
RepoSync
et enregistrez-la pour l'utiliser plus tard lorsque vous souhaiterez reprendre la synchronisation :kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
Remplacez
NAMESPACE
par l'espace de noms de votre objet RepoSync.Supprimez la configuration
RepoSync
:kubectl -n NAMESPACE delete reposyncs repo-sync
Cette commande déclenche le gestionnaire de rapprochement pour supprimer le rapprochement de l'espace de noms (
ns-reconciler-NAMESPACE
) de NAMESPACE et arrête la synchronisation.Si vous devez arrêter la synchronisation sur plusieurs clusters, exécutez les commandes précédentes pour chaque cluster.
Empêcher le webhook d'admission de bloquer les dérives (facultatif)
Avant la version 1.10.0 d'Anthos Config Management, pour empêcher Config Sync d'appliquer la protection contre les dérives, après avoir arrêté les rapprochements, vous pouvez arrêter le webhook d'admission en exécutant la commande suivante :
kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io
Cette étape est facultative et n'est requise que lorsque vous devez apporter des modifications incompatibles aux ressources gérées du cluster. Cela nécessite d'abord d'arrêter le rapprochement racine. Dans le cas contraire, le rapprochement racine tente de générer les configurations du webhook après la suppression.
Arrêter la synchronisation à partir de tous les dépôts
Pour arrêter la synchronisation à partir de tous les dépôts, y compris le dépôt racine et les dépôts d'espaces de noms, exécutez les commandes suivantes :
kubectl scale deployment -n config-management-system -l app=reconciler --replicas=0 \ && kubectl wait -n config-management-system --for=delete pods -l app=reconciler
Les commandes réduisent à zéro le nombre de replicas
de tous les pods de rapprochement exécutés dans l'espace de noms config-management-system
, et attendent jusqu'à ce que tous les pods de rapprochement soient supprimés.
Tous les déploiements sont toujours dans le cluster, mais aucune instance dupliquée de l'opérateur ni aucun des processus responsables de la synchronisation n'est disponible. Les configurations ne sont donc pas synchronisées à partir du dépôt.
Reprendre la synchronisation
Cette section explique comment reprendre la synchronisation du dépôt racine et des dépôts d'espaces de noms.
Reprendre la synchronisation à partir du dépôt racine
Pour reprendre la synchronisation à partir d'un dépôt racine, un administrateur central peut exécuter la commande suivante :
kubectl -n config-management-system scale deployment root-reconciler --replicas=1
Cette commande effectue le scaling du déploiement root-reconciler
pour qu'il dispose d'une instance dupliquée.
Reprendre la synchronisation à partir d'un dépôt d'espaces de noms
Sélectionnez l'onglet Méthode du dépôt racine ou Méthode de l'API Kubernetes pour afficher les instructions correspondantes.
Méthode du dépôt racine
Si vous avez utilisé la méthode Contrôler les dépôts d'espaces de noms dans le dépôt racine, un administrateur central peut exécuter la commande suivante :
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1
Cette commande effectue le scaling du déploiement "ns-reconciler-NAMESPACE" pour qu'il dispose d'une instance dupliquée.
Méthode de l'API Kubernetes
Si vous avez utilisé la méthode Contrôler les dépôts d'espaces de noms avec l'API Kubernetes, les opérateurs d'application peuvent reprendre la synchronisation en appliquant à nouveau repo-sync.yaml
, qui contient la configuration RepoSync
:
kubectl apply -f repo-sync.yaml
Cette commande déclenche le gestionnaire de rapprochement pour créer un processus de rapprochement des espaces de noms et un déploiement ns-reconciler-NAMESPACE
.
Réactiver le webhook d'admission
Avant la version 1.10.0 d'Anthos Config Management, les configurations de webhook sont générées automatiquement après la reprise du rapprochement racine. Pour vérifier qu'elles ont bien été générées, exécutez la commande suivante :
kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io
Reprendre la synchronisation à partir de tous les dépôts
Pour reprendre la synchronisation à partir de tous les dépôts, exécutez la commande suivante :
kubectl -n $OPERATOR_NAMESPACE 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 le déploiement du gestionnaire de rapprochement n'est pas correctement mis à l'échelle et qu'il le met à l'échelle pour le nombre d'instances dupliquées approprié. Le gestionnaire de rapprochement procède finalement au scaling des rapprochements racine et d'espace de noms avec le nombre d'instances dupliquées correspondant.
# scale the root-reconciler Deployment to 1 replica.
kubectl -n config-management-system scale deployment root-reconciler --replicas=1
# scale the ns-reconciler-NAMESPACE Deployment to 1 replica.
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1