Config Sync mit Kustomize und Helm verwenden


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.

Ziele

  • Konfigurieren Sie Ihr Repository mit Kustomize-Konfigurationen, die auf ein Standard-Helm-Diagramm für cert-manager verweisen. cert-manager ist ein Tool für Kubernetes, mit dem Sie Ihre Zertifikate verwalten können.
  • Sehen Sie sich die Vorschau der von Ihnen erstellten Konfigurationen an und validieren Sie diese.
  • Mit Config Sync können Sie Ihr Diagramm automatisch rendern und Ihren Cluster mit Ihrem Repository synchronisieren.
  • Prüfen Sie, ob die Installation erfolgreich war.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Erstellen Sie einen Cluster, der die Anforderungen für Config Sync erfüllt und die folgenden Config Sync-Einstellungen verwendet, oder sorgen Sie dafür, dass Sie Zugriff auf einen solchen Cluster haben:
  4. Registrieren Sie den Cluster auf einer Flotte.
  5. Installieren Sie das nomos-Befehlszeilentool. Wenn Sie das nomos-Tool bereits installiert haben, müssen Sie ein Upgrade auf Version 1.9.0 oder höher ausführen.
  6. Installieren Sie Helm.

Es ist auch hilfreich, sich mit Git, Kustomize und Helm vertraut zu machen.

Repository konfigurieren

Die folgenden Aufgaben zeigen, wie Sie ein Git-Repository mit Konfigurationen vorbereiten, die Kustomize-Konfigurationen mit Helm-Diagrammen kombinieren:

  1. 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.

  2. Erstellen Sie im Stammverzeichnis Ihres Git-Repositorys eine Datei mit dem Namen kustomization.yaml und fügen Sie den folgenden Code in diese ein:

    # ./kustomization.yaml
    resources:
    - base
    
    patches:
    - path: ignore-deployment-mutation-patch.yaml
      target:
        kind: Deployment
    

    Diese 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.

  3. Erstellen Sie in Ihrem Git-Repository ein Verzeichnis mit dem Namen base:

    mkdir base
    
  4. Erstellen Sie im Verzeichnis base eine weitere Datei mit dem Namen kustomization.yaml und 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-manager
    

    Diese Datei ist die Kustomize-Basis, die das Remote-Helm-Diagramm rendert.

  5. Wechseln Sie zurück zum Stammverzeichnis Ihres Git-Repositorys, erstellen Sie eine Datei mit dem Namen ignore-deployment-mutation-patch.yaml und 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: ignore
    

    Diese Datei ist ein Patch, der auf das Helm-Basisdiagramm angewendet wird. Die Annotation client.lifecycle.config.k8s.io/mutation: ignore wird allen Deployments im Basisverzeichnis hinzugefügt.

  6. Ü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.

  1. Führen Sie den folgenden nomos hydrate-Befehl mit den folgenden Flags aus:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    Dabei gilt:

    • Mit --source-format=unstructured kann nomos hydrate an 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_DIRECTORY können Sie einen Pfad zu den gerenderten Konfigurationen definieren. Ersetzen Sie OUTPUT_DIRECTORY durch den Speicherort, an dem die Ausgabe gespeichert werden soll.
  2. Prüfen Sie die Syntax und Gültigkeit Ihrer Konfigurationen. Führen Sie dazu nomos vet mit den folgenden Flags aus:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    Dabei gilt:

    • Mit --source-format=unstructured kann nomos vet an einem unstrukturierten Repository arbeiten.
    • --keep-output=true speichert die gerenderten Konfigurationen.
    • --output=OUTPUT_DIRECTORY ist der Pfad zu den gerenderten Konfigurationen.

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. Wenn Sie Config Sync bereits installiert haben, fahren Sie mit Synchronisierungsstatus prüfen fort.

  1. Aktivieren Sie in der Google Cloud Console die GKE Hub API.

    Zur GKE Hub API

  2. Rufen Sie in der Google Cloud Console im Abschnitt Features die Seite Konfiguration auf.

    Zu „Config“

  3. Klicken Sie auf Config Sync installieren.

  4. Wählen Sie Automatische Upgrades aus, damit Config Sync die Versionen automatisch aktualisiert.

  5. Wählen Sie unter Installationsoptionen die Option Config Sync auf einzelnen Clustern installieren aus.

  6. Wählen Sie in der Tabelle Verfügbare Cluster cs-cluster aus und klicken Sie auf Config Sync installieren. Auf dem Tab Einstellungen sollte nach einigen Minuten der Status für cs-cluster als Aktiviert angezeigt werden.

  7. Klicken Sie im Config Sync-Dashboard auf Paket bereitstellen.

  8. Wählen Sie in der Tabelle Cluster für die Paketbereitstellung auswählen die Option cs-cluster aus und klicken Sie dann auf Weiter.

  9. Lassen Sie Paket gehostet auf Git aktiviert und klicken Sie dann auf Weiter.

  10. Geben Sie im Feld Paketname sample-repository ein.

  11. Geben Sie im Feld Repository-URL den Wert https://github.com/GoogleCloudPlatform/anthos-config-management-samples ein.

  12. Geben Sie im Feld Pfad config-sync-quickstart/multirepo/root ein.

  13. Behalten Sie in allen anderen Feldern die Standardwerte bei.

  14. Klicken Sie auf Paket bereitstellen.

    Nach einigen Minuten sollte in der Spalte Synchronisierungsstatus für cs-cluster der Wert Synchronisiert angezeigt werden.

Installation überprüfen

Nach der Installation und Konfiguration von Config Sync können Sie prüfen, ob die Installation erfolgreich abgeschlossen wurde.

  1. Prüfen Sie mit nomos status, ob keine anderen Fehler vorliegen:

    nomos status
    

    Beispielausgabe:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. Prüfen Sie, ob die Helm-Komponente erfolgreich installiert wurde:

    kubectl get all -n cert-manager
    

    Beispielausgabe:

    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
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Einzelne Ressourcen löschen

Manifeste im Repository löschen

Um zu verhindern, dass versehentlich gelöscht wird, können Sie mit Config Sync nicht alle Namespaces oder clusterbezogenen Ressourcen in einem einzigen Commit entfernen. Folgen Sie dieser Anleitung, um die Komponente ordnungsgemäß zu deinstallieren und den Namespace in separaten Commits zu entfernen:

  1. Entfernen Sie die Komponente "cert-manager" aus Ihrem Repository:

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    Ersetzen Sie BRANCH durch den Zweig, in dem Sie das Repository erstellt haben.

  2. Löschen Sie den Namespace "cert-manager":

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. Vergewissern Sie sich, dass der Namespace cert-manager nicht vorhanden ist:

    kubectl get namespace cert-namespace
    

    Beispielausgabe:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

Cluster löschen

Führen Sie die folgenden Befehle aus, um den Cluster zu löschen:

Console

Führen Sie die folgenden Aufgaben aus, um einen Cluster mithilfe der Google Cloud Console zu löschen:

  1. Öffnen Sie in der Google Cloud Console die Seite GKE.

    Zu GKE

  2. Klicken Sie neben dem Cluster, den Sie löschen möchten, auf Aktionen und dann auf Löschen.

  3. Wenn Sie zur Bestätigung des Vorgangs aufgefordert werden, klicken Sie noch einmal auf Löschen.

gcloud

Führen Sie zum Löschen eines Clusters mit dem Google Cloud CLI folgenden Befehl aus:

gcloud container clusters delete CLUSTER_NAME

Weitere Informationen finden Sie in der Dokumentation zu gcloud container clusters delete.

Nächste Schritte