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

En algunas situaciones, es posible que debas detener rápidamente el Sincronizador de configuración de tu fuente de información. Una de esas situaciones es si alguien confirma una configuración sintácticamente válida pero incorrecta en la fuente, y deseas limitar sus efectos en tus clústeres en ejecución mientras se quita o corrige la configuración.

Requisitos previos

Para usar los comandos de este documento, necesitas los siguientes permisos de RBAC de Kubernetes en los espacios de nombres 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"]

Cómo detener y reanudar la sincronización desde una fuente de información

En esta sección, se proporciona información sobre una sola fuente de información y se muestra cómo detener la sincronización rápidamente y reanudar la sincronización cuando se soluciona el problema. Para obtener información sobre cómo detener la sincronización de más de una fuente de información, consulta Cómo detener y reanudar la sincronización desde más de una fuente de información.

Detén la sincronización

A fin de detener la sincronización de un solo clúster, ejecuta los siguientes comandos, que se proporcionan como uno solo para tu comodidad, pero también se pueden ejecutar por separado:

kubectl scale -n config-management-system deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --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

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 ConfigManagement.
  2. Reduce a 0 el recuento de replicas de todas las implementaciones que se ejecutan en el espacio de nombres config-management-system. El conjunto exacto de Deployments afectados varía según la versión del producto.

Todas las implementaciones aún se encuentran en el clúster, pero no hay réplicas del operador ni de ninguno de los procesos responsables de la sincronización disponibles, por lo que los archivos de configuración no se sincronizan desde la fuente de información.

Para verificar que todos los procesos se hayan detenido, usa el siguiente comando y verifica que todas las implementaciones tengan cero réplicas:

kubectl get -n config-management-system deployment

Si necesitas detener la sincronización en varios clústeres, ejecuta los comandos anteriores para cada uno.

Reanuda la sincronización

Para reanudar la sincronización de un solo clúster, ejecuta el siguiente comando:

kubectl -n config-management-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 los Pods en las implementaciones del espacio de nombres config-management-system se escalan de forma incorrecta y los escala según su recuento de réplicas adecuado.

Si necesitas reanudar la sincronización en varios clústeres, ejecuta el comando anterior para cada uno.

Detén y reanuda la sincronización desde más de una fuente de información

La sección es para más de una fuente de información y te muestra cómo detener y reanudar de manera temporal la sincronización desde más de una fuente de información. Para aprender a detener la sincronización de una sola fuente de información, consulta Cómo detener y reanudar la sincronización desde una fuente de información.

Solo un administrador central puede detener la sincronización en la fuente de confianza raíz.

La capacidad de detener la sincronización en más de una fuente de información depende del método de configuración que se usó cuando configuraste la sincronización desde más de una fuente de información:

  • Si se usó el método Fuentes de control en una fuente de confianza raíz, solo un administrador central puede detener y reanudar la sincronización.

  • Si se usó el método Controla una fuente de información con la API de Kubernetes, los operadores de la aplicación pueden detener y reanudar la sincronización desde las fuentes de información con alcance de espacio de nombres en las que trabajan.

Detén la sincronización

En las siguientes secciones, se muestra cómo detener la sincronización de la fuente de confianza raíz y las fuentes de confianza con alcance de espacio de nombres. Para evitar que el administrador de conciliadores revierta el cambio, primero debes detenerlo con los siguientes comandos:

kubectl -n config-management-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --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

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 ConfigManagement.
  2. Reduce el recuento de replicas a 0 en la implementación del administrador de conciliadores.

Cómo dejar de sincronizar desde la fuente de confianza raíz

Para detener la sincronización de un clúster desde la fuente de información raíz, un administrador central puede ejecutar el siguiente comando:

kubectl -n config-management-system scale deployment root-reconciler --replicas=0

Este comando reduce el recuento de replicas en la implementación root-reconciler a 0.

Si necesitas detener la sincronización en varios clústeres, ejecuta el comando anterior para cada uno.

Deja de sincronizar desde la fuente de confianza con alcance de espacio de nombres

Selecciona la pestaña Método de fuente de confianza raíz o Método de la API de Kubernetes para ver las instrucciones correspondientes.

Método de la fuente de confianza raíz

Si se usó el método Control de las fuentes de información de espacio de nombres en la fuente de información raíz, los administradores centrales pueden ejecutar los siguientes comandos para detener la sincronización de un clúster desde una fuente de información de espacio de nombres:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0

