Usa un repositorio jerárquico

En esta página, se describe cómo el Sincronizador de configuración lee la configuración de una fuente de información jerárquica y aplica automáticamente la configuración resultante a tus clústeres.

Si deseas obtener más flexibilidad estructural (por ejemplo, deseas crear subcarpetas de recursos), puedes crear una fuente de información no estructurada. Se recomiendan fuentes de información no estructuradas para la mayoría de los casos de uso. Si ya usas una fuente de confianza jerárquica, puedes convertirla en una fuente de confianza no estructurada.

Para comprender cómo el Sincronizador de configuración usa un repositorio jerárquico, es útil si estás familiarizado con los repositorios de Git y la interfaz de línea de comandos git.

Estructura del directorio

En el caso de las fuentes jerárquicas, el Sincronizador de configuración aprovecha las estructuras similares a un sistema de archivos y usa el directorio para determinar a qué clústeres o espacios de nombres pertenece una configuración.

namespaces/

El directorio namespaces/ contiene opciones de configuración para espacios de nombres y objetos con alcance de espacio de nombres. La estructura dentro de namespaces/ es el mecanismo que dirige la herencia del espacio de nombres. Puedes limitar los espacios de nombres que pueden heredar un archivo de configuración mediante un NamespaceSelector.

cluster/

El directorio cluster/ contiene opciones de configuración que se aplican a clústeres enteros, en lugar de a espacios de nombres. De forma predeterminada, cualquier configuración del directorio cluster/ se aplica a todos los clústeres inscritos en el Sincronizador de configuración. Puedes limitar los clústeres a los que una configuración puede afectar mediante un ClusterSelector.

clusterregistry/

El directorio clusterregistry/ es opcional y contiene opciones de configuración para ClusterSelectors. Los ClusterSelectors limitan los clústeres a los que se aplica una configuración y se mencionan en las opciones de configuración que se encuentran en los directorios cluster/ y namespaces/.

system/

El directorio system/ contiene opciones de configuración para el operador.

Ejemplo de fuente de confianza jerárquica

En la siguiente estructura de directorios, se muestra cómo usar una fuente de información jerárquica del Sincronizador de configuración para configurar un clúster de Kubernetes que comparten dos equipos diferentes, team-1 y team-2.

  • Cada equipo tiene su propio espacio de nombres y cuenta de servicio de Kubernetes, así como cuotas de recursos, políticas de red y vinculaciones de funciones.
  • El administrador del clúster configura una política en namespaces/limit-range.yaml para restringir las asignaciones de recursos (a Pods o contenedores) en ambos espacios de nombres.
  • El administrador del clúster también configura ClusterRoles y ClusterRoleBindings.

Un repositorio jerárquico válido del Sincronizador de configuración debe incluir tres subdirectorios: cluster/, namespaces/ y system/.

El directorio cluster/ contiene archivos de configuración que se aplican a clústeres enteros (como ClusterRole, ClusterRoleBinding), en lugar de a espacios de nombres.

El directorio namespaces/ contiene opciones de configuración para los objetos de espacio de nombres y los objetos con alcance de espacio de nombres. Cada subdirectorio de namespaces/ incluye la configuración para un objeto de espacio de nombres y todos los objetos con permisos de espacio de nombres del espacio de nombres. El nombre de un subdirectorio debe ser el mismo que el nombre del objeto del espacio de nombres. Los objetos con permisos de espacios de nombres que se deben crear en cada espacio de nombres se pueden colocar directamente en namespaces/ (por ejemplo, namespaces/limit-range.yaml).

El directorio system/ contiene archivos de configuración para el operador de Config Management.

├── cluster
│   ├── clusterrolebinding-namespace-reader.yaml
│   ├── clusterrole-namespace-reader.yaml
│   ├── clusterrole-secret-admin.yaml
│   └── clusterrole-secret-reader.yaml
├── namespaces
│   ├── limit-range.yaml
│   ├── team-1
│   │   ├── namespace.yaml
│   │   ├── network-policy-default-deny-egress.yaml
│   │   ├── resource-quota-pvc.yaml
│   │   ├── rolebinding-secret-reader.yaml
│   │   └── sa.yaml
│   └── team-2
│       ├── namespace.yaml
│       ├── network-policy-default-deny-all.yaml
│       ├── resource-quota-pvc.yaml
│       ├── rolebinding-secret-admin.yaml
│       └── sa.yaml
├── README.md
└── system
    └── repo.yaml

