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

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.

  1. 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 exemple us-central1.
    • GSA_NAME: nom du compte de service Google personnalisé que vous souhaitez utiliser pour vous connecter à Artifact Registry.
  2. Activez l'API Artifact Registry :

    gcloud services enable artifactregistry.googleapis.com \
          --project=${PROJECT_ID}
    
  3. 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}
    
  4. 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.

  1. 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
    
  2. 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 et gcloud 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.

  3. 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.

  1. 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 que root-sync.

    Dans cet exemple, le graphique Helm est déployé dans l'espace de noms test, car ses modèles contiennent namespace: {{ .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.

  2. 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 est root-sync et que KSA_NAME est root-reconciler. Sinon, il s'agit de root-reconciler-ROOT_SYNC_NAME.
  3. Appliquez l'objet RootSync :

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  4. 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