Auf dieser Seite erfahren Sie, wie Sie Helm-Diagramme aus Artifact Registry synchronisieren, indem Sie ein Helm-Diagramm erstellen und in ein Repository in Artifact Registry übertragen. Außerdem enthält sie eine Beispielkonfiguration zum Synchronisieren eines Diagramms aus Ihrem Helm-Repository.
Sie können
Config Sync so konfigurieren, dass es aus Helm Repositories synchronisiert.
Sie können Helm-Diagramme in Artifact Registry speichern. Dies ist das
empfohlene Helm-Repository für Google Cloud. Um diese Funktion verwenden zu können, müssen Sie
die
RootSync- und RepoSync APIs aktivieren.
Config Sync rendert Helm-Diagramme mit
helm template
und unterstützt daher nicht die vollständige Helm-Lebenszyklusverwaltung.
Unter Gebündelte Helm- und Kustomize-Versionen sind die Kustomize- und Helm-Versionen aufgeführt, die mit der entsprechenden Version von Config Sync gebündelt sind.
Hinweis
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto bei Google Cloudhaben, erstellen Sie eines, 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.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“
(
roles/resourcemanager.projectCreator), die dieresourcemanager.projects.createBerechtigung enthält. Rollen zuweisen.
-
Erstellen Sie ein Google Cloud Projekt in:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch 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_IDdurch Ihren Google Cloud Projektnamen.
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die GKE-, Config Sync- und Artifact Registry APIs:
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Rollen zuweisen.gcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com -
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“
(
roles/resourcemanager.projectCreator), die dieresourcemanager.projects.createBerechtigung enthält. Rollen zuweisen.
-
Erstellen Sie ein Google Cloud Projekt in:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch 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_IDdurch Ihren Google Cloud Projektnamen.
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die GKE-, Config Sync- und Artifact Registry APIs:
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Rollen zuweisen.gcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com - Erstellen Sie einen Cluster, der die Anforderungen für Config Sync erfüllt und die neueste Version von Config Sync verwendet, oder stellen Sie sicher, dass Sie Zugriff auf einen solchen Cluster haben.
- Installieren Sie die
nomosCLI oder aktualisieren Sie sie auf die neueste Version. - Installieren Sie Helm 3.8.0 oder höher. In früheren Versionen von Helm ist die Unterstützung von Diagrammen im OCI-Format eine experimentelle Funktion.
- Aktivieren Sie Workload Identity Federation for GKE in Ihrem Cluster.
Beschränkungen
Sie können kein unveränderliches Feld in einer Konfiguration ändern, indem Sie einfach den Wert in der „Source of Truth“ ändern. Wenn Sie ein unveränderliches Feld aktualisieren müssen, nehmen Sie zuerst die Änderung in der „Source of Truth“ vor und löschen Sie dann das Objekt manuell im Cluster. Config Sync kann das Objekt dann mit dem neuen Feldwert neu erstellen.
Die folgenden Helm-Diagramme enthalten Jobs und werden nicht für die Bereitstellung durch Config Sync empfohlen:
Weitere Informationen dazu, warum Jobs nicht für die Verwendung mit Config Sync empfohlen werden, finden Sie unter Jobs nicht mit Config Sync verwalten.
Artifact Registry-Repository erstellen
In diesem Abschnitt erstellen Sie ein Artifact Registry-Repository. Weitere Informationen zum Erstellen von Artifact Registry-Repositories finden Sie unter Repositories erstellen.
Aktivieren Sie die Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_IDErstellen Sie ein Artifact Registry-Repository:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID der Organisation.AR_REPO_NAME: die ID des Repositorys.AR_REGION: der regionale oder multiregionale Speicherort für das Repository.
In den folgenden Abschnitten verwendete Variablen:
FLEET_HOST_PROJECT_ID: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.GSA_NAME: Name des benutzerdefinierten Google-Dienstkontos, mit dem Sie eine Verbindung zu Artifact Registry herstellen möchten.KSA_NAME: das Kubernetes-Dienstkonto für den Abgleich.- Fügen Sie für Stamm-Repositories
root-reconcilerhinzu, wenn der NameRootSyncroot-syncist. Fügen Sie andernfallsroot-reconciler-ROOT_SYNC_NAMEhinzu. - Für Namespace-Repositories gilt: Wenn der
RepoSync-Namerepo-synclautet, fügen Siens-reconciler-NAMESPACEhinzu. Fügen Sie andernfallsns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHhinzu, wobeiREPO_SYNC_NAME_LENGTHdie Anzahl der Zeichen inREPO_SYNC_NAMEist.
- Fügen Sie für Stamm-Repositories
Leseberechtigung gewähren
Führen Sie die folgenden Schritte aus, um sich mit einem Kubernetes-Dienstkonto bei Artifact Registry zu authentifizieren:
Weisen Sie dem Kubernetes-Dienstkonto mit dem Workload Identity Federation for GKE-Pool die IAM-Rolle „Artifact Registry-Leser“ (roles/artifactregistry.reader) zu:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
--location=AR_REGION \
--member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
--role=roles/artifactregistry.reader \
--project=PROJECT_ID
Helm-Diagramm in das Artifact Registry-Repository übertragen
In diesem Abschnitt laden Sie ein öffentliches Helm-Diagramm herunter und übertragen es per Push in Artifact Registry.
Rufen Sie das Paket
mysql-9.3.1.tgzaus dem öffentlichen Helm-Repository ab und laden Sie es lokal herunter:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1Mit einem Zugriffstoken authentifizieren:
Linux/macOS
gcloud auth print-access-token | helm registry login -u oauth2accesstoken \ --password-stdin https://AR_REGION-docker.pkg.devWindows
gcloud auth print-access-token ya29.8QEQIfY_... helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \ https://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAMEIn diesem Befehl ist
oauth2accesstokender Nutzername, der zur Authentifizierung mit einem Zugriffstoken verwendet werden soll, undgcloud auth print-access-tokenist der Befehl zum Abrufen des Zugriffstokens. Ihr Zugriffstoken ist das Passwort für die Authentifizierung. Die Authentifizierung mit einem Zugriffstoken ist die sicherste Authentifizierungsmethode.Übertragen Sie das Helm-Diagramm per Push an Artifact Registry:
helm push mysql-9.3.1.tgz oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME
Config Sync für die Synchronisierung aus Ihrem Helm-Diagramm konfigurieren
In diesem Abschnitt erstellen Sie ein RootSync-Objekt und konfigurieren Config Sync für die Synchronisierung aus dem Helm-Diagramm.
Wenn Sie die Standardwerte des Helm-Diagramms überschreiben möchten, geben Sie entweder Werte im Feld spec.helm.values an oder fügen Sie mithilfe des Felds spec.helm.valuesFileRefs einen Verweis zu einer ConfigMap hinzu. Weitere Informationen zu den optionalen Feldern finden Sie unter Konfiguration für das Helm-Repository.
Werte
Erstellen Sie ein RootSync-Objekt mit einem eindeutigen Namen:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql namespace: test auth: k8sserviceaccount # Use the optional field spec.helm.values to override default values. # You can use the same format as the default values file to override # default values. values: image: pullPolicy: Always primary: resources: limits: cpu: 250m memory: 256Mi requests: cpu: 250m memory: 256Mi EOFErsetzen Sie dabei
ROOT_SYNC_NAMEdurch den Namen Ihres RootSync-Objekts. Der Name darf im Cluster nur einmal vorkommen und darf nicht mehr als 26 Zeichen haben. Wenn Sie Config Sync mit der Console oder der Google Cloud CLI installiert haben, wählen Sie einen anderen Namen alsroot-syncaus. Google CloudIn diesem Beispiel wird das Helm-Diagramm im
testNamespace bereitgestellt, da seine Ressourcennamespace: {{ .Release.Namespace }}in den Vorlagen enthalten.Sie können
helm.valuesverwenden, um die Standardwerte zu überschreiben. Weitere Informationen zu den optionalen Feldern finden Sie unter Konfiguration für das Helm-Repository.Wenden Sie das RootSync-Objekt an:
kubectl apply -f ROOT_SYNC_NAME.yamlPrüfen Sie, ob Config Sync mit dem Image synchronisiert wird:
nomos status --contexts=$(kubectl config current-context)Die Ausgabe sieht in etwa so aus:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1Sie haben das Helm-Diagramm jetzt erfolgreich in Ihren Cluster synchronisiert.
valuesFileRefs
Erstellen Sie ein RootSync-Objekt mit einem eindeutigen Namen:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME dataKey: DATA_KEY EOFErsetzen Sie Folgendes:
ROOT_SYNC_NAME: der Name Ihres RootSync-Objekts. Der Name darf im Cluster nur einmal vorkommen und darf nicht mehr als 26 Zeichen haben. Wenn Sie Config Sync mit der Console oder der Google Cloud CLI installiert haben, wählen Sie einen anderen Namen alsroot-syncaus. Google CloudCONFIGMAP_NAME: der Name Ihrer ConfigMap. Dies kann ein beliebiger gültiger ConfigMap-Name sein, der von Kubernetes akzeptiert wird und im Cluster eindeutig ist.- (optional)
DATA_KEY: der Datenschlüssel in Ihrer ConfigMap, aus dem Sie die Werte lesen möchten. Der Standardwert istvalues.yaml.
Erstellen Sie das ConfigMap-Objekt mit Ihren Werten:
cat <<EOF>> CONFIGMAP_NAME.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Always primary: resources: limits: cpu: 250m memory: 256Mi requests: cpu: 250m memory: 256Mi EOFWenn Sie keinen Wert für
DATA_KEYim RootSync angegeben haben, sollte der Standardwertvalues.yamlverwendet werden.Wenden Sie das ConfigMap-Objekt an:
kubectl apply -f CONFIGMAP_NAME.yamlWenden Sie das RootSync-Objekt an:
kubectl apply -f ROOT_SYNC_NAME.yamlPrüfen Sie, ob Config Sync mit dem Image synchronisiert wird:
nomos status --contexts=$(kubectl config current-context)Die Ausgabe sieht in etwa so aus:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1Sie haben das Helm-Diagramm jetzt erfolgreich in Ihren Cluster synchronisiert.
Sie können auch
imagePullPolicyin einer der synchronisierten Ressourcen im Cluster ansehen, um zu prüfen, ob die Werte aus der ConfigMap zum Rendern des Diagramms verwendet wurden:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicyDa die ConfigMap unveränderlich ist, müssen Sie eine neue ConfigMap erstellen und
spec.helm.valuesFileRefsin der RootSync- oder RepoSync-Spezifikation aktualisieren, damit sie auf die neue ConfigMap verweist, um die Werte zu ändern. Durch die Erstellung einer neuen ConfigMap wird sichergestellt, dass Änderungen an Werten das Helm-Diagramm zum neu rendern zwingen. Dies ist nützlich, wenn mehrere ConfigMaps, auf die inspec.helm.valuesFileRefsverwiesen wird, gleichzeitig aktualisiert werden müssen, wenn das Helm-Diagramm neu rendert. “ Wenn Sie die Werte ändern möchten, die zum Rendern des Diagramms verwendet werden, erstellen Sie eine neue ConfigMap mit einem anderen Namen:cat <<EOF>> CONFIGMAP_NAME-2.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME-2 namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Never primary: resources: limits: cpu: 100m memory: 256Mi requests: cpu: 250m memory: 200Mi EOFAktualisieren Sie Ihr RootSync-Objekt, um auf die neue ConfigMap zu verweisen:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql namespace: test auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME-2 dataKey: DATA_KEY EOFWenden Sie das ConfigMap-Objekt an:
kubectl apply -f CONFIGMAP_NAME-2.yamlWenden Sie das RootSync-Objekt an:
kubectl apply -f ROOT_SYNC_NAME.yamlPrüfen Sie, ob Config Sync mit dem Image synchronisiert wird:
nomos status --contexts=$(kubectl config current-context)Sie können auch
imagePullPolicyin einer der synchronisierten Ressourcen im Cluster ansehen, um zu prüfen, ob die neuen Werte aus der aktualisierten ConfigMap zum Rendern des Diagramms verwendet wurden:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy