Questa pagina mostra come sincronizzare i grafici Helm da Artifact Registry creando ed eseguendo il push di un grafico Helm in un repository in Artifact Registry. Contiene anche una configurazione di esempio per sincronizzare un grafico dal repository Helm.
Puoi configurare
Config Sync per la sincronizzazione dai repository Helm.
Puoi archiviare i grafici Helm in Artifact Registry, che è il
repository Helm consigliato per Cloud de Confiance by S3NS. Per utilizzare questa funzionalità, devi
abilitare le
API RootSync e RepoSync.
Config Sync esegue il rendering dei grafici Helm utilizzando
helm template
e pertanto non supporta la gestione completa del ciclo di vita di Helm.
Le versioni di Helm e Kustomize in bundle elencano le versioni di Kustomize e Helm in bundle con la versione corrispondente di Config Sync.
Prima di iniziare
-
Installa Google Cloud CLI.
-
Configura gcloud CLI per utilizzare la tua identità federata.
Per ulteriori informazioni, vedi Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Cloud de Confiance progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Cloud de Confiance progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Cloud de Confiance progetto che stai creando. -
Seleziona il Cloud de Confiance progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Cloud de Confiance progetto.
-
Verifica che la fatturazione sia attivata per il tuo Cloud de Confiance progetto.
Abilita le API GKE, Config Sync e Artifact Registry:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.gcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com - Crea o accedi a un cluster che soddisfi i requisiti per Config Sync e che utilizzi l'ultima versione di Config Sync.
- Installa l'interfaccia a riga di comando
nomoso esegui l'upgrade all'ultima versione. - Installa Helm 3.8.0 o versioni successive. Nelle versioni precedenti di Helm, il supporto per i grafici in formato OCI è una funzionalità sperimentale.
- Abilita Workload Identity Federation for GKE sul cluster.
Limitazioni
Non puoi modificare un campo immutabile in una configurazione semplicemente modificando il valore nell'origine attendibile. Se devi aggiornare un campo immutabile, prima apporta la modifica nell'origine attendibile, poi elimina manualmente l'oggetto nel cluster. Config Sync può quindi ricreare l'oggetto con il nuovo valore del campo.
I seguenti grafici Helm includono job e non sono consigliati per il deployment da parte di Config Sync:
Per scoprire di più sul motivo per cui i job non sono consigliati per l'utilizzo con Config Sync, consulta Evita di gestire i job con Config Sync.
Crea un repository Artifact Registry
In questa sezione creerai un repository Artifact Registry. Per scoprire di più sulla creazione di repository Artifact Registry, consulta Creare repository.
Abilita l'API Artifact Registry:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_IDCrea un repository Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto dell'organizzazione.AR_REPO_NAME: l'ID del repository.AR_REGION: la località regionale o multi-regionale del repository.
Variabili utilizzate nelle sezioni seguenti:
FLEET_HOST_PROJECT_ID: se utilizzi Workload Identity Federation for GKE, è uguale aPROJECT_ID. Se utilizzi Workload Identity Federation for GKE del parco risorse, questo è l'ID progetto del parco risorse a cui è registrato il cluster.GSA_NAME: il nome del account di servizio Google personalizzato che vuoi utilizzare per connetterti ad Artifact Registry.KSA_NAME: il account di servizio Kubernetes per il riconciliatore.- Per i repository root, se il nome
RootSyncèroot-sync, aggiungiroot-reconciler. In caso contrario, aggiungiroot-reconciler-ROOT_SYNC_NAME. - Per i repository dello spazio dei nomi, se il
RepoSyncnome èrepo-sync, aggiungins-reconciler-NAMESPACE. In caso contrario, aggiungins-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHdoveREPO_SYNC_NAME_LENGTHè il numero di caratteri inREPO_SYNC_NAME.
- Per i repository root, se il nome
Concedi l'autorizzazione di lettura
Utilizza un account di servizio Kubernetes per l'autenticazione ad Artifact Registry completando i seguenti passaggi:
Concedi il ruolo IAM Artifact Registry Reader (roles/artifactregistry.reader) al account di servizio Kubernetes che ha il pool Workload Identity Federation for GKE:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
--location=AR_REGION \
--member="serviceAccount:FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog[config-management-system/KSA_NAME]" \
--role=roles/artifactregistry.reader \
--project=PROJECT_ID
Esegui il push di un grafico Helm nel repository Artifact Registry
In questa sezione scaricherai un grafico Helm pubblico ed eseguirai il push in Artifact Registry.
Recupera il pacchetto
mysql-9.3.1.tgzdal repository Helm pubblico e scaricalo localmente:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1Autenticati con un token di accesso:
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 questo comando,
oauth2accesstokenè il nome utente da utilizzare per l'autenticazione con un token di accesso egcloud auth print-access-tokenè il comando per ottenere il token di accesso. Il token di accesso è la password per l'autenticazione. L'autenticazione con un token di accesso è il metodo di autenticazione più sicuro authentication method.Esegui il push del grafico Helm in Artifact Registry:
helm push mysql-9.3.1.tgz oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME
Configura Config Sync per la sincronizzazione dal grafico Helm
In questa sezione creerai un oggetto RootSync e configurerai Config Sync per la sincronizzazione dal grafico Helm.
Se vuoi sostituire i valori predefiniti del grafico Helm, puoi farlo
specificando i valori nel campo spec.helm.values o aggiungendo un riferimento a un
ConfigMap
utilizzando il campo spec.helm.valuesFileRefs. Per scoprire di più sui campi facoltativi, consulta
Configurazione per il repository Helm.
values
Crea un oggetto RootSync con un nome univoco:
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 EOFSostituisci
ROOT_SYNC_NAMEcon il nome dell'oggetto RootSync. Il nome deve essere univoco nel cluster e non deve contenere più di 26 caratteri. Se hai installato Config Sync utilizzando la Cloud de Confiance console o Google Cloud CLI, scegli un nome diverso daroot-sync.In questo esempio, il grafico Helm viene sottoposto a deployment nello spazio dei nomi
testperché le relative risorse contengononamespace: {{ .Release.Namespace }}nei relativi modelli.Puoi utilizzare
helm.valuesper sostituire i valori predefiniti. Per scoprire di più sui campi facoltativi, consulta Configurazione per il repository Helm.Applica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifica che Config Sync stia eseguendo la sincronizzazione dall'immagine:
nomos status --contexts=$(kubectl config current-context)L'output è simile al seguente:
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.1Hai sincronizzato correttamente il grafico Helm con il cluster.
valuesFileRefs
Crea un oggetto RootSync con un nome univoco:
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 EOFSostituisci quanto segue:
ROOT_SYNC_NAME: il nome dell'oggetto RootSync. Il nome deve essere univoco nel cluster e non deve contenere più di 26 caratteri. Se hai installato Config Sync utilizzando la Cloud de Confiance console o Google Cloud CLI, scegli un nome diverso daroot-sync.CONFIGMAP_NAME: il nome del ConfigMap. Può essere qualsiasi nome ConfigMap valido accettato da Kubernetes che sia univoco nel cluster.- (Facoltativo)
DATA_KEY: la chiave dati nel ConfigMap da cui vuoi leggere i valori. Il valore predefinito èvalues.yaml.
Crea l'oggetto ConfigMap con i tuoi valori:
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 EOFSe non hai specificato un valore per
DATA_KEYin RootSync, deve essere il valore predefinitovalues.yaml.Applica l'oggetto ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yamlApplica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifica che Config Sync stia eseguendo la sincronizzazione dall'immagine:
nomos status --contexts=$(kubectl config current-context)L'output è simile al seguente:
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.1Hai sincronizzato correttamente il grafico Helm con il cluster.
Puoi anche esaminare
imagePullPolicyin una delle risorse sincronizzate nel cluster per verificare che i valori di ConfigMap siano stati utilizzati per il rendering del grafico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicyPoiché il ConfigMap è immutabile, per modificare i valori devi creare un nuovo ConfigMap e aggiornare
spec.helm.valuesFileRefsnella specifica RootSync o RepoSync in modo che punti al nuovo ConfigMap. La creazione di un nuovo ConfigMap garantisce che le modifiche ai valori causino il rendering del grafico Helm, il che è utile quando è necessario aggiornare contemporaneamente più ConfigMap a cui si fa riferimento inspec.helm.valuesFileRefsdurante il rendering. Per modificare i valori utilizzati per il rendering del grafico, crea un nuovo ConfigMap con un nome diverso: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 EOFAggiorna l'oggetto RootSync in modo che faccia riferimento al nuovo ConfigMap:
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 EOFApplica l'oggetto ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yamlApplica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifica che Config Sync stia eseguendo la sincronizzazione dall'immagine:
nomos status --contexts=$(kubectl config current-context)Puoi anche esaminare
imagePullPolicyin una delle risorse sincronizzate nel cluster per verificare che i nuovi valori del ConfigMap aggiornato siano stati utilizzati per il rendering del grafico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Passaggi successivi
- Scopri di più sull'installazione di Config Sync.