Unstrukturiertes Repository verwenden

Wenn Sie ein unstrukturiertes Repository erstellen, können Sie Ihr Repository beliebig strukturieren, ohne der Standard-Repository-Verzeichnisstruktur folgen zu müssen. Config Sync synchronisiert denselben Satz von Kubernetes-Objekten mit Ihrem Cluster wie im standardmäßigen hierarchischen Repository.

Mit diesem Feature können Sie Ihre vorhandene Kubernetes-Konfiguration mit Ihrem Config Sync-Repository synchronisieren. Wenn Sie beispielsweise ein Helm-Diagramm mit Ihrem Cluster synchronisieren möchten, können Sie helm template ausführen und das gerenderte Manifest in Ihr Repository übertragen. Mit einem unstrukturierten Repository lassen sich auch Unterordner von Ressourcen erstellen.

Beschränkungen

Für unstrukturierte Repositories gelten folgende Einschränkungen:

  • Sie können in einem unstrukturierten Repository nicht die Kubernetes-Objekte Repo und HierarchyConfig verwenden.

  • Abstrakte Namespaces werden in unstrukturierten Repositories nicht unterstützt.

  • Wenn Sie den Befehl nomos vet verwenden, fügen Sie das Flag --source-format=unstructured hinzu. Beispiel:

    nomos vet --source-format=unstructured
    

Namespace-bezogene Objekte

Sie können in einem unstrukturierten Repository NamespaceSelectors deklarieren. Um einen NamespaceSelector zu deklarieren, fügen Sie entweder die Annotation metadata.namespace oder die Annotation NamespaceSelector hinzu. Die Angabe beider Annotationen ist ungültig. Wenn in Namespace-bezogenen Ressourcen weder die Annotation metadata.namespace noch die Annotation NamespaceSelector deklariert wurde, verwendet Config Sync den „Standard“-Namespace des Clusters.

Anders als bei einem hierarchischen Repository müssen in einem unstrukturierten Repository nicht alle Namespaces für die Namespace-bezogenen Objekte im Repository deklariert sein. Ein Objekt kann einen metadata.namespace definieren, ohne dass ein entsprechendes Namespace-Objekt im Repository vorhanden sein muss. Wenn der Namespace bereits im Cluster vorhanden ist, erstellt Config Sync das Objekt in diesem Namespace. Wenn der Namespace noch nicht im Cluster vorhanden ist, erstellt Config Sync den Namespace implizit.

In einem unstrukturierten Repository werden Objekte, die die Annotation NamespaceSelector deklarieren, auf alle Namespaces angewendet, die die NamespaceSelector's Bedingungen erfüllen. Bevor Sie ein unstrukturiertes Repository mit Objekten erstellen, die zuvor in einem hierarchischen Repository verwendet wurden, sollten Sie prüfen, ob Ihre NamespaceSelectors nicht auf zusätzliche Ressourcen angewendet werden.

Wenn Sie Namespace-bezogene Objekte aus einem unstrukturierten Repository entfernen, löscht Config Sync diese Objekte, jedoch keine Namespaces, die möglicherweise implizit für diese Objekte erstellt wurden. Dies liegt daran, dass Config Sync nicht ermitteln kann, wann sich ein Namespace, der implizit erstellt wurde, ohne Folgen löschen lässt. Deshalb verbleibt er dauerhaft im Cluster.

Clusterbezogene Objekte

In einem unstrukturierten Repository funktionieren ClusterSelectors wie gewohnt.

Unstrukturiertes Repository konfigurieren

Wenn Sie ein unstrukturiertes Repository konfigurieren möchten, setzen Sie den Wert von spec.sourceFormat in config-management.yaml auf unstructured.

Mit der folgenden Datei config-management.yaml wird beispielsweise eine Continuous Integration-Pipeline eingerichtet.

# 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: my-cluster
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/csp-config-management/ 
    syncBranch: 1.0.0
    secretType: ssh
    policyDir: ci-pipeline-unstructured
  sourceFormat: unstructured

Nächste Schritte