Best Practices für Kubernetes GitOps mit Config Sync
Diese Seite bietet einen Ausgangspunkt für die Planung und Entwicklung von CI/CD-GitOps-Pipelines für Kubernetes. So können Sie Config Sync optimal nutzen.
GitOps selbst ist eine universelle Best Practice für Organisationen, die die Kubernetes-Konfiguration bedarfsgerecht verwalten. Bei der Entwicklung dieser Lösung haben Sie jedoch viele Möglichkeiten. Wenn Sie die Optionen und Vor- und Nachteile dieser Entscheidungen kennen, können Sie Ihre Architektur in Zukunft vermeiden.
Sie müssen nicht alle auf dieser Seite aufgeführten Best Practices anwenden. Welche Best Practices Sie wählen, hängt von Ihrer individuellen Situation ab. Diese Seite soll Ihnen helfen, fundierte Entscheidungen beim Einrichten Ihrer GitOps-Architektur zu treffen.
Ein zentralisiertes, privates Paket-Repository verwenden
Wenn Sie ein zentrales Repository für öffentliche oder interne Pakete wie Helm oder kpt
verwenden, können Teams Pakete einfacher finden. Sie können Dienste wie Artifact Registry oder Git-Repositories verwenden.
Das Plattformteam kann Richtlinien implementieren, bei denen Anwendungsteams Pakete nur aus dem zentralen Repository verwenden können. Alternativ können sie das zentrale Repository als Gruppe überprüfter Pakete verwenden.
Sie können Schreibberechtigungen für das Repository auf eine kleine Anzahl von Entwicklern beschränken. Der Rest der Organisation kann Lesezugriff haben. Wir empfehlen, einen Prozess zum Hochstufen von Paketen in das zentrale Repository zu implementieren und Aktualisierungen zu übertragen.
Die folgende Tabelle enthält die Vorteile und Nachteile der Verwendung eines zentralisierten, privaten Paket-Repositorys:
Vorteile |
Nachteile |
|
|
Nasse Repositories erstellen
Erstellen Sie Repositories mit der YAML-Ausgabe, die dem gewünschten Status Ihres Clusters oder Namespace entspricht. Die Änderungen am feuchten oder voll hydratisierten Repository sollten anhand eines Unterschieds leicht geprüft werden können. Es empfiehlt sich, Änderungen nur am Nass-Repository während eines Überprüfungsprozesses vorzunehmen. In GitHub wäre dies beispielsweise eine Pull-Anfrage.
In der folgenden Tabelle sind die Vorteile und Nachteile des Erstellens von Nass-Repositories aufgeführt:
Vorteile |
Nachteile |
|
|
Zum Validieren von Konfigurationen nach links verschieben
Das Warten auf das Synchronisieren von Config Sync auf Probleme kann zu unnötigen Git-Commits und einer langen Feedbackschleife führen. Viele Probleme können auftreten, bevor eine Konfiguration auf einen Cluster angewendet wird. Verwenden Sie dazu kpt
-Validierungsfunktionen wie kubeval.
In der folgenden Tabelle sind die Vor- und Nachteile einer Prüfung auf Probleme vor dem Anwenden einer Konfiguration aufgeführt:
Vorteile |
Nachteile |
|
|
Ordner anstelle von Zweigen verwenden
Verwenden Sie Ordner anstelle von Zweigen für Varianten der Konfiguration. Mit Ordnern können Sie mit dem Befehl tree
Varianten aufrufen. Bei Zweigen können Sie beispielsweise nicht erkennen, ob das Delta zwischen einem Produktions- und Phasenzweig eine bevorstehende Änderung der Konfiguration oder ein dauerhafter Unterschied zwischen der Phase und dem Produktions ist.
In der folgenden Tabelle sind die Vorteile und Nachteile der Verwendung von Ordnern anstelle von Zweigen aufgeführt:
Vorteile |
Nachteile |
|
|
Nutzung von ClusterSelectors
minimieren
Mit ClusterSelectors
können Sie bestimmte Teile einer Konfiguration auf eine Teilmenge von Clustern anwenden. Statt eine RootSync- oder RepoSync-Konfiguration zu konfigurieren, können Sie entweder die angewendete Ressource ändern oder Labels zu den Clustern hinzufügen. Wenn die Anzahl von ClusterSelectors
mit der Zeit größer wird, kann es jedoch kompliziert werden, den endgültigen Zustand des Clusters zu verstehen.
Mit Config Sync können Sie mehrere RootSyncs
und RepoSyncs
gleichzeitig synchronisieren. Sie können die relevante Konfiguration also einem separaten Repository hinzufügen und dann mit den gewünschten Clustern synchronisieren.
In der folgenden Tabelle sind die Vorteile und Nachteile von ClusterSelectors
nicht aufgeführt:
Vorteile |
Nachteile |
|
|
Unstrukturierte Repositories verwenden
Config Sync unterstützt zwei Strukturen zum Organisieren eines Repositorys: unstrukturiert und hierarchisch. Wir empfehlen die Option „Unstrukturiert“, da Sie damit ein Repository auf eine Weise verwalten können, die für Sie am besten geeignet ist.
Hierarchische Repositories erzwingen dagegen eine bestimmte Struktur. CRDs müssen sich beispielsweise in einem bestimmten Verzeichnis befinden. Dies kann zu Problemen führen, wenn Sie Konfigurationen freigeben müssen. Wenn ein Team beispielsweise ein Paket veröffentlicht, das eine CRD enthält, muss ein anderes Team, das dieses Paket verwenden muss, die CRD in ein cluster
-Verzeichnis verschieben, wodurch der Prozess erhöht wird.
In der folgenden Tabelle sind die Vor- und Nachteile von unstrukturierten Repositories aufgeführt:
Vorteile |
Nachteile |
|
|
Informationen zum Konvertieren eines hierarchischen Repositorys finden Sie unter Ein hierarchisches Repository in ein unstrukturiertes Repository konvertieren.
Code- und Konfigurations-Repositories trennen
Zum Hochskalieren eines Mono-Repositorys ist ein individueller Build für jeden Ordner erforderlich. Berechtigungen und Bedenken für Personen, die am Code arbeiten und an der Clusterkonfiguration arbeiten, sind im Allgemeinen unterschiedlich. Wenn Sie Code- und Konfigurations-Repositories getrennt halten, kann jedes Repository eigene Berechtigungen und Strukturen haben.
In der folgenden Tabelle sind die Vor- und Nachteile der Trennung von Code- und Konfigurations-Repositories aufgeführt:
Vorteile |
Nachteile |
|
|
Änderungen mit separaten Repositories isolieren
Beim Hochskalieren eines Mono-Repositorys sind unterschiedliche Berechtigungen für verschiedene Ordner erforderlich. Aus diesem Grund ermöglicht das Trennen von Repositories Sicherheitsgrenzen zwischen Sicherheits-, Plattform- und Anwendungskonfigurationen. Es ist auch sinnvoll, Produktions- und Nicht-Produktions-Repositories zu trennen.
In der folgenden Tabelle sind die Vor- und Nachteile von isolierten Änderungen in separaten Repositories aufgeführt:
Vorteile |
Nachteile |
|
|
Paketversionen anpinnen
Unabhängig davon, ob Sie Helm oder Git verwenden, sollten Sie die Version des Konfigurationspakets an etwas anpinnen, das nicht versehentlich ohne ein explizites Roll-out verschoben wird.
In der folgenden Tabelle sind die Vor- und Nachteile der Paketversionen aufgeführt:
Vorteile |
Nachteile |
|
|
Workload Identity verwenden
Sie können Workload Identity in GKE-Clustern aktivieren, mit der Kubernetes-Arbeitslasten sicher und überschaubar auf Google-Dienste zugreifen können.
In der folgenden Tabelle sind die Vorteile und Nachteile von Workload Identity aufgeführt:
Vorteile |
Nachteile |
|
|
Gesamtarchitektur
Grundsätzlich möchten Sie mindestens vier Arten von Repositories:
- Ein Paket-Repository, in dem die freigegebene Konfiguration gespeichert wird. Dies kann auch ein Helm-Diagramm sein, das in Artifact Registry gespeichert ist.
- Ein Plattform-Repository, in dem das Plattformteam eine flottenweite Konfiguration für Cluster und Namespaces speichert.
- Ein Anwendungskonfigurations-Repository.
- Ein Anwendungscode-Repository.
Das folgende Diagramm zeigt das Layout dieser Repositories:

Das folgende Diagramm zeigt den Konfigurationsfluss vom Anwendungscode zu einem Anwendungskonfigurations-Repository. Entwicklungsteams übertragen Code für Anwendungen und Anwendungskonfigurationen in ein Repository. Der Code für Anwendungen und Konfigurationen wird am selben Ort gespeichert und Anwendungsteams haben die Kontrolle über diese Repositories. App-Teams können dann Code in einen Build übertragen.