Usa la herencia de espacios de nombres y los espacios de nombres abstractos

Con una fuente de información jerárquica, puedes usar el concepto de herencia de espacios de nombres para aplicar configuraciones automáticamente a grupos de espacios de nombres en todos los clústeres en los que existen esos espacios de nombres (o deberían existir).

La herencia del espacio de nombres se aplica al directorio namespaces/ del repositorio jerárquico y a todos sus subdirectorios. Los archivos de configuración en otros directorios del repositorio, como cluster/, no están sujetos a la herencia.

En una fuente de información jerárquica, el directorio namespaces/ puede contener dos tipos diferentes de subdirectorios:

  • Un directorio de espacio de nombres contiene un archivo de configuración para un espacio de nombres. El nombre del archivo que contiene la configuración no es importante, pero la configuración debe tener kind: Namespace. Un directorio de espacio de nombres también puede contener archivos de configuración para otros tipos de objetos de Kubernetes. Sin embargo, no puede contener subdirectorios. Un archivo de configuración de espacio de nombres representa un espacio de nombres real en un clúster.

  • Un directorio de espacio de nombres abstracto contiene directorios de espacio de nombres. También puede contener archivos de configuración para otros objetos de Kubernetes, pero no puede contener un archivo de configuración para un espacio de nombres directamente. Un directorio de espacio de nombres abstracto no representa un objeto en un clúster de Kubernetes, pero sí lo hacen sus directorios de espacio de nombres descendientes.

Para garantizar que tu espacio de nombres y las fuentes de espacios de nombres abstractos tengan el tipo de estructura y las configuraciones correctas, el error KNV1003: IllegalNamespaceSubdirectoryError informa cuando hay un problema.

Las configuraciones de un directorio de espacio de nombres se aplican solo a ese espacio de nombres. Sin embargo, las configuraciones que están en un directorio de espacio de nombres abstracto se aplican a todos los directorios de espacio de nombres subordinados de ese espacio de nombres abstracto (o a los espacios de nombres subordinados que coincidan con el NamespaceSelector de una configuración, si lo hay).

La herencia de una configuración en el directorio namespaces/ se basa en gran parte en su ubicación dentro del árbol de directorios de la fuente de información. Para comprender qué archivos de configuración se aplican a un espacio de nombres determinado en un clúster determinado, puedes explorar el repositorio de ejemplo de herencia de espacios de nombres.

Espacios de nombres restringidos

config-management-system es un espacio de nombres restringido. No puedes usarlo como un directorio de espacio de nombres abstracto. Puedes definir un espacio de nombres config-management-system, pero el único tipo de recurso permitido para el espacio de nombres config-management-system es RootSync.

Realiza cambios en tu fuente de información

Cuando realices un cambio en tu fuente de información que cree o borre directorios de espacio de nombres dentro del directorio namespaces/, es posible que obtengas resultados inesperados según la acción:

  • Creación de un directorio: Cuando se confirma una jerarquía namespaces/ válida en la fuente de información, el Sincronizador de configuración crea espacios de nombres y, luego, crea objetos de Kubernetes en esos espacios para cada configuración que contiene o hereda el directorio de espacio de nombres.
  • Borra un directorio: La eliminación de un directorio de espacio de nombres es una operación destructiva. El espacio de nombres y su contenido se borran en cada clúster que administra el Sincronizador de configuración en el que existe el espacio de nombres. Si borras un directorio de espacio de nombres abstracto que contiene directorios de espacio de nombres descendientes, todos esos espacios de nombres y sus contenidos se borran de todos los clústeres que administra el Sincronizador de configuración.
  • Cambiar el nombre de un directorio: Cambiar el nombre de un directorio de espacio de nombres es una eliminación, seguida de una creación, y se considera una operación destructiva. El cambio de nombre de un directorio de espacio de nombres abstracto no tiene efecto visible de forma externa.

  • Si mueves un directorio: Si mueves un espacio de nombres o un directorio de espacio de nombres abstracto dentro de namespaces/, no se borra el espacio de nombres ni los objetos en él, excepto cuando el espacio de nombres comienza a heredar un archivo de configuración de un directorio de espacio de nombres abstracto o deja de hacerlo debido a un cambio en su jerarquía.

¿Qué sigue?