Usa un repositorio no estructurado

Usar un repositorio no estructurado te permite organizar tu repositorio de la manera que te resulte más conveniente. Esta flexibilidad te permite sincronizar tu configuración existente de Kubernetes con el repositorio del Sincronizador de configuración. Por ejemplo, si deseas sincronizar un gráfico de Helm con tu clúster, puedes ejecutar el comando helm template y confirmar manifiesto procesado al repositorio. Para obtener más información, consulta el instructivo Usa el Sincronizador de configuración con Helm.

Los repositorios no estructurados se recomiendan para la mayoría de los usuarios. Sin embargo, también puedes crear un repositorio jerárquico para separar archivos de configuración en categorías distintas. Si deseas crear políticas jerárquicas sin cumplir con las reglas del repositorio jerárquico, considera usar el Controlador de jerarquía.

Limitaciones

Los repositorios no estructurados tienen las siguientes limitaciones:

  • No puedes usar los objetos de Kubernetes Repo y HierarchyConfig en un repositorio no estructurado.

  • Los espacios de nombres abstractos no son compatibles con los repositorios no estructurados.

  • Si usas el comando nomos vet, agrega la marca --source-format=unstructured. Por ejemplo:

    nomos vet --source-format=unstructured
    

Objetos con alcance de espacio de nombres

Puedes declarar NamespaceSelectors en un repositorio no estructurado. Para declarar un NamespaceSelector, agrega la anotación metadata.namespace o NamespaceSelector. La declaración de ambas anotaciones no es válida. Si los recursos con alcance de espacio de nombres no declaran metadata.namespace o la anotación NamespaceSelector, el Sincronizador de configuración usa el espacio de nombres "predeterminado" del clúster. Para obtener más información, consulta Limita los espacios de nombres a los que afecta un archivo de configuración.

Objetos con permiso de clúster

En un repositorio no estructurado, ClusterSelectors funciona con normalidad.

Configura un repositorio no estructurado

Para configurar un repositorio no estructurado, establece el valor de spec.sourceFormat en unstructured en tu objeto RootSync o en el objeto ConfigManagement.

RootSync

El siguiente objeto RootSync configura Anthos Config Management para sincronizarse desde un repositorio no estructurado:

# root-sync.yaml
# If you are using a Config Sync version earlier than 1.7,
# use: apiVersion: configsync.gke.io/v1alpha1
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  # If you are using a Config Sync version 1.11.0 or later, you can use any valid name.
  name: root-sync
  namespace: config-management-system
spec:
  sourceFormat: unstructured
  git:
    repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    branch: main
    dir: config-sync-quickstart/multirepo/root
    auth: ssh
    secretRef:
      name: SECRET_NAME

Reemplaza SECRET_NAME por el nombre del Secret.

ConfigManagement

El siguiente objeto ConfigManagement configura una canalización de integración continua y especifica que el repositorio con el que se sincroniza no está estructurado:

# config-management.yaml

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: CLUSTER_NAME
  sourceFormat: unstructured
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    syncBranch: main
    secretType: ssh
    policyDir: ci-pipeline-unstructured

Para obtener una lista completa de los campos que puedes agregar al campo spec, consulta Campos de ConfigManagement.

Convierte un repositorio jerárquico en un repositorio no estructurado

Si usas un repositorio jerárquico y deseas convertirlo en un repositorio no estructurado, ejecuta lo siguiente en tu repositorio:

nomos hydrate PATH

Reemplaza PATH por la ruta de acceso a tu directorio.

Esto crea un directorio compiled/ en el directorio de trabajo actual. Dentro de ese directorio, se crea un subdirectorio para cada clúster inscrito, con los archivos de configuración completamente resueltos, y cada subdirectorio se puede usar en un repositorio no estructurado.

Para obtener más detalles, consulta Comandos nomos.

Si prefieres convertir tu repositorio de forma manual, completa las siguientes instrucciones:

  1. Quita las configuraciones Repo en el directorio system/ de tu repositorio de Git. El recurso Repo no es necesario para un repositorio no estructurado.

  2. El directorio de espacio de nombres abstracto no es compatible con un repositorio no estructurado. Por lo tanto, debes declarar el espacio de nombres de todos los recursos incluidos originalmente en el directorio namespaces/ y sus subdirectorios.

  3. No se admite la herencia de espacios de nombres en el repositorio no estructurado. Por lo tanto, debes declarar todos los recursos que se heredaron en los espacios de nombres subordinados, es decir, los que estaban originalmente en el directorio namespaces/.

Formato de ejemplo para un repositorio no estructurado

En el siguiente ejemplo, se muestra cómo puedes organizar tus archivos de configuración (incluidos los recursos de Google Cloud) en un repositorio no estructurado:

├── manifests
│   ├── access-control
│   │   ├── ...
│   ├── change-control
│   │   ├── ...
│   ├── git-ops
│   │   └── ...
│   ├── logging-monitoring
│   │   └── ...
│   ├── networking
│   │   └── ...
│   ├── project-factory
│   │   └── ...
│   └── resource-hierarchy
│   │   └── ...
├── raw-configs
│   ├── access-control
│   │   └── ...
│   ├── change-control
│   │   └── ...
│   ├── git-ops
│   │   └── ...
│   ├── logging-monitoring
│   │   └── ...
│   ├── networking
│   │   └── ...
│   ├── project-factory
│   │   └── ...
│   └── resource-hierarchy
│   │   └── ...
└── scripts
    └── render.sh

En este ejemplo, los archivos de configuración sin procesar se encuentran en un directorio raw-configs. Luego, puedes usar una secuencia de comandos o una canalización automatizada para procesar los archivos de configuración sin procesar y almacenar el resultado en el directorio manifests. Cuando configuras el Sincronizador de configuración, lo configuras para sincronizar desde el directorio manifests.

¿Qué sigue?