Cette page explique comment synchroniser des charts Helm à partir d'Artifact Registry en créant et en transférant un chart Helm vers un dépôt dans Artifact Registry. Il contient également un exemple de configuration permettant de synchroniser un chart à partir de votre dépôt Helm.
Vous pouvez configurer Config Sync pour la synchronisation à partir de dépôts Helm.
Vous pouvez stocker des charts Helm dans Artifact Registry, qui est le dépôt Helm recommandé pour Google Cloud. Pour utiliser cette fonctionnalité, vous devez activer les API RootSync et RepoSync.
Config Sync affiche les charts Helm à l'aide de helm template
et n'est donc pas compatible avec la gestion complète du cycle de vie Helm.
La page Versions groupées de Helm et Kustomize répertorie les versions de Kustomize et Helm fournies avec la version correspondante de Config Sync.
Avant de commencer
- Installez Helm 3.8.0 ou une version ultérieure. Dans les versions précédentes de Helm, la compatibilité des graphiques au format OCI est une fonctionnalité expérimentale.
- Activez Workload Identity sur votre cluster.
Limites
Vous ne pouvez pas modifier un champ immuable dans une configuration en modifiant simplement la valeur dans la source de vérité. Si vous devez mettre à jour un champ immuable, apportez d'abord la modification à la source de vérité, puis supprimez manuellement l'objet dans le cluster. Config Sync peut ensuite recréer l'objet avec la nouvelle valeur de champ.
Les charts Helm suivants incluent des jobs et ne sont pas recommandés pour le déploiement par Config Sync :
Pour en savoir plus sur la raison pour laquelle les tâches ne sont pas recommandées pour une utilisation avec Config Sync, consultez la section Éviter de gérer les tâches avec Config Sync.
Créer un dépôt Artifact Registry
Dans cette section, vous allez créer un dépôt Artifact Registry. Pour en savoir plus sur la création de dépôts Artifact Registry, consultez la section Créer des dépôts.
Activez l'API Artifact Registry :
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Créer un dépôt Artifact Registry :
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de l'organisation.AR_REPO_NAME
: ID du dépôt.AR_REGION
: emplacement régional ou multirégional du dépôt.
Variables utilisées dans les sections suivantes :
FLEET_HOST_PROJECT_ID
: si vous utilisez Workload Identity de GKE, ce champ d'application est identique àPROJECT_ID
. Si vous utilisez Workload Identity pour parc, il s'agit de l'ID du projet dans lequel votre cluster est enregistré.GSA_NAME
: nom du compte de service Google personnalisé que vous souhaitez utiliser pour vous connecter à Artifact Registry.KSA_NAME
: compte de service Kubernetes pour le rapprochement.- Pour les dépôts racine, si le nom
RootSync
estroot-sync
, ajoutezroot-reconciler
. Sinon, ajoutezroot-reconciler-ROOT_SYNC_NAME
. - Pour les dépôts d'espaces de noms, si le nom
RepoSync
estrepo-sync
, ajoutezns-reconciler-NAMESPACE
. Sinon, ajoutezns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
, oùREPO_SYNC_NAME_LENGTH
correspond au nombre de caractères dansREPO_SYNC_NAME
.
- Pour les dépôts racine, si le nom
Accorder l'autorisation de lecture
Si la version de Config Sync est 1.17.2 ou ultérieure sur votre cluster, vous pouvez utiliser le compte de service Kubernetes pour vous authentifier auprès d'Artifact Registry. Sinon, utilisez le compte de service Google pour l'authentification.
Utiliser le compte de service Kubernetes
Attribuez le rôle IAM de lecteur Artifact Registry (roles/artifactregistry.reader
) au compte de service Kubernetes avec le pool d'identités de charge de travail :
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
Utiliser le compte de service Google
Attribuez le rôle IAM de lecteur Artifact Registry (
roles/artifactregistry.reader
) au compte de service 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
Créez une liaison de stratégie IAM entre le compte de service Kubernetes et le compte de service 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
Transférer un chart Helm vers le dépôt Artifact Registry
Dans cette section, vous allez télécharger un chart Helm public et le transférer dans Artifact Registry.
Récupérez le package
mysql-9.3.1.tgz
à partir du dépôt Helm public et téléchargez-le localement :helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
Authentification avec un jeton d'accès :
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
Dans cette commande,
oauth2accesstoken
est le nom d'utilisateur à utiliser pour s'authentifier avec un jeton d'accès, etgcloud auth print-access-token
est la commande permettant d'obtenir le jeton d'accès. Votre jeton d'accès est le mot de passe d'authentification. L'authentification à l'aide d'un jeton d'accès est la méthode d'authentification la plus sûre.Transférez le chart Helm vers Artifact Registry :
helm push mysql-9.3.1.tgz oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME
Configurer Config Sync pour la synchronisation à partir de votre chart Helm
Dans cette section, vous allez créer un objet RootSync et configurer Config Sync pour la synchronisation à partir du chart Helm.
Si vous souhaitez remplacer les valeurs par défaut du chart Helm, vous pouvez pour ce faire spécifier des valeurs dans le champ spec.helm.values
ou ajouter une référence à un fichier ConfigMap à l'aide du champ spec.helm.valuesFileRefs
(dans Config Sync 1.16.0 et versions ultérieures). Pour en savoir plus sur les champs facultatifs, consultez la section Configuration du dépôt Helm.
valeurs
Créez un objet RootSync avec un nom unique :
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
Remplacez
ROOT_SYNC_NAME
par le nom de votre objet RootSync. Le nom doit être unique dans le cluster et ne pas dépasser 26 caractères. Si vous avez installé Config Sync à l'aide de la console Google Cloud ou de Google Cloud CLI, choisissez un nom autre queroot-sync
.Dans cet exemple, le chart Helm est déployé dans l'espace de noms
test
, car ses ressources contiennentnamespace: {{ .Release.Namespace }}
dans ses modèles.Vous pouvez utiliser
helm.values
pour remplacer les valeurs par défaut. Pour en savoir plus sur les champs facultatifs, consultez la section Configuration pour le dépôt Helm.Appliquez l'objet RootSync :
kubectl apply -f ROOT_SYNC_NAME.yaml
Vérifiez que Config Sync est synchronisé à partir de l'image :
nomos status --contexts=$(kubectl config current-context)
Le résultat ressemble à ce qui suit :
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
Vous venez de synchroniser le chart Helm avec votre cluster.
valuesFileRefs
Créez un objet RootSync avec un nom unique :
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
Remplacez les éléments suivants :
ROOT_SYNC_NAME
: nom de votre objet RootSync. Le nom doit être unique dans le cluster et ne pas dépasser 26 caractères. Si vous avez installé Config Sync à l'aide de la console Google Cloud ou de Google Cloud CLI, choisissez un nom autre queroot-sync
.CONFIGMAP_NAME
: nom de votre ConfigMap. Il peut s'agir de n'importe quel nom ConfigMap valide accepté par Kubernetes et unique dans votre cluster.- (facultatif)
DATA_KEY
: clé de données de votre ConfigMap dont vous souhaitez lire les valeurs. La valeur par défaut estvalues.yaml
.
Créez l'objet ConfigMap avec vos valeurs :
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
Si vous n'avez pas spécifié de valeur pour
DATA_KEY
dans l'objet RootSync, il doit s'agir de la valeur par défautvalues.yaml
.Appliquez l'objet ConfigMap :
kubectl apply -f CONFIGMAP_NAME.yaml
Appliquez l'objet RootSync :
kubectl apply -f ROOT_SYNC_NAME.yaml
Vérifiez que Config Sync est synchronisé à partir de l'image :
nomos status --contexts=$(kubectl config current-context)
Le résultat ressemble à ce qui suit :
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
Vous venez de synchroniser le chart Helm avec votre cluster.
Vous pouvez également consulter le fichier
imagePullPolicy
dans l'une des ressources synchronisées du cluster pour vérifier que les valeurs du fichier ConfigMap ont été utilisées pour afficher le graphique :kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Comme l'objet ConfigMap est immuable, pour modifier les valeurs, vous devez créer un nouveau ConfigMap et mettre à jour
spec.helm.valuesFileRefs
dans la spécification RootSync ou RepoSync de sorte qu'il pointe vers le nouveau ConfigMap. La création d'un ConfigMap garantit que les modifications apportées aux valeurs entraînent un nouveau rendu du chart Helm, ce qui est utile lorsque plusieurs ConfigMaps référencés dansspec.helm.valuesFileRefs
doivent être mis à jour en même temps lors du nouveau rendu. Pour modifier les valeurs utilisées pour afficher votre graphique, créez un objet ConfigMap avec un autre nom :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
Mettez à jour votre objet RootSync pour référencer le nouveau 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
Appliquez l'objet ConfigMap :
kubectl apply -f CONFIGMAP_NAME-2.yaml
Appliquez l'objet RootSync :
kubectl apply -f ROOT_SYNC_NAME.yaml
Vérifiez que Config Sync est synchronisé à partir de l'image :
nomos status --contexts=$(kubectl config current-context)
Vous pouvez également consulter le fichier
imagePullPolicy
dans l'une des ressources synchronisées du cluster pour vérifier que les nouvelles valeurs du fichier ConfigMap mis à jour ont été utilisées pour effectuer le rendu du graphique :kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Étapes suivantes
- Découvrez comment installer Config Sync.