Arquitectura del Sincronizador de configuración

En esta página, se presenta la arquitectura del Sincronizador de configuración. Aprender sobre los componentes creados por el Sincronizador de configuración puede proporcionarte una comprensión más profunda del Sincronizador de configuración y podría ayudarte a depurar y solucionar los problemas que encuentres.

En el siguiente diagrama, se muestra la arquitectura del Sincronizador de configuración y sus recursos relacionados en un clúster de la edición Enterprise de Google Kubernetes Engine (GKE):

Diagrama en el que se muestra la relación entre los objetos y los recursos del Sincronizador de configuración

En este diagrama, el usuario crea una fuente de información y, luego, instala el Sincronizador de configuración con el Administrador de funciones.

Existen varios pasos para instalar el Sincronizador de configuración y cada uno implementa componentes adicionales en tu clúster:

  1. Cuando habilitas el Sincronizador de configuración en el clúster, se agregan los siguientes componentes:

    • El operador de ConfigManagement en un Deployment llamado config-management-operator.
    • La definición de recurso personalizado (CRD) ConfigManagement y el objeto llamado config-management.
    • El Administrador de conciliación en una Deployment llamada reconciler-manager.
    • El controlador de ResourceGroup en un Deployment llamado resource-group-controller-manager.
    • El colector de OpenTelemetry en una Deployment llamada otel-collector.
    • Opcional: El webhook de admisión del Sincronizador de configuración en una Deployment llamada admission-webhook.

    La mayoría de estos recursos y objetos se crean automáticamente cuando instalas el Sincronizador de configuración y no necesitas modificarlos.

  2. La creación de objetos RootSync y RepoSync agrega los siguientes componentes:

    • Para cada RootSync, una Deployment de conciliador llamada root-reconciler-ROOTSYNC_NAME.
    • Para cada RepoSync, una Deployment de conciliador llamada ns-reconciler-REPOSYNC_NAMESPACE-REPOSYNC_NAME-REPOSYNC_NAME_LENGTH.

Implementaciones, Pods y contenedores del Sincronizador de configuración

En la siguiente tabla, se proporciona más información sobre la Deployment del Sincronizador de configuración, los Pods y los contenedores:

