Mengonfigurasi Kubernetes dengan Kustomize

Kustomize adalah alat transformasi konfigurasi Kubernetes yang memungkinkan Anda menyesuaikan file YAML tanpa template, tanpa mengubah file aslinya. Kustomize juga dapat membuat resource seperti ConfigMaps dan Secrets dari representasi lain. Kustomize dibuat untuk Kubernetes API, sehingga dapat memahami dan mengubah objek gaya Kubernetes.

Jika Anda ingin menggunakan diagram Helm dengan Config Sync, ada dua metode yang didukung: merender Helm melalui Kustomize atau menggunakan Helm API. Halaman ini menjelaskan persyaratan untuk merender diagram Helm melalui Kustomize. Untuk mengetahui informasi selengkapnya tentang penggunaan Helm API, lihat Menyinkronkan diagram Helm dari Artifact Registry.

Perbedaan berikut berlaku saat menggunakan Kustomize untuk merender diagram Helm:

  • Helm registry pribadi dan berbasis OCI tidak didukung. Dengan Helm API, registry berbasis OCI dan pribadi didukung.
  • Nilai Helm dapat dikelola di sumber tepercaya. Dengan Helm API, nilai dikelola sebagai bagian dari RootSync atau RepoSync API.
  • Rendering beberapa diagram Helm dalam objek RootSync atau RepoSync didukung. Dengan Helm API, Anda hanya dapat merender satu diagram Helm dalam objek RootSync atau RepoSync.

Persyaratan Config Sync untuk Kustomize

Untuk merender konfigurasi Kustomize dan diagram Helm secara otomatis, pastikan lingkungan Config Sync Anda memenuhi persyaratan berikut:

  • Menggunakan sumber tepercaya yang tidak terstruktur. Rendering otomatis tidak didukung untuk sumber hierarkis.
  • Untuk memicu proses rendering, sumber tepercaya Anda harus memiliki file konfigurasi Kustomisasi (kustomization.yaml, kustomization.yml, atau Kustomization) di root direktori Anda. Jika direktori root tidak memiliki file konfigurasi Kustomisasi, Config Sync akan menyinkronkan konfigurasi apa adanya tanpa rendering apa pun.
  • Sertakan konfigurasi Anda dalam file kustomization.yaml. Jika Anda tidak menyertakan file konfigurasi ini, konfigurasi tidak akan disinkronkan ke cluster.

Merender konfigurasi Kustomize

Contoh berikut menunjukkan cara menyiapkan sumber tepercaya untuk menggunakan konfigurasi Kustomize dengan rendering otomatis.

Contoh arsitektur untuk konfigurasi Kustomize

Direktori ini mencakup empat overlay (team-a, team-b, team-c, dan external-team) yang mereferensikan dasar yang sama, dan file yang digunakan oleh generator ConfigMap.

Diagram berikut menunjukkan struktur direktori:

├── example
│   ├── base
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── networkpolicy.yaml
│   │   ├── rolebinding.yaml
│   │   └── role.yaml
│   ├── kustomization.yaml
│   ├── README.md
│   ├── team-a
│   │   └── kustomization.yaml
│   ├── team-b
│   │   └── kustomization.yaml
│   └── team-c
│       └── kustomization.yaml
├── external-team
│   └── kustomization.yaml
└── external-data.txt

File kustomization.yaml berikut berada di root sumber tepercaya dan berisi referensi ke empat overlay dengan generator ConfigMap dari file lokal:

# ./example/kustomization.yaml
resources:
- team-a
- team-b
- team-c
- ../external-team

configMapGenerator:
- name: my-configmap
  namespace: my-namespace
  files:
    - ../external-data.txt

kustomize.yaml berikut berada di direktori team-a dan merupakan overlay untuk team-a:

# ./example/team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
  patch: |-
    - op: replace
      path: /metadata/name
      value: team-a

kustomization.yaml berikut ada di direktori base dan merupakan dasar Kustomize:

# ./example/base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Anda dapat menjelajahi contoh repositori di direktori configuring namespace-specific policies di GitHub.

Merender diagram Helm melalui Kustomize