Mediante el comando, se reduce el recuento de réplicas en el Deployment de ns-reconciler-NAMESPACE a 0.

Si necesitas detener la sincronización en varios clústeres, ejecuta el comando anterior para cada uno.

Método de la API de Kubernetes

Si se usó el método Controla las fuentes con alcance de espacio de nombres con la API de Kubernetes, los operadores de la aplicación pueden detener la sincronización de un clúster mediante la ejecución de los siguientes comandos:

  1. Recupera la configuración de RepoSync y guárdala para usarla más adelante cuando quieras reanudar la sincronización:

    kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
    

    Reemplaza NAMESPACE por el espacio de nombres de RepoSync.

  2. Borra la configuración de RepoSync:

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    Mediante este comando, se activa el Administrador de conciliadores para quitar el conciliador de espacios de nombres (ns-reconciler-NAMESPACE) de NAMESPACE y se detiene la sincronización.

    Si necesitas detener la sincronización en varios clústeres, ejecuta los comandos anteriores para cada uno.

Detén el webhook de admisión del bloqueo de desvíos (opcional)

El webhook de admisión del Sincronizador de configuración está inhabilitado de forma predeterminada. Puedes enable y, también, inhabilitar la funcionalidad de prevención de desvíos que proporciona el webhook de admisión mediante Google Cloud CLI o kubectl.

Deja de sincronizar desde todas las fuentes de confianza

Para dejar de sincronizar desde todas las fuentes de información, incluida la fuente raíz de confianza y las fuentes con alcance de espacios de nombres, ejecuta los siguientes comandos:

kubectl scale deployment -n config-management-system -l app=reconciler --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=reconciler

Los comandos reducen el recuento de replicas de todos los Pods de conciliador que se ejecutan en el espacio de nombres config-management-system a 0 y esperan hasta que se borren todos los Pods de conciliador.

Todas las implementaciones de conciliador aún se encuentran en el clúster, pero no hay réplicas de los conciliadores ni de ninguno de los procesos responsables de la sincronización disponibles, por lo que los archivos de configuración no se sincronizan desde la fuente de información.

Reanuda la sincronización

En esta sección, se muestra cómo reanudar la sincronización de la fuente de confianza raíz y las fuentes con alcance de espacio de nombres.

Reanuda la sincronización desde la fuente de confianza raíz

Para reanudar la sincronización desde una fuente de información raíz, un administrador central puede ejecutar el siguiente comando:

kubectl -n config-management-system scale deployment root-reconciler --replicas=1

Este comando escala el Deployment root-reconciler a 1 réplica.

Reanuda la sincronización desde una fuente con alcance de espacio de nombres

Selecciona la pestaña Método de fuente de confianza raíz o Método de la API de Kubernetes para ver las instrucciones correspondientes.

Método de la fuente de confianza raíz

Si usaste el método Controla las fuentes con alcance de espacio de nombres en una fuente de confianza, un administrador central puede ejecutar el siguiente comando:

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1

Este comando escala el Deployment ns-reconciler-NAMESPACE a 1 réplica.

Método de la API de Kubernetes

Si usaste el método Controla las fuentes con alcance de espacio de nombres con la API de Kubernetes, los operadores de la aplicación pueden reanudar la sincronización si vuelven a aplicar repo-sync.yaml, que contiene la configuración RepoSync:

kubectl apply -f repo-sync.yaml

Con este comando, se activa el administrador de conciliadores para crear un proceso de conciliación de espacios de nombres y crear un Deployment ns-reconciler-NAMESPACE.

Inhabilita y habilita el webhook de admisión

El webhook de admisión del Sincronizador de configuración está inhabilitado de forma predeterminada. Puedes enable y, también, inhabilitar la funcionalidad de prevención de desvíos que proporciona el webhook de admisión mediante Google Cloud CLI o kubectl.

Reanuda la sincronización desde todas las fuentes de confianza

Para reanudar la sincronización desde todas las fuentes de información, ejecuta el siguiente comando:

kubectl -n config-management-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 la implementación del administrador de conciliadores se escala de forma incorrecta y la escala al recuento de réplicas adecuado. Al final, el administrador de conciliadores escala el conciliador raíz y los conciliadores de espacio de nombres al recuento de réplicas correspondiente.

¿Qué sigue?