Halaman ini menunjukkan cara menyinkronkan diagram Helm dari Artifact Registry dengan membuat dan mendorong diagram 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 diagram Helm di Artifact Registry, yang merupakan repositori Helm yang direkomendasikan untuk Google Cloud. Untuk menggunakan fitur ini, Anda harus
mengaktifkan
RootSync dan RepoSync API.
Config Sync merender diagram Helm menggunakan
helm template
sehingga tidak mendukung pengelolaan siklus proses Helm lengkap.
Versi Helm dan Kustomize yang dipaketkan mencantumkan versi Kustomize dan Helm yang dipaketkan dengan versi Config Sync yang sesuai.
Sebelum memulai
- Instal Helm 3.8.0 atau yang lebih baru. Di versi Helm sebelumnya, dukungan untuk diagram dalam format OCI adalah fitur eksperimental.
- Aktifkan Workload Identity Federation for GKE di cluster Anda.
Batasan
Anda tidak dapat mengubah kolom yang tidak dapat diubah dalam konfigurasi hanya dengan mengubah nilai di sumber tepercaya. Jika Anda perlu memperbarui kolom yang tidak dapat diubah, buat perubahan di sumber tepercaya terlebih dahulu, lalu hapus objek di cluster secara manual. Config Sync kemudian dapat membuat ulang objek dengan nilai kolom baru.
Diagram 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 cara membuat repositori Artifact Registry, lihat Membuat repositori.
Aktifkan Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
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
: lokasi repositori regional atau multi-regional.
Variabel yang digunakan di bagian berikut:
FLEET_HOST_PROJECT_ID
: jika Anda menggunakan Workload Identity Federation GKE untuk GKE, nilai ini sama denganPROJECT_ID
. Jika Anda menggunakan Workload Identity Federation fleet untuk GKE, ini adalah project ID fleet tempat cluster Anda terdaftar.GSA_NAME
: nama akun layanan Google kustom yang ingin Anda gunakan untuk terhubung ke Artifact Registry.KSA_NAME
: akun layanan Kubernetes untuk rekonsiliator.- Untuk repositori root, jika nama
RootSync
adalahroot-sync
, tambahkanroot-reconciler
. Jika tidak, tambahkanroot-reconciler-ROOT_SYNC_NAME
. - Untuk repositori namespace, jika nama
RepoSync
adalahrepo-sync
, tambahkanns-reconciler-NAMESPACE
. Jika tidak, tambahkanns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
denganREPO_SYNC_NAME_LENGTH
adalah jumlah karakter dalamREPO_SYNC_NAME
.
- Untuk repositori root, jika nama
Memberikan izin pembaca
Jika versi Config Sync adalah 1.17.2 atau yang lebih baru di cluster, Anda dapat menggunakan akun layanan Kubernetes untuk melakukan autentikasi ke Artifact Registry. Jika tidak, gunakan akun layanan Google untuk autentikasi.
Menggunakan akun layanan Kubernetes
Berikan peran IAM Artifact Registry Reader (roles/artifactregistry.reader
)
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
Berikan peran IAM Pembaca Artifact Registry (
roles/artifactregistry.reader
) 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
Buat binding kebijakan IAM antara akun 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 diagram Helm ke repositori Artifact Registry
Di bagian ini, Anda akan mendownload diagram Helm publik dan mendorongnya ke Artifact Registry.
Ambil paket
mysql-9.3.1.tgz
dari repositori Helm publik dan download secara lokal:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
Mengautentikasi 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 dangcloud auth print-access-token
adalah perintah untuk mendapatkan token akses. Token akses Anda adalah sandi untuk autentikasi. Autentikasi dengan token akses adalah metode autentikasi yang paling aman.Kirim diagram 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
Di bagian ini, Anda akan membuat objek RootSync dan mengonfigurasi Config Sync untuk menyinkronkan dari diagram 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 kolom
opsional, lihat
Konfigurasi untuk repositori Helm.
nilai
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 objek RootSync Anda. Nama harus unik dalam cluster dan tidak boleh lebih dari 26 karakter. Jika Anda menginstal Config Sync menggunakan konsol Google Cloud atau Google Cloud CLI, pilih nama selainroot-sync
.Dalam contoh ini, diagram Helm di-deploy di namespace
test
karena resource-nya berisinamespace: {{ .Release.Namespace }}
dalam template-nya.Anda dapat menggunakan
helm.values
untuk mengganti nilai default. Untuk mempelajari kolom opsional, lihat Konfigurasi untuk repositori Helm.Terapkan objek RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Pastikan Config Sync menyinkronkan 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 kini telah berhasil menyinkronkan diagram Helm ke cluster.
valuesFileRefs
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 objek RootSync Anda. Nama harus unik dalam cluster dan tidak boleh lebih dari 26 karakter. Jika Anda menginstal Config Sync menggunakan Konsol Google Cloud atau Google Cloud CLI, pilih nama selainroot-sync
.CONFIGMAP_NAME
: nama ConfigMap Anda. Nama ini dapat berupa nama ConfigMap yang valid dan diterima oleh Kubernetes yang unik di cluster Anda.- (opsional)
DATA_KEY
: kunci data di ConfigMap yang ingin Anda baca nilainya. Defaultnya adalahvalues.yaml
.
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
di RootSync, nilai tersebut harus berupavalues.yaml
default.Terapkan objek ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yaml
Terapkan objek RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Pastikan Config Sync menyinkronkan 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 kini 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
Karena ConfigMap tidak dapat diubah, untuk mengubah nilai, Anda harus membuat ConfigMap baru dan memperbarui
spec.helm.valuesFileRefs
dalam spesifikasi RootSync atau RepoSync agar mengarah ke ConfigMap baru. Membuat ConfigMap baru memastikan perubahan pada nilai menyebabkan diagram Helm dirender ulang, yang berguna saat beberapa ConfigMap yang dirujuk dispec.helm.valuesFileRefs
perlu diperbarui secara bersamaan saat merender 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
Perbarui 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
Terapkan objek ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yaml
Terapkan objek RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Pastikan Config Sync menyinkronkan 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 diperbarui digunakan untuk merender diagram:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Langkah selanjutnya
- Pelajari lebih lanjut cara menginstal Config Sync.