Questa pagina mostra come sincronizzare i grafici Helm da Artifact Registry creando e esegui il push di un grafico Helm in un repository in Artifact Registry. Contiene anche configurazione di esempio per sincronizzare un grafico dal repository Helm.
Puoi configurare
Config Sync per eseguire la sincronizzazione dai repository Helm.
Puoi archiviare i grafici Helm in Artifact Registry, che è
repository Helm consigliato per Google Cloud. Per utilizzare questa funzionalità, devi attivare le API RootSync e RepoSync.
Config Sync esegue il rendering dei grafici Helm utilizzando
helm template
e pertanto non supporta la gestione dell'intero ciclo di vita di Helm.
Versioni Helm e Kustomize in bundle elenca le versioni Kustomize e Helm in bundle con la versione corrispondente di Config Sync.
Prima di iniziare
- Installa Helm 3.8.0 o versioni successive. Nelle versioni precedenti di Helm, il supporto dei grafici in formato OCI è una funzionalità sperimentale.
- Abilita Workload Identity Federation for GKE sul tuo cluster.
Limitazioni
Non puoi modificare i campi immutabili di una configurazione semplicemente cambiando il valore la fonte dei dati. Se devi aggiornare un campo immutabile, apporta prima la modifica nell'origine attendibile, quindi elimina manualmente l'oggetto nel cluster. Config Sync può quindi ricreare l'oggetto con il nuovo valore del campo.
I seguenti grafici Helm includono i job e non sono consigliati per deployment tramite Config Sync:
Per scoprire di più sul motivo per cui i job non sono consigliati per l'utilizzo con Config Sync, consulta Evitare di gestire i job con Config Sync.
Crea un repository Artifact Registry
In questa sezione creerai un repository Artifact Registry. Per scoprire di più su sulla creazione di repository Artifact Registry, Crea repository.
Abilita l'API Artifact Registry:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Crea 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
: ID progetto dell'organizzazione.AR_REPO_NAME
: l'ID del repository.AR_REGION
: a livello di una o più regioni del repository.
Variabili utilizzate nelle seguenti sezioni:
FLEET_HOST_PROJECT_ID
: se utilizzi Workload Identity Federation for GKE, è lo stesso valore diPROJECT_ID
. Se utilizzi un parco risorse Federazione delle identità per i carichi di lavoro per GKE, si tratta dell'ID progetto del parco risorse in cui è registrato un cluster.GSA_NAME
: il nome dell'account di servizio Google personalizzato che vuoi utilizzare per connetterti ad Artifact Registry.KSA_NAME
: l'account di servizio Kubernetes per il Mediator.- Per i repository root, se il nome
RootSync
èroot-sync
, aggiungiroot-reconciler
. Altrimenti, aggiungiroot-reconciler-ROOT_SYNC_NAME
. - Per i repository dello spazio dei nomi, se il nome
RepoSync
èrepo-sync
, aggiungins-reconciler-NAMESPACE
. In caso contrario, aggiungins-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
doveREPO_SYNC_NAME_LENGTH
è il numero di caratteri inREPO_SYNC_NAME
.
- Per i repository root, se il nome
Concedi l'autorizzazione ai lettori
Se la versione di Config Sync del tuo cluster è 1.17.2 o successiva, puoi utilizzare l'account di servizio Kubernetes per l'autenticazione in Artifact Registry. In caso contrario, utilizza l'account di servizio Google per l'autenticazione.
Utilizzo dell'account di servizio Kubernetes
Concedi al lettore Artifact Registry (roles/artifactregistry.reader
)
ruolo IAM all'account di servizio Kubernetes con
Federazione delle identità per i carichi di lavoro per il pool GKE:
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
Utilizzo dell'account di servizio Google
Concedi il ruolo IAM Artifact Registry Reader (
roles/artifactregistry.reader
) all'account di servizio Google:gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \ --location=AR_REGION \ --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/artifactregistry.reader \ --project=PROJECT_ID
Crea un'associazione dei criteri IAM tra l'account di servizio Kubernetes e l'account di servizio Google:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --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 ad Artifact Registry.
Recupera il pacchetto
mysql-9.3.1.tgz
dal repository Helm pubblico e scaricalo localmente:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
Esegui l'autenticazione con un token di accesso:
Linux/macOS
gcloud auth print-access-token | helm registry login -u oauth2accesstoken \ --password-stdin https://AR_REGION-docker.pkg.dev
Windows
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_NAME
In 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 tuo token di accesso è la password per l'autenticazione. L'autenticazione con un token di accesso è la modalità metodo di autenticazione.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 crei un oggetto RootSync e configuri 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 saperne di più sull'attributo facoltativo
vedere i campi
Configurazione per il repository Helm.
valori
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 # The k8sserviceaccount auth type is available in version 1.17.2 and # later. Use "gcpserviceaccount" if using an older version. # auth: gcpserviceaccount # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com 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 EOF
Sostituisci
ROOT_SYNC_NAME
con il nome del tuo sistema RootSync . Il nome deve essere univoco nel cluster e non può contenere più di 26 caratteri. Se hai installato Config Sync utilizzando la console Google Cloud o Google Cloud CLI, scegli un nome diverso daroot-sync
.In questo esempio, il grafico Helm viene disegnato nello spazio dei nomi
test
perché le sue risorse contengononamespace: {{ .Release.Namespace }}
nei relativi modelli.Puoi utilizzare la modalità
helm.values
per eseguire l'override dei valori predefiniti. Per informazioni sui campi facoltativi, consulta Configurazione per il repository Helm.Applica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifica che Config Sync stia sincronizzando 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.1
Hai sincronizzato correttamente il grafico Helm con il tuo 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 # The k8sserviceaccount auth type is available in version 1.17.2 and # later. Use "gcpserviceaccount" if using an older version. # auth: gcpserviceaccount # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME dataKey: DATA_KEY EOF
Sostituisci quanto segue:
ROOT_SYNC_NAME
: il nome dell'oggetto RootSync. Il nome deve essere univoco nel cluster e non può contenere più di 26 caratteri. Se hai installato Config Sync utilizzando la console Google Cloud o Google Cloud CLI, scegli un nome diverso daroot-sync
.CONFIGMAP_NAME
: il nome del tuo ConfigMap. Questo può essere un qualsiasi nome ConfigMap valido accettato da Kubernetes che sia univoco nel tuo cluster.- (Facoltativo)
DATA_KEY
: la chiave dei dati nell'oggetto ConfigMap da cui 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 EOF
Se non hai specificato un valore per
DATA_KEY
nel RootSync, dovrebbe essere il valore predefinito divalues.yaml
.Applica l'oggetto ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yaml
Applica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifica che Config Sync stia sincronizzando 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.1
Hai sincronizzato correttamente il grafico Helm con il tuo cluster.
Puoi anche esaminare il
imagePullPolicy
in una delle risorse sincronizzate nel cluster per verificare che i valori del ConfigMap siano stati utilizzati esegui il rendering del grafico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Poiché il ConfigMap è immutabile, per modificare i valori è necessario creare un un nuovo ConfigMap e aggiorna
spec.helm.valuesFileRefs
in RootSync oppure la specifica RepoSync per puntare al nuovo ConfigMap. La creazione di un nuovo ConfigMap garantisce che le modifiche ai valori causino il nuovo rendering del grafico Helm, il che è utile quando è necessario aggiornare contemporaneamente più ConfigMap a cui viene fatto riferimento inspec.helm.valuesFileRefs
durante il nuovo 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 EOF
Aggiorna 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 # The k8sserviceaccount auth type is available in version 1.17.2 and # later. Use "gcpserviceaccount" if using an older version. # auth: gcpserviceaccount # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com 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 EOF
Applica l'oggetto ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yaml
Applica l'oggetto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifica che Config Sync stia sincronizzando dall'immagine:
nomos status --contexts=$(kubectl config current-context)
Puoi anche esaminare il
imagePullPolicy
in una delle risorse sincronizzate nel cluster per verificare che i nuovi valori dell'elemento ConfigMap aggiornato per eseguire 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.