Bagian ini menjelaskan cara merender diagram Helm melalui Kustomize. Versi Helm dan Kustomize yang dibundel mencantumkan versi Kustomize dan Helm yang dibundel dengan versi Config Sync yang sesuai.

Kolom diagram Helm

Anda dapat menambahkan kolom diagram Helm berikut ke file kustomization.yaml untuk mendukung rendering diagram Helm melalui Kustomize:

Kolom Deskripsi
helmGlobals Parameter diterapkan ke semua diagram Helm
helmGlobals.chartHome Menerima string. Jalur, relatif terhadap root Kustomisasi, ke direktori yang berisi subdirektori untuk setiap diagram yang akan disertakan dalam Kustomisasi. Nilai default kolom ini adalah charts.
helmGlobals.configHome Menerima string. Menentukan nilai yang harus diteruskan Kustomize ke Helm dengan variabel lingkungan HELM_CONFIG_HOME. Kustomize tidak mencoba membaca atau menulis direktori ini. Jika tidak disertakan, TMP_DIR/helm akan digunakan, dengan TMP_DIR adalah direktori sementara yang dibuat oleh Kustomize untuk Helm.
helmCharts Array parameter diagram Helm
helmCharts.name Menerima string. Nama diagram. Kolom ini wajib diisi.
helmCharts.version Menerima string. Versi diagram
helmCharts.repo Menerima string. URL yang digunakan untuk menemukan diagram
helmCharts.releaseName Menerima string. Menggantikan RELEASE_NAME dalam output template diagram
helmCharts.namespace Menerima string. Menetapkan namespace target untuk rilis (.Release.Namespace dalam template)
helmCharts.valuesInline Nilai yang akan digunakan, bukan nilai default yang menyertai diagram
helmCharts.valuesFile Menerima string. ValuesFile adalah jalur lokal atau URL jarak jauh ke file nilai yang akan digunakan alih-alih nilai default yang disertakan dalam diagram. Nilai defaultnya adalah CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Menerima merge, override, (default), atau replace. ValuesMerge menentukan cara memperlakukan ValuesInline sehubungan dengan Values.
helmCharts.includeCRDs Menerima true atau false. Menentukan apakah Helm juga harus membuat CustomResourceDefinitions. Nilai defaultnya adalah false.

Merender diagram Helm jarak jauh

Config Sync mendukung rendering diagram Helm jarak jauh di cluster yang memiliki akses internet publik.

kustomization.yaml berikut merender cert-manager jarak jauh dengan menetapkan kolom helmCharts berikut:

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

Merender diagram Helm lokal

Config Sync mendukung rendering chart Helm lokal. Untuk menggunakan versi yang disesuaikan dari diagram Helm, Anda dapat menarik versi yang dirilis dari diagram Helm (misalnya, ArtifactHub), melakukan perubahan secara lokal, lalu mengirimkan perubahan ke sumber tepercaya Anda.

Diagram berikut menunjukkan struktur direktori:

├── base
│   ├── charts
│   │   └── cert-manager
│   └── kustomization.yaml
├── overlays
│   └── stage
│       └── kustomization.yaml
└── base_value_overrides.yaml

kustomization.yaml berikut merender diagram cert-manager lokal. Direktori default untuk diagram Helm adalah charts dan karena diagram ini diperiksa ke direktori charts, Anda tidak perlu menentukan .helmCharts.repo atau .helmCharts.version.

# ./overlays/stage/kustomization.yaml
...
# This field is optional if your Helm charts are located in the default 'charts' directory.
helmGlobals:
  chartHome: ../../base/charts
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
  # Specify a local path or a remote URL to a values file instead of using the default values in CHART_HOME/NAME/values.yaml.
  valuesFile: ../../base_value_overrides.yaml
...

Merender beberapa diagram Helm

Config Sync mendukung rendering beberapa diagram Helm dalam satu file kustomization.yaml, terlepas dari apakah diagram tersebut bersifat jarak jauh atau lokal.

kustomization.yaml berikut merender diagram Helm lokal (cert-manager):

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

Langkah berikutnya