Usar un repositorio jerárquico

En esta página se describe cómo lee Config Sync las configuraciones de una fuente de información veraz jerárquica y aplica la configuración resultante a tus clústeres automáticamente.

Te recomendamos que uses una fuente de información no estructurada en lugar de una jerárquica, ya que ofrece las mismas funciones básicas, pero te da más flexibilidad a la hora de organizar tus recursos. Si ya utilizas una fuente de información jerárquica, puedes convertirla en una fuente de información no estructurada.

Para entender cómo usa Config Sync un repositorio jerárquico, es útil que conozcas los repositorios de Git y la interfaz de línea de comandos git.

Puedes ver un ejemplo de cómo organizar y configurar una fuente de información jerárquica en el repositorio de ejemplos de Config Sync.

Estructura del directorio

En el caso de las fuentes jerárquicas, Config Sync aprovecha las estructuras similares a los sistemas de archivos y usa el directorio para determinar a qué clústeres o espacios de nombres se aplica una configuración.

namespaces/

El directorio namespaces/ contiene configuraciones de espacios de nombres y objetos centrados en espacios de nombres. La estructura de namespaces/ es el mecanismo que impulsa la herencia de espacios de nombres. Puedes limitar los espacios de nombres que pueden heredar una configuración mediante un NamespaceSelector.

cluster/

El directorio cluster/ contiene configuraciones que se aplican a clústeres completos, no a espacios de nombres. De forma predeterminada, cualquier configuración del directorio cluster/ se aplica a todos los clústeres registrados en Config Sync. Puedes limitar los clústeres a los que puede afectar una configuración mediante un ClusterSelector.

clusterregistry/

El directorio clusterregistry/ es opcional y contiene configuraciones de ClusterSelectors. ClusterSelectors limita a qué clústeres se aplica una configuración y se hace referencia a ellos en las configuraciones que se encuentran en los directorios cluster/ y namespaces/.

system/

El directorio system/ contiene configuraciones del operador.

Ejemplo de fuente de información veraz jerárquica

La siguiente estructura de directorios muestra cómo usar una fuente de verdad jerárquica de Config Sync para configurar un clúster de Kubernetes compartido por dos equipos diferentes: team-1 y team-2.

  • Cada equipo tiene su propio espacio de nombres de Kubernetes, cuenta de servicio de Kubernetes, cuotas de recursos, políticas de red y enlaces de roles.
  • 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.

Una fuente jerárquica de Config Sync válida debe incluir tres subdirectorios: cluster/, namespaces/ y system/.

El directorio cluster/ contiene configuraciones que se aplican a clústeres completos (como ClusterRole y ClusterRoleBinding) en lugar de a espacios de nombres.

El directorio namespaces/ contiene configuraciones de los objetos de espacio de nombres y de los objetos centrados en espacios de nombres. Cada subdirectorio de namespaces/ incluye las configuraciones de un objeto de espacio de nombres y todos los objetos centrados en el espacio de nombres. El nombre de un subdirectorio debe ser el mismo que el del objeto de espacio de nombres. Los objetos centrados en 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 configuraciones del operador ConfigManagement.

├── 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

Usar 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 espacio de nombres para aplicar automáticamente configuraciones a grupos de espacios de nombres en todos los clústeres en los que existan (o deban existir) esos espacios de nombres.

La herencia de espacios de nombres se aplica al namespaces/ directorio del repositorio jerárquico y a todos sus subdirectorios. Las configuraciones de otros directorios del repositorio, como cluster/, no están sujetas 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 una 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 configuraciones de otros tipos de objetos de Kubernetes. Un directorio de espacio de nombres no puede contener subdirectorios. Una 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 configuraciones de otros objetos de Kubernetes, pero no puede contener directamente la configuración de un espacio de nombres. 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 asegurarte de que tus fuentes de espacio de nombres y de espacio de nombres abstracto tienen el tipo de configuraciones y la estructura correctos, se muestra el error KNV1003: IllegalNamespaceSubdirectoryError cuando hay un problema.

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

La herencia de una configuración en el directorio namespaces/ se basa principalmente en su ubicación en el árbol de directorios de la fuente de información veraz. Para saber qué configuraciones se aplican a un espacio de nombres concreto de un clúster determinado, puedes consultar 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.

Hacer cambios en la fuente de información veraz

Si haces un cambio en tu fuente de información veraz que crea o elimina directorios de espacio de nombres en el directorio namespaces/, es posible que obtengas resultados inesperados en función de la acción:

  • Crear un directorio: cuando se confirma una jerarquía namespaces/ válida en la fuente de información veraz, Config Sync crea espacios de nombres y, a continuación, crea objetos de Kubernetes en esos espacios de nombres para cada configuración que contenga o herede el directorio del espacio de nombres.
  • Eliminar un directorio: eliminar un directorio de espacio de nombres es una operación destructiva. El espacio de nombres y su contenido se eliminan en todos los clústeres gestionados por Config Sync en los que exista el espacio de nombres. Si eliminas un directorio de espacio de nombres abstracto que contiene directorios de espacios de nombres descendientes, todos esos espacios de nombres y su contenido se eliminarán de todos los clústeres gestionados por Config Sync.
  • 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, por lo que se considera una operación destructiva. Cambiar el nombre de un directorio de espacio de nombres abstracto no tiene ningún efecto visible externamente.

  • Mover un directorio: mover un espacio de nombres o un directorio de espacio de nombres abstracto en namespaces/ no elimina el espacio de nombres ni los objetos que contiene, excepto cuando el espacio de nombres empieza o deja de heredar una configuración de un directorio de espacio de nombres abstracto, debido a un cambio en su jerarquía.

Siguientes pasos