Utilizza un repository gerarchico

Questa pagina descrive in che modo Config Sync legge le configurazioni da una fonte attendibile gerarchica e applica automaticamente la configurazione risultante ai cluster.

Se vuoi una maggiore flessibilità strutturale (ad esempio, vuoi creare sottocartelle di risorse), puoi creare una fonte di dati non strutturata. Le fonti di dati non strutturate sono consigliate per la maggior parte dei casi d'uso. Se utilizzi già una fonte di riferimento gerarchica, puoi convertirla in una fonte di riferimento non strutturata.

Per comprendere in che modo Config Sync utilizza un repository gerarchico, è utile conoscere i repository Git e l'interfaccia a riga di comando git.

Struttura della directory

Per le origini gerarchiche, Config Sync sfrutta strutture simili a un file system e utilizza la directory per determinare a quali cluster o spazi dei nomi è pertinente una configurazione.

namespaces/

La directory namespaces/ contiene configurazioni per spazi dei nomi e oggetti basati sullo spazio dei nomi. La struttura all'interno di namespaces/ è il meccanismo che guida l'ereditarietà dello spazio dei nomi. Puoi limitare gli spazi dei nomi che possono ereditare una configurazione utilizzando NamespaceSelector.

cluster/

La directory cluster/ contiene configurazioni che si applicano a interi cluster, anziché agli spazi dei nomi. Per impostazione predefinita, qualsiasi configurazione nella directory cluster/ si applica a tutti i cluster registrati in Config Sync. Puoi limitare i cluster che possono essere interessati da una configurazione utilizzando un ClusterSelector.

clusterregistry/

La directory clusterregistry/ è facoltativa e contiene configurazioni per ClusterSelectors. I ClusterSelector limitano i cluster a cui si applica una configurazione e vi fanno riferimento nelle configurazioni presenti nelle directory cluster/ e namespaces/.

system/

La directory system/ contiene le configurazioni per l'operatore.

Esempio di fonte di riferimento gerarchica

La seguente struttura di directory mostra come utilizzare una fonte di riferimento gerarchica di Config Sync per configurare un cluster Kubernetes condiviso da due diversi team, team-1 e team-2.

  • Ogni team ha il proprio spazio dei nomi Kubernetes, account di servizio Kubernetes, quote delle risorse, criteri di rete e associazioni di ruoli.
  • L'amministratore del cluster configura un criterio in namespaces/limit-range.yaml per limitare l'allocazione delle risorse (a pod o container) in entrambi gli spazi dei nomi.
  • L'amministratore del cluster configura anche ClusterRoles e ClusterRoleBinding.

Un'origine gerarchica di Config Sync valida deve includere tre sottodirectory: cluster/, namespaces/ e system/.

La directory cluster/ contiene configurazioni che si applicano a interi cluster (come ClusterRole, ClusterRoleBinding), anziché agli spazi dei nomi.

La directory namespaces/ contiene le configurazioni per gli oggetti dello spazio dei nomi e per gli oggetti con ambito a livello di spazio dei nomi. Ogni sottodirectory in namespaces/ include le configurazioni per un oggetto spazio dei nomi e tutti gli oggetti con ambito spazio dei nomi nello spazio dei nomi. Il nome di una sottodirectory deve essere uguale al nome dell'oggetto dello spazio dei nomi. Gli oggetti con ambito a livello di spazio dei nomi che devono essere creati in ciascun spazio dei nomi possono essere inseriti direttamente in namespaces/ (ad esempio, namespaces/limit-range.yaml).

La directory system/ contiene le configurazioni per l'operatore 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

Utilizza l'ereditarietà degli spazi dei nomi e spazi dei nomi astratti

Con una fonte di dati gerarchica, puoi utilizzare il concetto di ereditarietà dello spazio dei nomi per applicare automaticamente configurazioni a gruppi di spazi dei nomi in tutti i cluster in cui esistono (o dovrebbero esistere).

L'ereditarietà dello spazio dei nomi si applica alla directory namespaces/ del repository gerarchico e a tutte le relative sottodirectory. Le configurazioni in altre directory nel repository, ad esempio cluster/, non sono soggette all'ereditarietà.

