Menyinkronkan chart Helm dari Artifact Registry

Halaman ini menunjukkan cara menyinkronkan chart Helm dari Artifact Registry dengan membuat dan mengirim chart Helm ke repositori di Artifact Registry. File ini juga berisi contoh konfigurasi untuk menyinkronkan diagram dari repositori Helm Anda.

Anda dapat mengonfigurasi Config Sync untuk menyinkronkan dari repositori Helm. Anda dapat menyimpan chart Helm di Artifact Registry, yang merupakan repositori Helm yang direkomendasikan untuk Google Cloud. Untuk menggunakan fitur ini, Anda harus aktifkan API RootSync dan RepoSync. Config Sync merender diagram Helm dengan menggunakan helm template sehingga tidak mendukung manajemen siklus proses Helm penuh.

Versi Helm dan Kustomize yang dipaketkan mencantumkan versi Kustomize dan Helm yang dipaketkan dengan versi Sinkronisasi Konfigurasi.

Sebelum memulai

Batasan

  • Anda tidak dapat mengubah kolom yang tidak dapat diubah dalam konfigurasi hanya dengan mengubah nilainya dalam sumber yang tepercaya. Jika Anda perlu memperbarui kolom yang tidak dapat diubah, pertama-tama mengubah sumber kebenaran, lalu menghapus objek dalam . Kemudian, Config Sync dapat membuat ulang objek dengan kolom baru. dengan sejumlah nilai.

  • Bagan Helm berikut menyertakan Tugas dan tidak direkomendasikan untuk deployment oleh Config Sync:

    Untuk mempelajari lebih lanjut alasan Tugas tidak direkomendasikan untuk digunakan dengan Config Sync, lihat Menghindari pengelolaan Tugas dengan Config Sync.

Membuat repositori Artifact Registry

Di bagian ini, Anda akan membuat repositori Artifact Registry. Untuk mempelajari lebih lanjut tentang membuat repositori Artifact Registry, lihat Membuat repositori.

  1. Aktifkan Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
    
  2. Buat repositori Artifact Registry:

    gcloud artifacts repositories create AR_REPO_NAME \
       --repository-format=docker \
       --location=AR_REGION \
       --description="Config Sync Helm repo" \
       --project=PROJECT_ID
    

Ganti kode berikut:

  • PROJECT_ID: project ID organisasi.
  • AR_REPO_NAME: ID repositori.
  • AR_REGION: regional atau multi-regional lokasi repositori.

Variabel yang digunakan di bagian berikut:

  • FLEET_HOST_PROJECT_ID: jika Anda menggunakan GKE Workload Identity Federation untuk GKE, sama seperti PROJECT_ID. Jika Anda menggunakan fleet Workload Identity Federation for GKE, ini adalah project ID fleet yang cluster terdaftar.
  • GSA_NAME: nama akun layanan Google kustom yang ingin Anda gunakan untuk terhubung ke Artifact Registry.
  • KSA_NAME: akun layanan Kubernetes untuk rekonsiliasi.
    • Untuk repositori root, jika nama RootSync adalah root-sync, tambahkan root-reconciler. Atau, tambahkan root-reconciler-ROOT_SYNC_NAME.
    • Untuk repositori namespace, jika nama RepoSync adalah repo-sync, tambahkan ns-reconciler-NAMESPACE. Atau, tambahkan ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH dengan REPO_SYNC_NAME_LENGTH adalah jumlah karakter dalam REPO_SYNC_NAME.

Berikan izin pembaca

Jika versi Config Sync adalah 1.17.2 atau yang lebih baru pada cluster, Anda dapat menggunakan akun layanan Kubernetes untuk melakukan autentikasi ke Artifact Registry. Jika tidak, menggunakan akun layanan Google untuk otentikasi.

Menggunakan akun layanan Kubernetes

Berikan Pembaca Artifact Registry (roles/artifactregistry.reader) Peran IAM ke akun layanan Kubernetes dengan Workload Identity Federation untuk kumpulan GKE:

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

Menggunakan akun layanan Google

  1. Berikan Pembaca Artifact Registry (roles/artifactregistry.reader) Peran IAM ke akun layanan 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
    
  2. Membuat binding kebijakan IAM antara layanan Kubernetes dan akun layanan 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
    

Mengirim chart Helm ke repositori Artifact Registry

