Unstrukturiertes Repository verwenden

Ein unstrukturiertes Repository ermöglicht es Ihnen, Ihr Repository beliebig zu organisieren. Dank dieser Flexibilität 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.

Für die meisten Nutzer werden unstrukturierte Repositories empfohlen. Sie können aber auch ein hierarchisches Repository erstellen, um Konfigurationen in unterschiedliche Kategorien zu trennen. Wenn Sie hierarchische Richtlinien erstellen möchten, ohne den Regeln des hierarchischen Repositorys zu entsprechen, können Sie den Hierarchie-Controller verwenden.

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 ein übereinstimmendes Namespace-Objekt in einem unstrukturierten Repository zu haben. 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

Setzen Sie zum Konfigurieren eines unstrukturierten Repositorys den Wert von spec.sourceFormat in Ihrem ConfigManagement-Objekt auf unstructured.

Das folgende ConfigManagement-Objekt richtet eine Pipeline für Continuous Integration ein und gibt an, dass das Repository, mit dem es synchronisiert wird, unstrukturiert ist:

# 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: init
    secretType: ssh
    policyDir: ci-pipeline-unstructured

Hierarchisches Repository in ein unstrukturiertes Repository konvertieren

Wenn Sie ein hierarchisches Repository verwenden und es in ein unstrukturiertes Repository konvertieren möchten, folgen Sie dieser Anleitung, um es zu konvertieren:

  1. Entfernen Sie Repo-Konfigurationen aus dem Verzeichnis system/ aus Ihrem Git-Repository. Die Repository-Ressource wird für das unstrukturierte Repository nicht benötigt.

  2. Abstrakter Namespace wird im unstrukturierten Repository nicht unterstützt. Überprüfen Sie daher die Ressourcen im Verzeichnis namespaces/ und achten Sie darauf, dass für jede Ressource ein Namespace deklariert ist.

  3. Die Namespace-Übernahme wird in einem unstrukturierten Repository nicht unterstützt. Prüfen Sie daher Ressourcen, die sich im Verzeichnis namespaces/, aber nicht unter namespaces/NAMESPACE/ befinden. Im unstrukturierten Repository werden diese Ressourcen nicht mehr von jedem Namespace in namespaces/ übernommen. Sie müssen sie in jedem /namespaces/NAMESPACE-Verzeichnis deklarieren.

Nächste Schritte