In dieser Anleitung fügen Sie Ihrem Repository Kustomize-Konfigurationen hinzu, die auf Helm-Diagramme verweisen. Anschließend verwenden Sie Config Sync, um Ihren Cluster mit Ihrem Repository zu synchronisieren.
Wenn Sie Config Sync verwenden, werden die Kustomize-Konfigurationen und Helm-Diagramme, die Sie in Ihrem Git-Repository speichern, automatisch gerendert. Das automatische Rendering bietet folgende Vorteile:
Sie benötigen keine externe Hydrationspipeline mehr. Ohne automatisiertes Rendering müssen Sie die Konfigurationen manuell mit Kustomize und Helm auf Ihrer Workstation rendern oder einen Schritt einrichten, um den Hydrationsprozess in Ihren CI-Systemen auszulösen. Bei automatisiertem Rendering übernimmt Config Sync die Ausführung.
Ihre Wartungskosten werden reduziert. Ohne automatisiertes Rendering müssen Sie ein Git-Repository mit den ursprünglichen Kustomize-Konfigurationen und Helm-Diagrammen und ein weiteres Git-Repository mit der von der externen Hydration generierten Ausgabe verwalten. Anschließend müssen Sie Config Sync für die Synchronisierung aus dem Git-Repository mit der gerenderten Ausgabe konfigurieren. Beim automatisierten Rendering müssen Sie nur ein einziges Repository mit den ursprünglichen Konfigurationen verwalten.
Ihr Entwicklungsworkflow wird vereinfacht. Ohne automatisiertes Rendering müssen Änderungen an Ihren ursprünglichen Konfigurationen zweimal überprüft werden, bevor sie zusammengeführt werden: einmal im ursprünglichen Repository und einmal im gerenderten Repository. Beim automatisierten Rendering werden die gerenderten Konfigurationen von Config Sync generiert. Sie müssen nur die Änderungen an den ursprünglichen Konfigurationen überprüfen.
Repository konfigurieren
Die folgenden Aufgaben zeigen, wie Sie ein Git-Repository mit Konfigurationen vorbereiten, die Kustomize-Konfigurationen mit Helm-Diagrammen kombinieren:
Erstellen Sie ein Git-Repository oder sorgen Sie dafür, dass Sie darauf zugreifen können. Da Ihr Repository Kustomize und Helm verwendet, sollte dies ein unstrukturiertes Repository sein.
Erstellen Sie im Stammverzeichnis Ihres Git-Repositorys eine Datei mit dem Namen
kustomization.yamlund fügen Sie den folgenden Code in diese ein:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: DeploymentDiese Datei ist ein Kustomize-Overlay, das auf die Kustomize-Basis verweist. Dieses Overlay enthält einen Patch für die Helm-Diagrammbasis, der die
client.lifecycle.config.k8s.io/mutation: ignore-Annotation zu allen Deployment-Objekten hinzufügt. Die Annotation bewirkt, dass Config Sync in Konflikt stehende Änderungen an diesem Objekt im Cluster ignoriert, nachdem Sie es erstellt haben.Erstellen Sie in Ihrem Git-Repository ein Verzeichnis mit dem Namen
base:mkdir baseErstellen Sie im Verzeichnis
baseeine weitere Datei mit dem Namenkustomization.yamlund fügen Sie den folgenden Code in diese ein:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-managerDiese Datei ist die Kustomize-Basis, die das Remote-Helm-Diagramm rendert.
Wechseln Sie zurück zum Stammverzeichnis Ihres Git-Repositorys, erstellen Sie eine Datei mit dem Namen
ignore-deployment-mutation-patch.yamlund fügen Sie den folgenden Code in diese ein:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignoreDiese Datei ist ein Patch, der auf das Helm-Basisdiagramm angewendet wird. Die Annotation
client.lifecycle.config.k8s.io/mutation: ignorewird allen Deployments im Basisverzeichnis hinzugefügt.Übernehmen Sie die Änderungen für Ihr Repository:
git add . git commit -m 'Set up manifests.' git push
Das Beispiel-Repository enthält ein Beispiel für ein solches Repository.
Vorschau gerenderter Konfigurationen anzeigen und diese validieren
Bevor Config Sync die Konfigurationen rendert und mit dem Cluster synchronisiert, prüfen Sie, ob die Konfigurationen korrekt sind. Führen Sie dazu nomos hydrate aus, um eine Vorschau der gerenderten Konfiguration anzuzeigen, und nomos vet, um zu prüfen, ob das Format korrekt ist.
Führen Sie den folgenden
nomos hydrate-Befehl mit den folgenden Flags aus:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYDabei gilt:
- Mit
--source-format=unstructuredkannnomos hydratean einem unstrukturierten Repository arbeiten. Da Sie Kustomize-Konfigurationen und Helm-Diagramme verwenden, müssen Sie ein unstrukturiertes Repository verwenden und dieses Flag hinzufügen. - Mit
--output=OUTPUT_DIRECTORYkönnen Sie einen Pfad zu den gerenderten Konfigurationen definieren. Ersetzen SieOUTPUT_DIRECTORYdurch den Speicherort, an dem die Ausgabe gespeichert werden soll.
- Mit
Prüfen Sie die Syntax und Gültigkeit Ihrer Konfigurationen. Führen Sie dazu
nomos vetmit den folgenden Flags aus:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYDabei gilt:
- Mit
--source-format=unstructuredkannnomos vetan einem unstrukturierten Repository arbeiten. --keep-output=truespeichert die gerenderten Konfigurationen.--output=OUTPUT_DIRECTORYist der Pfad zu den gerenderten Konfigurationen.
- Mit
Synchronisierung über das Git-Repository konfigurieren
Nachdem Sie ein Repository mit den Konfigurationen erstellt haben, die Sie verwenden möchten, können Sie die Synchronisierung von Ihrem Cluster zu Ihrem Repository konfigurieren.
Erstellen Sie eine
root-sync.yaml-Datei, um IhrRootSync-Objekt zu konfigurieren:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: trueErsetzen Sie
YOUR_GIT_REPOSITORYdurch die URL Ihres Git-Repositorys.Wenden Sie die Datei
root-sync.yamlauf Ihren Cluster an:kubectl apply -f root-sync.yaml
Installation überprüfen
Nach der Installation und Konfiguration von Config Sync können Sie prüfen, ob die Installation erfolgreich abgeschlossen wurde.
Prüfen Sie mit
nomos status, ob keine anderen Fehler vorliegen:nomos statusBeispielausgabe:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5aPrüfen Sie, ob die Helm-Komponente erfolgreich installiert wurde:
kubectl get all -n cert-managerBeispielausgabe:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m