Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Synchroniser les graphiques Helm à partir d'Artifact Registry

Cette page explique comment synchroniser des graphiques Helm à partir d'Artifact Registry.

À 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 les 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.

Cette page vous montre un moyen simple de créer un chart Helm et de le transférer 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.

Avant de commencer

Pour suivre cette procédure, vous devez installer Helm 3.8.0 ou une version ultérieure. Dans les versions précédentes de Helm, la compatibilité avec les graphiques au format OCI est 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.

  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 vers 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 public Helm 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 gcloud permettant d'obtenir le jeton d'accès. Votre jeton d'accès correspond au mot de passe d'authentification. S'authentifier avec un jeton d'accès est la méthode d'authentification la plus sûre

  3. Transférez le graphique Helm dans Artifact Registry:

    helm push mysql-9.3.1.tgz oci://${AR_REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}
    

Configurer Config Sync pour effectuer la synchronisation à partir de votre chart Helm

Dans cette section, vous allez créer un objet RootSync et configurer Config Sync pour effectuer une 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}.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.

    Dans cet exemple, le chart Helm est déployé dans l'espace de noms test, car ses modèles contiennent namespace: {{ .Release.Namespace }}.

    À partir d'Anthos Config Management version 1.13.1, vous pouvez remplacer les valeurs par défaut à l'aide de helm.values. Pour en savoir plus sur les champs facultatifs, consultez 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 racine, si le nom de la racine racine est root-sync, KSA_NAME est root-reconciler. Sinon, il est défini sur 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)
    

    Un résultat semblable aux lignes suivantes doit s'afficher :

    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
    
    

    Vous avez maintenant synchronisé le chart Helm avec votre cluster.

Étapes suivantes