Artifact Registry から Helm チャートを同期する

このページでは、Helm チャートを作成して Artifact Registry のリポジトリに push することで、Artifact Registry から Helm チャートを同期する方法について説明します。また、Helm リポジトリからチャートを同期するサンプル構成も含まれています。

Anthos Config Management バージョン 1.13.0 以降では、Helm リポジトリから同期するように Config Sync を構成できます。Google Cloud で推奨の Helm リポジトリである Artifact Registry に Helm チャートを保存できます。この機能を使用するには、RootSync API と RepoSync API を有効にする必要があります。Config Sync は helm template を使用して Helm チャートをレンダリングするため、完全な Helm ライフサイクル管理はサポートしていません。

始める前に

Artifact Registry リポジトリを作成する

このセクションでは、Artifact Registry リポジトリを作成します。Artifact Registry リポジトリの作成の詳細については、リポジトリを作成するをご覧ください。

  1. 環境変数を作成します。

    export PROJECT_ID=PROJECT_ID
    export AR_REPO_NAME=AR_REPO_NAME
    export AR_REGION=AR_REGION
    export GSA_NAME=GSA_NAME
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID
    • AR_REPO_NAME: Artifact Registry リポジトリに付ける名前。
    • AR_REGION: Artifact Registry リポジトリをホストできる特定の地理的位置(例: us-central1)。
    • GSA_NAME: Artifact Registry への接続に使用するカスタム Google サービス アカウントの名前。
  2. Artifact Registry API を有効にします。

    gcloud services enable artifactregistry.googleapis.com \
          --project=${PROJECT_ID}
    
  3. Artifact Registry リポジトリを作成します。

    gcloud artifacts repositories create ${AR_REPO_NAME} \
          --repository-format=docker \
          --location=${AR_REGION} \
          --description="Config Sync Helm repo" \
          --project=${PROJECT_ID}
    
  4. Google サービス アカウントに Artifact Registry 読み取り(roles/artifactregistry.reader)IAM ロールを付与します。

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
          --member=serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
          --role=roles/artifactregistry.reader
    

Helm チャートを Artifact Registry リポジトリに push する

このセクションでは、一般公開の Helm チャートをダウンロードして、Artifact Registry に push します。

  1. mysql-9.3.1.tgz パッケージを一般公開の Helm リポジトリから取得し、ローカルにダウンロードします。

    helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
    
  2. アクセス トークンによる認証を行います。

    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}
    

    このコマンドで、oauth2accesstoken はアクセス トークンによる認証で使用するユーザー名、gcloud auth print-access-token はアクセス トークンを取得するコマンドです。アクセス トークンは認証用のパスワードです。アクセス トークンによる認証が最も安全な認証方法です。

  3. Helm チャートを Artifact Registry に push します。

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

Helm チャートから同期するように Config Sync を構成する

このセクションでは、RootSync オブジェクトを作成し、Helm チャートから同期するように Config Sync を構成します。

  1. RootSync オブジェクトを一意の名前で作成します。

    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
    

    ROOT_SYNC_NAME は、RootSync オブジェクトの名前に置き換えます。この名前はクラスタ内で一意で、26 文字以下にする必要があります。Google Cloud コンソールまたは Google Cloud CLI を使用して Config Sync をインストールした場合は、root-sync 以外の名前を選択します。

    この例では、リソースのテンプレートに namespace: {{ .Release.Namespace }} が含まれているため、Helm チャートが test Namespace にデプロイされています。

    Anthos Config Management バージョン 1.13.1 以降では、helm.values を使用してデフォルト値をオーバーライドできます。オプション フィールドの詳細については、Helm リポジトリの構成をご覧ください。

  2. Google サービス アカウントと Kubernetes サービス アカウント間の IAM ポリシー バインディングを作成します。

    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: Reconciler の Kubernetes サービス アカウント。ルート リポジトリでは、RootSync の名前が root-sync の場合、KSA_NAMEroot-reconciler です。それ以外の場合は root-reconciler-ROOT_SYNC_NAME です。
  3. RootSync オブジェクトを適用します。

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  4. Config Sync がイメージから同期していることを確認します。

    nomos status --contexts=$(kubectl config current-context)
    

    出力は次のようになります。

    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
    
    

    これで、Helm チャートがクラスタに正常に同期されました。

次のステップ