Di bagian ini, Anda akan mendownload chart Helm publik dan mengirimnya ke Artifact Registry.

  1. Ambil paket mysql-9.3.1.tgz dari repositori Helm publik dan unduh secara lokal:

    helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
    
  2. Melakukan autentikasi dengan token akses:

    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
    

    Dalam perintah ini, oauth2accesstoken adalah nama pengguna yang akan digunakan saat melakukan autentikasi dengan token akses dan gcloud auth print-access-token adalah perintah untuk memperoleh token akses. Token akses Anda adalah {i>password<i} untuk otentikasi. Otentikasi dengan token akses adalah cara paling aman metode autentikasi.

  3. Kirim chart Helm ke Artifact Registry:

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

Mengonfigurasi Config Sync untuk menyinkronkan dari diagram Helm Anda

Di bagian ini, Anda akan membuat objek RootSync dan mengonfigurasi Config Sync yang akan disinkronkan dari bagan Helm.

Jika ingin mengganti nilai default diagram Helm, Anda dapat melakukannya dengan menentukan nilai di kolom spec.helm.values atau dengan menambahkan referensi ke ConfigMap menggunakan kolom spec.helm.valuesFileRefs. Untuk mempelajari lebih lanjut tentang bidang, lihat Konfigurasi untuk repositori Helm.

nilai

  1. Buat objek RootSync dengan nama unik:

    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
    

    Ganti ROOT_SYNC_NAME dengan nama RootSync Anda . Nama harus unik di cluster dan tidak lebih dari 26 karakter. Jika Anda menginstal Config Sync menggunakan Konsol Google Cloud atau Google Cloud CLI, pilih nama selain root-sync.

    Dalam contoh ini, diagram Helm di-deploy di namespace test karena sumber dayanya berisi namespace: {{ .Release.Namespace }} dalam template-nya.

    Anda dapat menggunakan helm.values untuk mengganti nilai default. Untuk mempelajari tentang bidang, lihat Konfigurasi untuk repositori Helm.

  2. Terapkan objek RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  3. Pastikan bahwa Config Sync disinkronkan dari image:

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

    Outputnya mirip dengan hal berikut ini:

    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
    

    Anda telah berhasil menyinkronkan diagram Helm ke cluster.

valuesFileRefs

  1. Buat objek RootSync dengan nama unik:

    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
    

    Ganti kode berikut:

    • ROOT_SYNC_NAME: nama RootSync . Nama harus unik di cluster dan tidak lebih dari 26 karakter. Jika Anda menginstal Config Sync menggunakan Konsol Google Cloud atau Google Cloud CLI, pilih nama selain root-sync.
    • CONFIGMAP_NAME: nama ConfigMap Anda. Hal ini dapat berupa nama ConfigMap valid yang diterima oleh Kubernetes yang unik di cluster Anda.
    • (opsional) DATA_KEY: kunci data di ConfigMap yang ingin Anda baca nilainya. Defaultnya adalah values.yaml.
  2. Buat objek ConfigMap dengan nilai Anda:

    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
    

    Jika Anda tidak menentukan nilai untuk DATA_KEY dalam RootSync, nilai ini seharusnya menjadi values.yaml default.

  3. Terapkan objek ConfigMap:

    kubectl apply -f CONFIGMAP_NAME.yaml
    
  4. Terapkan objek RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  5. Pastikan bahwa Config Sync disinkronkan dari image:

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

    Outputnya mirip dengan hal berikut ini:

    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
    

    Anda telah berhasil menyinkronkan diagram Helm ke cluster.

    Anda juga dapat melihat imagePullPolicy di salah satu resource yang disinkronkan di cluster untuk memverifikasi bahwa nilai dari ConfigMap digunakan untuk merender diagram:

    kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
    
  6. Karena ConfigMap tidak dapat diubah, Anda harus membuat ConfigMap baru dan mengupdate spec.helm.valuesFileRefs di RootSync atau Spesifikasi RepoSync untuk mengarah ke ConfigMap baru. Membuat ConfigMap baru memastikan perubahan pada nilai menyebabkan diagram Helm dirender ulang, sehingga berguna saat beberapa ConfigMaps yang dirujuk di spec.helm.valuesFileRefs perlu diperbarui di waktu yang sama saat melakukan rendering ulang. Untuk mengubah nilai yang digunakan untuk merender diagram, buat ConfigMap baru dengan nama yang berbeda:

    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
    
  7. Update objek RootSync untuk mereferensikan ConfigMap baru:

    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
    
  8. Terapkan objek ConfigMap:

    kubectl apply -f CONFIGMAP_NAME-2.yaml
    
  9. Terapkan objek RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  10. Pastikan bahwa Config Sync disinkronkan dari image:

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

    Anda juga dapat melihat imagePullPolicy di salah satu resource yang disinkronkan di cluster untuk memverifikasi bahwa nilai baru dari ConfigMap yang diupdate digunakan untuk merender bagan:

    kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
    

Langkah selanjutnya