Detén y reanuda la sincronización de los archivos de configuración

En algunas situaciones, es posible que tengas que impedir que Anthos Config Management sincronice los archivos de configuración de tu repositorio. Una de ellas es si se confirma una configuración sintácticamente válida pero incorrecta en el repositorio, y deseas limitar sus efectos en los clústeres en ejecución mientras se quita o corrige la configuración.

En este tema, se muestran repositorios únicos y se muestra cómo detener la sincronización con rapidez y cómo reanudar la sincronización cuando se soluciona el problema. Si deseas obtener más información sobre cómo detener la sincronización para varios repositorios, consulta Sincroniza desde varios repositorios.

Requisitos previos

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

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

Detén la sincronización

A fin de detener la sincronización, ejecuta los siguientes comandos, que se proporcionan como uno solo para tu 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. Reduce el recuento de replicas a 0 en la implementación del operador de Config Management.
  2. Reduce el recuento de replicas a 0 en la implementación del sincronizador.
  3. Reduce el recuento de replicas a 0 en la implementación de git-importer.

Todas las implementaciones aún se encuentran en el clúster, pero no hay réplicas del operador, de git-importer o del 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 necesitas detener 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, puedes crear una secuencia de comandos que use el comando 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 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, ejecuta 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 observa que las implementaciones de git-importer y del sincronizador se escalan incorrectamente y también las escala a 1 réplica.

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

Si necesitas 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, puedes 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

Próximos pasos