In una fonte di dati gerarchica, la directory namespaces/ può contenere due diversi tipi di sottodirectory:

  • Una directory dello spazio dei nomi contiene una configurazione per uno spazio dei nomi. Il nome del file contenente la configurazione non è importante, ma la configurazione deve avere kind: Namespace. Una directory dello spazio dei nomi può contenere anche configurazioni per altri tipi di oggetti Kubernetes. Una directory dello spazio dei nomi non può contenere sottodirectory. Una configurazione dello spazio dei nomi rappresenta uno spazio dei nomi effettivo in un cluster.

  • Una directory dello spazio dei nomi astratta contiene directory dello spazio dei nomi. Può contenere anche configurazioni per altri oggetti Kubernetes, ma non può contenere direttamente una configurazione per uno spazio dei nomi. Una directory dello spazio dei nomi astratto non rappresenta un oggetto in un cluster Kubernetes, al contrario delle directory dello spazio dei nomi discendenti.

Per garantire che le origini dello spazio dei nomi e dello spazio dei nomi astratto abbiano il tipo corretto di configurazioni e struttura, quando si verifica un problema viene segnalato l'errore KNV1003: LegalNamespaceSubdirectoryError.

Le configurazioni in una directory dello spazio dei nomi si applicano solo a questo spazio dei nomi. Tuttavia, le configurazioni in una directory dello spazio dei nomi astratto vengono applicate a tutte le directory dello spazio dei nomi discendenti di quello spazio dei nomi astratto (o a quegli spazi dei nomi discendenti che corrispondono a NamespaceSelector di una configurazione, se presente).

L'ereditarietà di una configurazione nella directory namespaces/ si basa in gran parte sulla sua posizione all'interno della struttura di directory nella fonte attendibile. Per comprendere quali configurazioni vengono applicate a un determinato spazio dei nomi in un determinato cluster, puoi consultare il repository di esempi di ereditarietà dello spazio dei nomi.

Spazi dei nomi limitati

config-management-system è uno spazio dei nomi limitato. Non puoi usarla come directory dello spazio dei nomi astratta. Puoi definire uno spazio dei nomi config-management-system, ma l'unico tipo di risorsa consentito per lo spazio dei nomi config-management-system è RootSync.

Apportare modifiche alla fonte di riferimento

Quando apporti una modifica dell'origine attendibile che crea o elimina le directory dello spazio dei nomi dall'interno della directory namespaces/, potresti ottenere risultati imprevisti, a seconda dell'azione:

  • Creazione di una directory: quando una gerarchia namespaces/ valida viene impegnata nell'origine attendibile, Config Sync crea spazi dei nomi e poi crea oggetti Kubernetes al loro interno per ogni configurazione contenuta o ereditata dalla directory dello spazio dei nomi.
  • Eliminazione di una directory: l'eliminazione di una directory dello spazio dei nomi è un'operazione distruttiva. Lo spazio dei nomi e i suoi contenuti vengono eliminati su ogni cluster gestito da Config Sync in cui esiste lo spazio dei nomi. Se elimini una directory dello spazio dei nomi astratto contenente directory dello spazio dei nomi discendenti, tutti questi spazi dei nomi e i relativi contenuti vengono eliminati da ogni cluster gestito da Config Sync.
  • Rinominando una directory: la ridenominazione di una directory dello spazio dei nomi è un'eliminazione, seguita da una creazione ed è considerata un'operazione distruttiva. La ridenominazione di una directory dello spazio dei nomi astratto non ha alcun effetto visibile dall'esterno.

  • Spostamento di una directory: lo spostamento di uno spazio dei nomi o di una directory di uno spazio dei nomi astratto all'interno di namespaces/ non comporta l'eliminazione dello spazio dei nomi o degli oggetti al suo interno, tranne nel caso in cui lo spazio dei nomi inizia o smette di ereditare una configurazione da una directory dello spazio dei nomi astratto a causa di una modifica nella gerarchia.

Passaggi successivi