Nombre de la implementación Espacio de nombres de la Deployment Descripción de la implementación Recuento de réplicas Expresión regular del nombre del Pod Recuento de contenedores Nombres de contenedores
config-management-operator config-management-system El operador de ConfigManagement se ejecuta en cada clúster que tenga instalado el Sincronizador de configuración. Supervisa el objeto ConfigManagement y administra los componentes del Sincronizador de configuración, como Reconciler Manager y el Recopilador OpenTelemetry. 1 config-management-operator-.* 1
  • manager
  • reconciler-manager config-management-system Reconciler Manager se ejecuta en cada clúster con el Sincronizador de configuración habilitado en el objeto ConfigManagement. Observa los objetos RootSync y RepoSync, y administra un Deployment del conciliador para cada uno. 1 reconciler-manager-.* 2
  • reconciler-manager
  • otel-agent
  • root-reconciler config-management-system Se crea un Deployment de conciliador raíz para cada objeto RootSync. 1 root-reconciler-.* 3 - 51
  • reconciler
  • otel-agent
  • git-sync
  • helm-sync
  • oci-sync
  • gcenode-askpass-sidecar
  • hydration-controller
  • ns-reconciler config-management-system Se crea un Deployment del conciliador de espacios de nombres para cada objeto RepoSync. 1 ns-reconciler-.* 3 - 51
  • reconciler
  • otel-agent
  • git-sync
  • helm-sync
  • oci-sync
  • gcenode-askpass-sidecar
  • hydration-controller
  • otel-collector config-management-monitoring El recopilador OpenTelemetry se ejecuta en cada clúster con el Sincronizador de configuración habilitado en el objeto ConfigManagement. Recopila métricas de los componentes del Sincronizador de configuración que se ejecutan en los espacios de nombres config-management-system y resource-group-system, y las exporta a Prometheus y Cloud Monitoring. 1 otel-collector-.* 1
  • otel-collector
  • resource-group-controller-manager resource-group-system El controlador de ResourceGroup se ejecuta en cada clúster con el Sincronizador de configuración habilitado en el objeto ConfigManagement. Observa objetos ResourceGroup y los actualiza con el estado de conciliación actual de cada objeto de su inventario. Se crea un objeto ResourceGroup por cada objeto RootSync y RepoSync para realizar un inventario de la lista de objetos que aplica el conciliador a partir de la fuente de confianza. 1 resource-group-controller-manager-.* 2
  • reconciler-manager
  • otel-agent
  • admission-webhook config-management-system El webhook de admisión del Sincronizador de configuración se ejecuta en cada clúster con la prevención de desvío habilitada en el objeto ConfigManagement. Supervisa las solicitudes a la API de Kubernetes y evita que se modifiquen o borren los recursos que administra el Sincronizador de configuración. El webhook de admisión del Sincronizador de configuración está inhabilitado de forma predeterminada. 2 admission-webhook-.* 1
  • admission-webhook
  • 1 Para obtener información sobre cuándo se crean estos contenedores, consulta Contenedores del conciliador.

    Componentes clave

    En las siguientes secciones, se exploran los componentes importantes del Sincronizador de configuración con mayor detalle.

    Operador y objeto de ConfigManagement

    El operador de ConfigManagement observa el objeto ConfigManagement y crea y administra otros componentes necesarios para que funcione el Sincronizador de configuración:

    Accionamiento del operador

    Debido a que el operador de ConfigManagement instala algunos componentes que requieren permisos cluster-admin, el operador de ConfigManagement también requiere permisos cluster-admin.

    Administrador de conciliadores y conciliadores

    El Administrador de conciliación es responsable de crear y administrar los conciliadores individuales que garantizan que la configuración de tu clúster se mantenga sincronizada.

    El administrador de conciliación crea un conciliador de raíz para cada objeto RootSync y un conciliador de espacio de nombres para cada objeto RepoSync. El Sincronizador de configuración usa este diseño en lugar de compartir un solo conciliador monolítico porque mejora la confiabilidad, ya que reduce los puntos únicos de fallo y permite que los conciliadores individuales se escalen de forma independiente.

    Los conciliadores de raíz y espacio de nombres recuperan automáticamente los archivos de configuración de tu fuente de confianza y los aplican para aplicar el estado que deseas dentro de tu clúster.

    En el siguiente diagrama, se muestra cómo el Administrador de conciliación controla el ciclo de vida de cada conciliador de raíz y conciliador de espacios de nombres:

    Diagrama en el que se muestra cómo el administrador de conciliación controla el conciliador raíz Diagrama en el que se muestra cómo el Administrador de conciliación controla el conciliador de espacio de nombres

    Contenedores del conciliador

    Los contenedores específicos implementados en los Pods del conciliador dependen de las opciones de configuración que elijas. En la siguiente tabla, se explica con más detalle qué hace cada uno de estos contenedores de conciliador y la condición que hace que el Sincronizador de configuración los cree:

    Nombre del contenedor Descripción Afección
    reconciler Controla la sincronización y la corrección de desvíos. Siempre están habilitados.
    otel-agent Recibe métricas de los otros contenedores del conciliador y las envía al colector de OpenTelemetry. Siempre están habilitados.
    git-sync Extrae archivos de configuración de tu repositorio de Git a un directorio local que el contenedor de conciliación puede leer. Se habilita cuando spec.sourceType es git.
    helm-sync Extrae y procesa gráficos de Helm de tu repositorio de gráficos a un directorio local que el contenedor de conciliación puede leer. Se habilita cuando spec.sourceType es helm.
    oci-sync Extrae imágenes de OCI que contienen tus parámetros de configuración de tu Container Registry a un directorio local que el contenedor de conciliador puede leer. Se habilita cuando spec.sourceType es oci.
    gcenode-askpass-sidecar Almacena en caché las credenciales de Git del servicio de metadatos de GKE para que las use el contenedor git-sync. Se habilita cuando spec.sourceType es git y spec.git.auth es gcenode o gcpserviceaccount.
    hydration-controller Controla la compilación de configuraciones de Kustomize en un directorio local que el contenedor de conciliador puede leer. Se habilita cuando la fuente incluye un archivo kustomize.yaml.

    Como se muestra en la tabla anterior, por lo general, se espera un recuento de contenedores de tres a cinco en cada Pod del conciliador. Los contenedores reconciler y otel-agent siempre están presentes. Especificar un tipo para la fuente de verdad determina qué contenedor de sincronización se agrega. Además, los contenedores hydration-controller y gcenode-askpass-sidecar se crean si realizas los cambios de configuración que se mencionan en la tabla.

    Objetos ResourceGroup y controlador de ResourceGroup

    Los conciliadores de espacio de nombres y raíz crean un objeto de inventario ResourceGroup para cada objeto RootSync y RepoSync que configures. Cada objeto ResourceGroup contiene una lista de objetos que el conciliador sincroniza con el clúster a partir de la fuente de información para ese objeto RootSync o RepoSync. Luego, el controlador ResourceGroup observa todos los objetos en el objeto ResourceGroup y actualiza el estado del objeto ResourceGroup con el estado de conciliación actual de los objetos sincronizados. Esto te permite verificar el estado del objeto ResourceGroup para obtener una descripción general del estado de sincronización, en lugar de tener que consultar el estado de cada objeto individual por tu cuenta.

    Los objetos ResourceGroup tienen el mismo nombre y espacio de nombres que su objeto RootSync o RepoSync correspondiente. Por ejemplo, para el objeto RootSync con el nombre root-sync en el espacio de nombres config-management-system, el objeto ResourceGroup correspondiente también se llama root-sync en el espacio de nombres config-management-system.

    No crees ni modifiques objetos ResourceGroup, ya que pueden interferir en la operación del Sincronizador de configuración.

    Webhook de admisión

    El webhook de admisión del Sincronizador de configuración se crea cuando habilitas la prevención de desvío. La prevención de desvíos intercepta de forma proactiva las solicitudes de modificación para garantizar que se alineen con la fuente de información antes de permitir cambios.

    Si no habilitas la prevención de desvíos, el Sincronizador de configuración usa un mecanismo de autorreparación para revertir el desvío de configuración. Con la autorreparación, el Sincronizador de configuración supervisa de forma continua los objetos administrados y revierte automáticamente cualquier cambio que se desvíe del estado deseado.

    Objetos RootSync y RepoSync

    Los objetos RootSync configuran el Sincronizador de configuración para crear un conciliador de raíz que supervisa la fuente de información especificada y aplica objetos de esa fuente al clúster. De forma predeterminada, el conciliador raíz de cada objeto RootSync tiene el permiso cluster-admin. Con este permiso predeterminado, los conciliadores raíz pueden sincronizar recursos con alcance de clúster y de espacio de nombres. Si es necesario, puedes cambiar estos permisos configurando los campos spec.override.roleRefs. Los objetos RootSync están diseñados para que los usen los administradores de clústeres.

    Los objetos RepoSync configuran el Sincronizador de configuración para crear un conciliador de espacio de nombres que supervisa la fuente especificada y aplica objetos de esa fuente a un espacio de nombres específico en el clúster. Los conciliadores de espacio de nombres pueden sincronizar cualquier recurso con alcance de espacio de nombres en ese espacio de nombres con permisos personalizados especificados por el usuario. Los objetos RepoSync están diseñados para que los usuarios del espacio de nombres los usen.

    Cómo el servicio de flota administra los objetos RootSync

    Cuando instalas el Sincronizador de configuración con la consola de Google Cloud, Google Cloud CLI, Config Connector o Terraform, el servicio de Flota administra el Sincronizador de configuración según tus entradas a la API de Google Cloud.

    Cuando el servicio de flota administra la instalación del Sincronizador de configuración, de forma opcional, también puedes hacer que administre tu objeto RootSync inicial, llamado root-sync. Esto te permite iniciar GitOps en tu clúster sin necesidad de aplicar nada de forma manual al clúster directamente. Si decides que el servicio de flota no administre tu objeto RootSync inicial, puedes aplicar los objetos RootSync y RepoSync que desees directamente al clúster.

    El objeto RootSync llamado root-sync se crea en función de las entradas a la API de Google Cloud, en particular, la sección spec.configSync de la API de Config-management apply. Debido a que esta API solo expone un subconjunto de los campos RootSync, esos campos se consideran administrados en root-sync, mientras que los otros se consideran no administrados. Los campos administrados solo se pueden editar con la API de Google Cloud. Los campos no administrados se pueden editar con kubectl o cualquier otro cliente de Kubernetes. Para ver un ejemplo en el que se muestra cómo exportar el archivo YAML de root-sync, editarlo de forma local y volver a aplicarlo, consulta Crea y edita un archivo de configuración RootSync.

    Para las instalaciones manuales, puedes administrar el Sincronizador de configuración con la herramienta de línea de comandos de kubectl o cualquier otro cliente de Kubernetes.

    Objetos RootSync y RepoSync adicionales

    Para crear objetos RootSync o RepoSync adicionales, puedes usar la herramienta de línea de comandos de kubectl o cualquier otro cliente de Kubernetes. También puedes usar el objeto root-sync inicial para administrar objetos RootSync o RepoSync adicionales con GitOps. Para ello, agrega sus manifiestos YAML a la fuente de confianza desde la que root-sync está configurado para sincronizarse. No se puede usar este método para administrar la configuración del root-sync inicial, ya que el servicio de flota administra algunos de sus campos. Para administrar el objeto root-sync con GitOps, usa Config Connector o Terraform. Para obtener más información sobre la creación de objetos RootSync y RepoSync adicionales, consulta Cómo configurar la sincronización desde más de una fuente de información.

    ¿Qué sigue?

    • Es posible que desees supervisar los componentes del Sincronizador de configuración o verificar sus registros. Para ver una introducción, consulta Usa la supervisión y los registros.
    • Obtén información sobre las solicitudes de recursos para los componentes del Sincronizador de configuración.