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 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.

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 (solo necesarios para versiones anteriores a 1.9.0) y config-management-system en todos los clústeres donde deseas detener la sincronización:

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

Configura una variable de espacio de nombres config-management-operator

El operador de config-management estaba en el espacio de nombres kube-system para las versiones de Anthos Config Management anteriores a la 1.9.0. En Anthos Config Management 1.9.0, el operador de Config-management se movió al espacio de nombres config-management-system. Antes de ejecutar cualquiera de los siguientes comandos, configura una variable de entorno para indicar el espacio de nombres específico de la versión.

Para las versiones 1.9.0 o posteriores de Anthos Config Management:

export OPERATOR_NAMESPACE=config-management-system

Para versiones anteriores a la 1.9.0, haz lo siguiente:

export OPERATOR_NAMESPACE=kube-system

Detén y reanuda la sincronización desde repositorios únicos

En esta sección, se muestran los 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. Para obtener información sobre cómo detener la sincronización de varios repositorios, consulta Detén y reanuda la sincronización desde varios repositorios.

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 $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

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 de todos los Pods que se ejecutan en el espacio de nombres config-management-system a 0. El conjunto exacto de Pods 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 ninguno de los procesos responsables de la sincronización, por lo que las configuraciones no se sincronizan desde el repositorio.

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 $OPERATOR_NAMESPACE 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 varios repositorios

Esta sección es para varios repositorios y te muestra cómo detener y reanudar temporalmente la sincronización desde varios repositorios. Si deseas obtener más información para detener la sincronización de repositorios individuales, consulta Detén y reinicia la sincronización de repositorios únicos.

Solo un administrador central puede detener la sincronización en el repositorio raíz.

La capacidad de detener la sincronización en repositorios de espacios de nombres depende del método de configuración que se usó para tus repositorios de espacios de nombres.

  • Si se usó el método de control de los repositorios de espacios de nombres en el repositorio raíz, un administrador central es el único que puede detener y reanudar la sincronización.

  • Si se usó el método de control de los repositorios de espacios de nombres con la API de Kubernetes, los operadores de la aplicación pueden detener y reanudar la sincronización desde los repositorios de espacios de nombres en los que operan.

Detén la sincronización

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

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

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 administrador de conciliadores.

Detén la sincronización desde el repositorio raíz

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

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

Mediante este comando, se reduce el recuento de replicas en el Deployment de root-reconciler a 0.

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

Detén la sincronización desde repositorios de espacios de nombres

Selecciona la pestaña Método del repositorio raíz o Método de la API de Kubernetes para ver las instrucciones relevantes.

Método del repositorio raíz

Si se usó el método de Control de los repositorios de espacios de nombres en el repositorio raíz, los administradores centrales pueden ejecutar los siguientes comandos para detener la sincronización del clúster desde un repositorio de espacios 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 de control de los repositorios de espacios de nombres con la API de Kubernetes, los operadores de la aplicación pueden detener la sincronización del 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)

Para evitar que el Sincronizador de configuración realice una prevención de desvío, después de detener los conciliadores, puedes detener el webhook de admisión mediante la ejecución del siguiente comando:

kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io

Este paso es opcional y solo se requiere cuando necesitas realizar cambios conflictivos en los recursos administrados del clúster. Esto requiere que el conciliador raíz se detenga primero. De lo contrario, el conciliador raíz intenta generar la configuración del webhook después de la eliminación.

Detén la sincronización desde todos los repositorios

Para detener la sincronización de todos los repositorios, incluidos el repositorio raíz y los repositorios 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 conciliadores aún se encuentran en el clúster, pero no hay réplicas de conciliador ni ninguno de los procesos responsables de la sincronización, por lo que los parámetros de configuración no se sincronizan desde el repositorio.

Reanuda la sincronización

En esta sección, se muestra cómo reanudar la sincronización del repositorio raíz y los repositorios de espacios de nombres.

Reanuda la sincronización desde el repositorio raíz

Para reanudar la sincronización desde un repositorio 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 un repositorio de espacio de nombres

Selecciona la pestaña Método del repositorio raíz o Método de la API de Kubernetes para ver las instrucciones relevantes.

Método del repositorio raíz

Si usaste el método de Control de los repositorios de espacios de nombres en el repositorio raíz, 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 de Control de los repositorios de espacios de nombres con la API de Kubernetes, los operadores de la aplicación pueden reanudar la sincronización si vuelven a aplicar el archivo repo-sync.yaml que contiene la configuración de 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.

Reanuda el webhook de admisión

Una vez que se reanuda el conciliador raíz, la configuración del webhook se genera de forma automática. Para validar que se generó correctamente, ejecuta el siguiente comando:

kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io

Reanudar la sincronización desde todos los repositorios

Para reanudar la sincronización desde todos los repositorios, ejecuta el siguiente comando:

kubectl -n $OPERATOR_NAMESPACE 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.

  # 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

¿Qué sigue?