Teamressourcen in Ihrer Flotte verwalten
Auf dieser Seite wird erläutert, wie Sie mit Config Sync und Terraform teambezogene Ressourcen in einer Reihe von Clustern dynamisch erstellen. Config Sync erweitert die Möglichkeiten der Flottenteamverwaltung, um Infrastruktur- und Clusterkonfigurationen für Ihre Flotten zu erstellen und zu verwalten.
In diesem Leitfaden wird davon ausgegangen, dass Sie bereits mit Konzepten zur Flottenteamverwaltung wie Teambereichen und Flotten-Namespaces vertraut sind. Weitere Informationen finden Sie in der Übersicht über die Flottenteamverwaltung.
Eine End-to-End-Anleitung mit Beispielkonfigurationen finden Sie in der Anleitung zur Flottenmandantenfähigkeit im Beispiel-Repository.
Eine Liste der für Config Sync in Terraform unterstützten Felder finden Sie in der Terraform-Referenzdokumentation für die Features der GKE-Flotte.
Beispielworkflow
Sie sind Plattformadministrator und möchten Ressourcen in einer Flotte von Clustern dynamisch erstellen, wobei verschiedene Teams unterschiedliche Anforderungen haben. Sie können beispielsweise eine NetworkPolicy
auf die Namespaces Ihres Backend-Teams anwenden, aber nicht auf die Namespaces Ihres Frontend-Teams.
In diesem Szenario werden teambezogene Ressourcen in einem Namespace so erstellt:
- Wählen oder erstellen Sie die Flotte, in der Sie Ressourcen für Teams verwalten möchten.
- Richten Sie Ihre „Source of Truth“ ein. Die „Source of Truth“ enthält die
NamespaceSelector
-Objekte, mit denen Sie Namespaces auf Flottenebene in Ihren Teambereichen auswählen, sowie alle Ressourcen (z. B.NetworkPolicy
), die Sie über diese Namespaces synchronisieren möchten. Erstellen Sie die Standardkonfiguration auf Flottenebene für Config Sync. Config Sync verwendet diese Standardeinstellungen bei der Synchronisierung mit der im vorherigen Schritt erstellten „Source of Truth“. Diese Config Sync-Einstellungen gelten für alle neuen Cluster, die in der Flotte erstellt werden.
Cluster in Ihrer Flotte erstellen.
Erstellen Sie Ihre Frontend- und Backend-Teambereiche und Namespaces, damit Config Sync Ressourcen in Ihren Namespaces erkennen und abgleichen kann.
Nachdem Sie diese Schritte ausgeführt haben, erstellt Config Sync das NetworkPolicy
anhand des NamespaceSelector
und wendet es auf die Namespaces des Backend-Teams an. Wenn Sie Ressourcen ändern oder hinzufügen, erkennt Config Sync kontinuierlich Änderungen an Ihren Konfigurationsdateien, Teambereichen, Flotten-Namespaces und Flottenmitgliedern und wendet diese kontinuierlich an.
Preise
Config Sync und Features für die Flottenteamverwaltung sind nur für Nutzer verfügbar, die GKE Enterprise aktiviert haben. Weitere Informationen zu GKE Enterprise-Preisen finden Sie auf der GKE-Preisseite.
Hinweise
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Google Cloud-Projekt erstellen oder auswählen.
-
Erstellen Sie ein Google Cloud-Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch einen Namen für das Google Cloud-Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch den Namen Ihres Google Cloud-Projekts.
-
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Google Cloud-Projekt erstellen oder auswählen.
-
Erstellen Sie ein Google Cloud-Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch einen Namen für das Google Cloud-Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch den Namen Ihres Google Cloud-Projekts.
-
- Erstellen Sie eine „Source of Truth“ oder haben Sie Zugriff darauf (entweder ein Git-Repository oder ein OCI-Image), in dem Sie Ihre Konfigurationsdateien speichern können. Für die Beispiele in diesem Leitfaden wird ein Git-Repository verwendet.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen von Teamressourcen für Ihre Flotte benötigen:
-
Flottenressourcen verwalten:
Fleet Admin (früher GKE Hub Admin) (
roles/gkehub.admin
) -
GKE-Cluster erstellen:
Administrator für Kubernetes Engine-Cluster (
roles/container.clusterAdmin
) -
GKE Enterprise aktivieren:
Service Usage-Administrator (
roles/serviceusage.serviceUsageAdmin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Nutzeranmeldedaten beziehen
Führen Sie zum Ausführen der Terraform-Befehle in dieser Anleitung in Ihrer lokalen Umgebung den folgenden Befehl aus, um neue Nutzeranmeldedaten zu erhalten:
gcloud auth application-default login
Flotte einrichten
In diesem Abschnitt erstellen Sie Ihre Flotte und aktivieren die erforderlichen Dienste.
Führen Sie die folgenden Schritte aus, um Ihre Flotte einzurichten:
Erstellen Sie ein Verzeichnis für die Terraform-Dateien der Flottenkonfiguration. Fügen Sie diesem Verzeichnis eine
main.tf
-Datei und einevariables.tf
-Datei hinzu.Fügen Sie der Datei
variables.tf
die folgenden Variablen hinzu:Fügen Sie der Datei
main.tf
die folgenden Ressourcen hinzu:Exportieren Sie die Variable PROJECT_ID:
export TF_VAR_project=PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die ID des Projekts, in dem Sie Ihre Flotte erstellen möchten.Initialisieren Sie Terraform in dem von Ihnen erstellten Verzeichnis:
terraform init
Prüfen Sie, ob die mit Terraform vorgeschlagenen Änderungen mit dem erwarteten Plan übereinstimmen:
terraform plan
Erstellen Sie die Flotte, aktivieren Sie die APIs und erstellen Sie das Dienstkonto:
terraform apply
Es kann manchmal einige Minuten dauern, bis alle Dienste aktiviert sind.
Ihre „Source of Truth“ einrichten
In diesem Abschnitt fügen Sie einer „Source of Truth“ Konfigurationsdateien hinzu.
Für jeden Teambereich, den Sie verwenden möchten, benötigen Sie ein NamespaceSelector
-Objekt.
Wenn Sie beispielsweise Frontend- und Backend-Teams haben, müssen Sie für jedes Team ein NamespaceSelector
-Objekt erstellen. Das Objekt NamespaceSelector
wählt alle oder einen Teil der Namespaces innerhalb eines Teambereichs aus. Sie können Ihrer Datenquelle weitere Teamressourcen hinzufügen, z. B. NetworkPolicy
. Wenn Sie diese Ressourcen erstellen, verweisen Sie auf die NamespaceSelector
, damit Config Sync diese Ressourcen dynamisch in allen Namespaces bereitstellen und synchronisieren kann.
So richten Sie Ihre „Source of Truth“ ein:
Erstellen Sie als „Source of Truth“ ein Verzeichnis für die Konfigurationsdateien, von denen Config Sync synchronisiert werden soll.
Erstellen Sie für jedes Team ein
NamespaceSelector
-Objekt in Ihrem Konfigurationsverzeichnis:apiVersion: configmanagement.gke.io/v1 kind: NamespaceSelector metadata: name: NAMESPACE_SELECTOR_NAME spec: mode: dynamic selector: matchLabels: fleet.gke.io/fleet-scope: SCOPE_NAME
Ersetzen Sie Folgendes:
NAMESPACE_SELECTOR_NAME
: der Name für dasNamespaceSelector
-Objekt, z. B.backend-scope
.SCOPE_NAME
: der Name Ihres Teambereichs, z. B.backend
.
Alle Namespaces, die Teil eines Flotten-Namespace sind, haben automatisch das Label
fleet.gke.io/fleet-scope: SCOPE_NAME
. DerNamespaceSelector
wählt alle Flotten-Namespaces eines Teambereichs anhand dieses Labels aus. Weitere Beispiele zum Ein- oder Ausschließen von Namespaces finden Sie in denNamespaceSelector
-Beispielen.Erstellen Sie alle Objekte, die Sie über Namespaces synchronisieren möchten.
Um ein Objekt nur mit einem bestimmten Team zu synchronisieren, legen Sie die folgende Annotation in den Metadaten dieses Objekts fest:
annotations: configmanagement.gke.io/namespace-selector: NAMESPACE_SELECTOR_NAME
Ein
NetworkPolicy
für das Backend-Team könnte beispielsweise so aussehen:
Standardeinstellungen auf Flottenebene für Config Sync erstellen
In diesem Abschnitt erstellen Sie Standardeinstellungen für Config Sync auf Flottenebene. Dabei wird dieselbe Config Sync-Konfiguration auf alle in Ihrer Flotte erstellten Cluster angewendet.
Führen Sie die folgenden Schritte aus, um eine Standardkonfiguration auf Flottenebene für Config Sync zu erstellen:
Erstellen Sie ein Verzeichnis für die Terraform-Dateien der Standardkonfiguration der Flotte. Fügen Sie diesem Verzeichnis eine
main.tf
-Datei und einevariables.tf
-Datei hinzu.Fügen Sie der Datei
variables.tf
die folgenden Variablen hinzu:Fügen Sie in der Datei
main.tf
die folgende Ressource hinzu, um die Einstellungen von Config Sync zu konfigurieren:git
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" git { sync_repo = "REPO" sync_branch = "BRANCH" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Ersetzen Sie Folgendes:
VERSION
: (optional) die Config Sync-Versionsnummer. Muss auf Version 1.17.0 oder höher festgelegt sein. Wenn Sie das Feld leer lassen, wird die aktuelle Version verwendet.REPO
: Die URL zu dem Repository, das Ihre Konfigurationsdateien enthält.BRANCH
: der Repository-Zweig, z. B.main
.DIRECTORY
: der Pfad innerhalb des Git-Repositorys, der die oberste Ebene des Repositorys darstellt, das Sie synchronisieren möchten.SECRET
: der geheime Authentifizierungstyp.
Eine vollständige Liste der Einstellungen, die im Config Sync-Block
git
unterstützt werden, finden Sie in der Terraform-Referenzdokumentation für GKE-Hub-Features.OCI
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" oci { sync_repo = "REPO" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Ersetzen Sie Folgendes:
VERSION
: Die Versionsnummer von Config Sync. Muss auf Version 1.17.0 oder höher festgelegt sein. Wenn Sie das Feld leer lassen, wird die aktuelle Version verwendet.REPO
: Die URL zum OCI-Image-Repository, das die Konfigurationsdateien enthält.DIRECTORY
: der absolute Pfad des Verzeichnisses, das die Ressourcen enthält, die Sie synchronisieren möchten. Lassen Sie das Feld leer, um das Stammverzeichnis zu verwenden.SECRET
: der Secret-Authentifizierungstyp.
Eine vollständige Liste der Einstellungen, die im Config Sync-Block
oci
unterstützt werden, finden Sie in der Terraform-Referenzdokumentation für GKE-Hub-Features.Die folgende Datei
main.tf
konfiguriert beispielsweise Config Sync für die Synchronisierung aus einem Git-Repository und synchronisiert alle Objekte im Verzeichnisconfig
:Initialisieren Sie Terraform in dem von Ihnen erstellten Verzeichnis:
terraform init
Prüfen Sie, ob die mit Terraform vorgeschlagenen Änderungen mit dem erwarteten Plan übereinstimmen:
terraform plan
Erstellen Sie die Standardkonfigurationen für Flottenmitglieder:
terraform apply
Cluster in Ihrer Flotte erstellen
In diesem Abschnitt erstellen Sie eine freigegebene Clusterkonfiguration und dann Cluster in Ihrer Flotte.
Führen Sie die folgenden Schritte aus, um neue Cluster bei Ihrer Flotte zu erstellen und zu registrieren:
Erstellen Sie ein Verzeichnis für die Terraform-Dateien der Clusterkonfiguration. Fügen Sie diesem Verzeichnis eine
main.tf
-Datei und einevariables.tf
-Datei hinzu.Fügen Sie der Datei
variables.tf
die folgenden Variablen hinzu:Erstellen Sie eine
cluster.tf
-Datei mit Standardwerten, die in allen Clustern verwendet werden, z. B. Ihre Projekt- und Flotten-IDs:variable "location" { type = string } variable "cluster_name" { type = string } data "google_project" "project" { provider = google } resource "google_container_cluster" "cluster" { provider = google name = var.cluster_name location = var.location initial_node_count = 3 project = data.google_project.project.project_id fleet { project = data.google_project.project.project_id } workload_identity_config { workload_pool = "${data.google_project.project.project_id}.svc.id.goog" } deletion_protection = false }
Fügen Sie der Datei
main.tf
die folgenden Ressourcen hinzu:terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } module "MODULE_NAME" { source = "CLUSTER_CONFIGURATION_FILEPATH" cluster_name = "CLUSTER_NAME" location="CLUSTER_LOCATION" }
Ersetzen Sie Folgendes:
MODULE_NAME
: der Name, den Sie dem Clustermodul geben möchten. MODULE_NAME und CLUSTER_NAME können derselbe Wert sein, z. B.us-east-cluster
.CLUSTER_CONFIGURATION_FILEPATH
: der relative Pfad zu der von Ihnen erstelltencluster.tf
-Datei.CLUSTER_NAME
: Der Name Ihres Clusters. MODULE_NAME und CLUSTER_NAME können derselbe Wert sein, z. B.us-east-cluster
.CLUSTER_LOCATION
: der Standort des Clusters, z. B.us-east1
.
Sie können beliebig viele Cluster erstellen. Beispielsweise werden mit der folgenden
main.tf
-Datei drei Cluster in verschiedenen Regionen erstellt:Initialisieren Sie Terraform in dem von Ihnen erstellten Verzeichnis:
terraform init
Prüfen Sie, ob die mit Terraform vorgeschlagenen Änderungen mit dem erwarteten Plan übereinstimmen:
terraform plan
Erstellen Sie die Cluster:
terraform apply
Teambereiche und Flotten-Namespaces konfigurieren
In diesem Abschnitt erstellen Sie die Teambereiche und verknüpfen Ihre Cluster mit diesen Bereichen. Anschließend erstellen Sie die erforderlichen Flotten-Namespaces, z. B. einen für jedes Team in jedem Bereich, und Config Sync erstellt die Ressourcen in allen Namespaces.
Führen Sie die folgenden Schritte aus, um Teambereiche und Namespaces zu konfigurieren:
Erstellen Sie ein Verzeichnis für die Terraform-Dateien für den Teambereich und die Namespace-Konfiguration. Fügen Sie diesem Verzeichnis eine
main.tf
-Datei und einevariables.tf
-Datei hinzu.Fügen Sie der Datei
variables.tf
die folgenden Variablen hinzu:Fügen Sie der Datei
main.tf
die folgenden Ressourcen hinzu:Fügen Sie die Anbieterinformationen hinzu:
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project }
Fügen Sie die Teambereichsressource hinzu:
resource "google_gke_hub_scope" "scope" { provider = google for_each = toset([ "SCOPE_NAME", "SCOPE_NAME_2", ]) scope_id = each.value }
Ersetzen Sie Folgendes:
SCOPE_NAME
: der Name Ihres Teambereichs, z. B.backend
.SCOPE_NAME_2
: Ein zusätzlicher Teambereich, falls Sie einen erstellt haben.
Sie können beliebig viele Teambereiche hinzufügen. Wenn ein Flotten-Namespace im Cluster erstellt wird, erhält er automatisch das Label
fleet.gke.io/fleet-scope: SCOPE_NAME
, sodass Config Sync Namespaces anhand derNamespaceSelector
-Labels auswählen kann, die beim Synchronisieren von Kubernetes-Ressourcen vorhanden sind.Eine Terraform-Ressource des Teambereichs, die einen Bereich für das Frontend- und das Backend-Team enthält, könnte beispielsweise so aussehen:
Fügen Sie für jeden Cluster, den Sie auf einen Teambereich anwenden möchten, eine Bindung für die Flottenmitgliedschaft hinzu:
resource "google_gke_hub_membership_binding" "membership-binding" { provider = google for_each = { MEMBERSHIP_BINDING_NAME = { membership_binding_id = "MEMBERSHIP_BINDING_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name membership_id = "CLUSTER_NAME" location = "CLUSTER_LOCATION" } MEMBERSHIP_BINDING_NAME_2 = { membership_binding_id = "MEMBERSHIP_BINDING_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME_2"].name membership_id = "CLUSTER_NAME_2" location = "CLUSTER_LOCATION_2" } } membership_binding_id = each.value.membership_binding_id scope = each.value.scope membership_id = each.value.membership_id location = each.value.location depends_on = [google_gke_hub_scope.scope] }
Ersetzen Sie Folgendes:
MEMBERSHIP_BINDING_NAME
: der Name der Mitgliedschaftsbindung, z. B.us-east-backend
.MEMBERSIP_BINDING_ID
: Die ID der Mitgliedschaftsbindung. Dies kann mit MEMBERSHIP_BINDING_NAME identisch sein.SCOPE_NAME
: die Labelauswahl, die Sie Ihrem Team beim Erstellen einerNamespaceSelector
zugewiesen haben, z. B.backend
.CLUSTER_NAME
: der Name des Clusters, den Sie beim Erstellen von Clustern angelegt haben, z. B.us-east-cluster
.CLUSTER_LOCATION
: der Clusterstandort, z. B.us-east1
.
Sie müssen für jeden Cluster eine Bindung zur Flottenmitgliedschaft definieren. Wenn Sie keinen Teambereich für einen Cluster definieren, wird dieser Cluster nicht für diesen Namespace erstellt. Wenn Sie beispielsweise drei Cluster in den Regionen
us-east1
,us-west1
undus-central1
haben, derus-central1
-Cluster jedoch nur für das Front-End-Team bestimmt ist, würde Ihre Mitgliedschaftsbindungsressource so aussehen:Fügen Sie alle Namespaces hinzu, die Sie für Ihre Teams definieren möchten:
resource "google_gke_hub_namespace" "fleet_namespace" { provider = google for_each = { FLEET_NAMESPACE = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } FLEET_NAMESPACE_2 = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } } scope_namespace_id = each.value.scope_namespace_id scope_id = each.value.scope_id scope = each.value.scope depends_on = [google_gke_hub_scope.scope] }
Ersetzen Sie Folgendes:
FLEET_NAMESPACE
: der Name, den Sie dem Namespace geben möchten, z. B.backend-a
.SCOPE_NAME
: die Labelauswahl, die Sie Ihrem Team beim Erstellen einerNamespaceSelector
zugewiesen haben, z. B.backend
.FLEET_NAMESPACE_ID
: die Namespace-ID Dies kann mit FLEET_NAMESPACE identisch sein.
Wenn beispielsweise sowohl das Frontend- als auch das Backend-Team jeweils zwei Namespaces haben sollen, könnte Ihre Flotten-Namespace-Ressource in etwa so aussehen:
Initialisieren Sie Terraform in dem von Ihnen erstellten Verzeichnis:
terraform init
Prüfen Sie, ob die mit Terraform vorgeschlagenen Änderungen mit dem erwarteten Plan übereinstimmen:
terraform plan
Erstellen Sie die Flottenbereiche und Namespaces:
terraform apply
Nachdem Sie Flottenbereiche und Namespaces erstellt haben, erkennt Config Sync diese neuen Namespaces und deren Bereiche, wählt Ressourcen in den Flotten-Namespaces aus und gleicht sie mit Ihren Konfigurationsdateien ab.
Sie können prüfen, ob Ihre Ressourcen auf den richtigen Cluster angewendet werden. Verwenden Sie dazu nomos status
oder rufen Sie in der Google Cloud Console den Tab Pakete von Config Sync auf und ändern Sie das Optionsfeld Anzeigen nach in Cluster.
Config Sync synchronisiert Ihre Ressourcen anhand Ihrer Teambereiche anhand der in Ihrer „Source of Truth“ gespeicherten Konfiguration über Namespaces hinweg. Wenn Sie eine neue Ressource hinzufügen, gleicht Config Sync diese Ressource automatisch in Ihren Team-Namespaces ab, solange die richtige Annotation NamespaceSelector
angegeben ist.
Wie Sie Config Sync-Einstellungen auf Ihre vorhandenen Cluster anwenden, erfahren Sie in der Config Sync-Installationsanleitung unter Standardeinstellungen auf Flottenebene konfigurieren.