Synchroniser les graphiques Helm à partir d'Artifact Registry
Cette page explique comment synchroniser des graphiques Helm à partir d'Artifact Registry en créant un graphique Helm et en le transférant vers un dépôt dans Artifact Registry. Il contient également un exemple de configuration permettant de synchroniser un graphique depuis votre dépôt Helm.
À partir de la version 1.13.0 d'Anthos Config Management, vous pouvez configurer Config Sync pour effectuer la synchronisation à partir de dépôts Helm.
Vous pouvez stocker des graphiques Helm dans Artifact Registry, 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 de Helm.
Avant de commencer
- Installez Helm 3.8.0 ou une version ultérieure Dans les versions précédentes de Helm, la prise en charge des graphiques au format OCI était une fonctionnalité expérimentale.
- Activez Workload Identity sur votre cluster.
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.
Créez des variables d'environnement :
export PROJECT_ID=PROJECT_ID export AR_REPO_NAME=AR_REPO_NAME export AR_REGION=AR_REGION export GSA_NAME=GSA_NAME
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.AR_REPO_NAME
: nom que vous souhaitez attribuer à votre dépôt Artifact Registry.AR_REGION
: emplacement géographique spécifique où vous pouvez héberger votre dépôt Artifact Registry, par exempleus-central1
.GSA_NAME
: nom du compte de service Google personnalisé que vous souhaitez utiliser pour vous connecter à Artifact Registry.
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}
Attribuez le rôle IAM de lecteur Artifact Registry (
roles/artifactregistry.reader
) au compte de service Google:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role=roles/artifactregistry.reader
Transférer un graphique Helm dans le dépôt Artifact Registry
Dans cette section, vous allez télécharger un graphique Helm public et le transférer vers 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
S'authentifier 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 lors de l'authentification 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 pour l'authentification. L'authentification avec un jeton d'accès constitue la méthode d'authentification la plus sûre.Transférez le graphique 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 synchroniser votre chart Helm
Dans cette section, vous allez créer un objet RootSync et configurer Config Sync pour effectuer la synchronisation à partir du graphique Helm.
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 auth: gcpserviceaccount gcpServiceAccountEmail: ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com # From Anthos Config Management version 1.13.1 and later, you can 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 graphique Helm est déployé dans l'espace de noms
test
, car ses modèles contiennentnamespace: {{ .Release.Namespace }}
dans ses modèles.À partir de la version 1.13.1 d'Anthos Config Management, vous pouvez utiliser
helm.values
pour remplacer les valeurs par défaut. Pour en savoir plus sur les champs facultatifs, consultez la section Configuration du dépôt Helm.Créez une liaison de stratégie IAM entre le compte de service Google et le compte de service Kubernetes:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:${PROJECT_ID}.svc.id.goog[config-management-system/KSA_NAME]" \ ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
KSA_NAME
: compte de service Kubernetes pour le rapprochement. Pour les dépôts racines, si le nom RootSync estroot-sync
et queKSA_NAME
estroot-reconciler
. Sinon, il s'agit deroot-reconciler-ROOT_SYNC_NAME
.
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 mysql:9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH namespace/test Current mysql:9 test configmap/my-mysql Current mysql:9 test secret/my-mysql Current mysql:9 test service/my-mysql Current mysql:9 test service/my-mysql-headless Current mysql:9 test serviceaccount/my-mysql Current mysql:9 test statefulset.apps/my-mysql Current mysql:9
Le chart Helm a bien été synchronisé avec votre cluster.
Étapes suivantes
- Découvrez comment installer Config Sync.