In dieser Anleitung erfahren Sie, wie Sie Config Sync für Google Kubernetes Engine (GKE) Enterprise in zwei Umgebungen einrichten, einer für die Entwicklung und einer für die Produktion, indem Sie die Best Practices für Config Sync verwenden.
In diesem Szenario sind Sie Teil eines Plattformadministratorteams bei Foo Corp. Die Foo Corp-Anwendungen werden in GKE Enterprise bereitgestellt, wobei die Ressourcen auf zwei Projekte verteilt sind: dev
und prod
. Das Projekt dev
enthält einen GKE Enterprise-Entwicklungscluster und das Projekt prod
enthält den GKE Enterprise-Produktionscluster. Ihr Ziel als Plattformadministrator besteht darin sicherzustellen, dass beide Umgebungen den Richtlinien von Foo Corp entsprechen und dass Ressourcen auf der Basisebene, wie Kubernetes-Namespaces und -Dienstkonten, in beiden Umgebungen konsistent bleiben.
Das folgende Diagramm bietet eine Übersicht über die Umgebungen, die Sie in dieser Anleitung einrichten:
In dieser Anleitung wird das automatisierte Renderingfeature in Config Sync zum Rendern der Ressourcen im Cluster verwendet. Jeder Cluster wird so konfiguriert, dass er aus einem Verzeichnis synchronisiert wird, das eine Kustomization-Konfigurationsdatei enthält, die den Renderingprozess in Config Sync automatisch auslöst. Weitere Informationen finden Sie unter Repository mit Kustomize-Konfigurationen und Helm-Diagrammen verwenden.
Wie im vorherigen Diagramm dargestellt, erstellen Sie in dieser Anleitung die folgenden Ressourcen:
- Zwei Google Cloud-Projekte, die die Entwicklungs- und Produktionsumgebungen darstellen.
- Zwei GKE-Cluster,
dev
undprod
, in den separaten Projekten, in denen Config Sync installiert ist.
Repository-Architektur
In dieser Anleitung konfigurieren Sie Config Sync für die Synchronisierung mit den Konfigurationen im Verzeichnis des config-source/
Repositorys . Dieses Verzeichnis enthält die folgenden Verzeichnisse und Dateien:
config-source/
├── base
│ ├── foo
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ └── serviceaccount.yaml
│ ├── kustomization.yaml
│ ├── pod-creator-clusterrole.yaml
│ └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│ ├── dev
│ │ └── kustomization.yaml
│ └── prod
│ └── kustomization.yaml
└── README.md
Das Verzeichnis config-source
enthält die base/
-Manifeste und die Kustomize-Overlays dev/
und prod/
. Jedes Verzeichnis enthält eine kustomization.yaml
-Datei, in der die Dateien aufgeführt sind, die Kustomize verwalten und auf den Cluster anwenden soll.
In dev/kustomization.yaml
und prod/kustomization.yaml
sind eine Reihe von Patches definiert. Mit diesen Patches werden die base/
-Ressourcen für diese Umgebung bearbeitet.
Beispielsweise ermöglicht das Entwicklungs-RoleBinding allen Entwicklern von Foo Corp, Pods im Entwicklungscluster bereitzustellen, während die Produktion RoleBinding nur dem Continuous Deployment-Agent deploy-bot@foo-corp.com
ermöglicht, Pods in der Produktion bereitzustellen:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
kind: ServiceAccount
name: foo-ksa
patch: |-
- op: replace
path: /metadata/name
value: foo-ksa-dev
- op: replace
path: /metadata/namespace
value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
kind: RoleBinding
name: pod-creators
patch: |-
- op: replace
path: /subjects/0/name
value: developers-all@foo-corp.com
commonLabels:
environment: dev
Ziele
- Config Sync so einrichten, dass die Konfiguration für die beiden separaten Umgebungen automatisch gerendert und synchronisiert wird.
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.
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
Bevor Sie mit dieser Anleitung beginnen, müssen Sie die folgenden Schritte ausgeführt haben:
Wählen Sie in der Google Cloud Console auf der Seite zur Projektauswahl zwei Google Cloud-Projekte aus.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
Führen Sie ein Upgrade Ihres Google Cloud CLI auf die neueste Version durch.
Installieren oder aktualisieren Sie den Befehl
nomos
.
Cluster erstellen und registrieren
Damit Sie sich auf den Workflow konzentrieren können, den Sie beim Konfigurieren von Config Sync für mehrere Umgebungen verwenden müssen, enthält das Verzeichnis multi-environments-kustomize
Skripts, die Sie verwenden können, um die Konfiguration von Config Sync zu automatisieren.
Klonen Sie das Beispiel-Repository:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Öffnen Sie den Ordner mit den Ressourcen, die Sie für diese Anleitung benötigen:
cd anthos-config-management-samples/multi-environments-kustomize/
Legen Sie die folgenden Variablen fest, um die in dieser Anleitung verwendeten Skripts auszuführen:
export DEV_PROJECT="DEV_PROJECT_ID" export PROD_PROJECT="PROD_PROJECT_ID" export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE" export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE" export CM_CONFIG_DIR="config-sync-rendering"
Dabei gilt:
DEV_PROJECT_ID
: die Projekt-ID des Google Cloud-Projekts, das Sie als Entwicklungsprojekt verwenden möchtenPROD_PROJECT_ID
: die Projekt-ID des Google Cloud-Projekts, das Sie als Produktionsprojekt verwenden möchtenDEV_CLUSTER_ZONE
: die Compute Engine-Zone, in der Sie Ihren Entwicklungscluster erstellen möchten. Beispiel:us-central1-c
PROD_CLUSTER_ZONE
: die Compute Engine-Zone, in der Sie den Produktionscluster erstellen möchten
Führen Sie das Skript
./create-clusters.sh
aus, um zwei Cluster zu erstellen:./create-clusters.sh
Dieses Skript erstellt einen GKE-Cluster mit dem Namen
dev
im Entwicklungsprojekt und einen GKE Enterprise-Cluster mit dem Namenprod
im Produktionsprojekt. Dieses Skript aktiviert auch die GKE Enterprise API und stellt eine Verbindung zu Ihren Clusterndev
undprod
her, sodass Sie mitkubectl
auf deren APIs zugreifen können.Beispielausgabe:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
Führen Sie das Skript
register-clusters.sh
aus, um Ihre Cluster in zwei separaten Anthos-Flotten zu registrieren:./register-clusters.sh
Dieses Skript erstellt ein Google Cloud-Dienstkonto und einen Schlüssel für die GKE Enterprise-Clusterregistrierung und registriert dann mit dem Befehl
gcloud container fleet memberships register
die Clusterdev
undprod
bei GKE Enterprise in eigene Projekte erstellen.Beispielausgabe:
Waiting for Feature Config Management to be created...done. ⭐️ Done registering clusters.
Config Sync einrichten
Nachdem Sie Ihre Cluster erstellt und registriert haben, können Sie Config Sync installieren und die Installation prüfen.
Config Sync installieren
Führen Sie das Skript install-config-sync.sh
aus, um Config Sync im Entwicklungs- und im Produktionscluster zu installieren:
./install-config-sync.sh
Erwartete Ausgabe:
🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.
Config Sync wird jetzt mit den Konfigurationen in Ihren Repositories synchronisiert.
Konfiguration prüfen
In diesem Abschnitt prüfen Sie, ob Ihre Cluster mit den Konfigurationen in Ihrem Repository synchronisiert werden:
Zum Prüfen des Status Ihrer Config Sync-Installation führen Sie den Befehl
nomos status
aus:nomos status
Sowohl die Entwicklungs- als auch die Produktionscluster sollten nun mit den entsprechenden Repositories synchronisiert werden:
gke_DEV_PROJECT_ID_us-central1-c_dev -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main SYNCED 8f2e196f Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-dev Current *gke_PROD_PROJECT_ID_us-central1-c_prod -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main SYNCED c91502ee Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-prod Current ```
Verwenden Sie
kubectl
, um zum Entwicklungscluster zu wechseln:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
Rufen Sie Namespaces ab, um zu prüfen, ob die Ressourcen synchronisiert wurden. Der Namespace
foo
sollte angezeigt werden.kubectl get namespace
Beispielausgabe:
NAME STATUS AGE config-management-monitoring Active 9m38s config-management-system Active 9m38s default Active 47h foo Active 9m5s kube-node-lease Active 47h kube-public Active 47h kube-system Active 47h resource-group-system Active 9m30s
Sie haben jetzt automatisiertes Rendering von Konfigurationen für eine Entwicklungs- und Produktumgebung in mehreren Google Cloud-Projekten und -Umgebungen eingerichtet.
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.
Alle Ressourcen löschen
Wenn Sie die Ressourcen löschen möchten, die Sie in dieser Anleitung erstellt haben, aber auch die Entwicklungs- und Produktionsprojekte beibehalten möchten, führen Sie das Bereinigungsskript aus:
./cleanup.sh
Projekte löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Sichere Rollouts mit Config Sync
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center