Detén temporalmente las configuraciones de sincronización

En algunas situaciones, es posible que deba detener rápidamente la sincronización de Anthos Config Management de las configuraciones de su repositorio. Uno de estos escenarios es si alguien confirma una configuración sintácticamente válida pero incorrecta al repositorio, y desea limitar sus efectos en los clústeres en ejecución mientras la configuración se elimina o repara.

Este tema muestra cómo detener la sincronización rápidamente y cómo reanudar la sincronización cuando se soluciona el problema.

Requisitos

El usuario que ejecuta los comandos que se tratan en este tema necesita los siguientes permisos Kubernetes RBAC en los espacios de nombres kube-system y config-management-system en todos los clústeres donde desea detener la sincronización:

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

Detén la sincronización

Para detener la sincronización, ejecute los siguientes comandos, que se proporcionan como un solo comando para su comodidad, pero también se pueden ejecutar por separado:

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

Los comandos hacen lo siguiente, en secuencia. Si un comando falla, los comandos restantes no se ejecutan.

  1. Reduzca el recuento de replicas en la implementación del operador de administración de configuración a 0.
  2. Reduzca el recuento replicas en la implementación del sincronizador a 0.
  3. Reduzca el recuento replicas en la implementación del git-importer a 0.

Todas las implementaciones todavía están en el clúster, pero no hay réplicas del Operador, git-importer o sincronizador disponibles, por lo que las configuraciones no se sincronizan desde el repositorio.

Detén la sincronización en todos los clústeres inscritos

Si necesita detener la sincronización en todos los clústeres inscritos en un solo proyecto de Google Cloud, en lugar de un solo clúster a la vez, puede crear una secuencia de comandos que use el comando nomos status para obtener la lista de todos los grupos inscritos. Luego, la secuencia de comandos crea un contexto kubectl para cada clúster utilizando el comando gcloud container clusters get-credentials y ejecuta los comandos anteriores en cada uno de ellos. El siguiente es un ejemplo básico de tal secuencia de comandos:

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

Reanuda la sincronización

Para reanudar la sincronización, ejecute el siguiente comando:

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

Este comando escala la implementación del operador a 1 réplica. Luego, el operador se da cuenta de que las implementaciones del sincronizador y Git-Importer se escalan incorrectamente y también los escala a 1 réplica.

Reanuda la sincronización en todos los clústeres inscritos

Si necesita reanudar la sincronización en todos los clústeres inscritos en un proyecto de Google Cloud, en lugar de un solo clúster a la vez, puede crear una secuencia de comandos que use nomos status para obtener la lista de todos los clústeres inscritos. Luego, la secuencia de comandos crea un contexto kubectl para cada clúster con el comando gcloud container clusters get-credentials y ejecuta el comando anterior en cada uno de ellos. El siguiente es un ejemplo básico de tal secuencia de comandos:

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

¿Qué sigue?