Mengonfigurasi Kubernetes dengan Kustomize

Kustomize adalah sebuah Kubernetes yang memungkinkan Anda menyesuaikan YAML dengan template yang tidak memiliki template file, meninggalkan file asli yang tidak disentuh. Kustomize juga dapat menghasilkan resource sebagai ConfigMaps dan Secret dari representasi lain. Kustomize dibangun untuk Kubernetes API, agar dapat memahami dan memodifikasi objek bergaya Kubernetes.

Jika Anda ingin menggunakan diagram Helm dengan Config Sync, ada dua opsi yang didukung seperti merender Helm melalui Kustomize atau menggunakan Helm API. Detail halaman ini persyaratan untuk merender diagram Helm melalui Kustomize. Untuk informasi selengkapnya menggunakan Helm API, lihat Menyinkronkan chart Helm dari Artifact Registry.

Perbedaan berikut berlaku saat menggunakan Kustomize untuk merender chart Helm:

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

Persyaratan Config Sync untuk Kustomize

Untuk merender konfigurasi Kustomize dan chart Helm secara otomatis, pastikan Lingkungan Config Sync memenuhi persyaratan berikut:

  • Menggunakan sumber kebenaran tidak terstruktur. Rendering otomatis tidak didukung untuk sumber hierarkis.
  • Untuk memicu proses rendering, sumber kebenaran Anda harus memiliki File konfigurasi Kustomization (kustomization.yaml, kustomization.yml, atau Kustomization) di root direktori Anda. Jika direktori {i>root<i} tidak memiliki file konfigurasi Kustomization, Config Sync akan menyinkronkan konfigurasi sebagaimana adanya tanpa rendering apa pun.
  • Sertakan konfigurasi Anda dalam file kustomization.yaml. Jika Anda tidak menyertakan file konfigurasi ini, konfigurasinya tidak disinkronkan ke cluster.
  • Sebelum Config Sync 1.19.0, semua konfigurasi harus disertakan di bawah direktori utama Kustomization. Mulai dari versi 1.19.0, Config Sync mendukung file di luar direktori root.

Merender konfigurasi Kustomize

Contoh berikut menunjukkan cara menyiapkan 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 merujuk ke basis 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 kebenaran dan berisi referensi terhadap empat overlay dengan generator ConfigMap dari file lokal:

# ./example/kustomization.yaml
resources:
- team-a
- team-b
- team-c
- ../external-team # Starting from 1.19.0, Config Sync allows external resources located outside of the Kustomization root directory.

configMapGenerator:
- name: my-configmap
  namespace: my-namespace
  files:
    - ../external-data.txt # Starting from 1.19.0, Config Sync allows external files located outside of the Kustomization root directory.

kustomize.yaml berikut ada 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 Basis Kustomize:

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

Anda dapat menjelajahi contoh repositori di mengonfigurasi kebijakan khusus namespace di GitHub.

Merender chart Helm melalui Kustomize

Bagian ini menjelaskan cara merender diagram Helm melalui Kustomize. Versi Helm dan Kustomize yang dipaketkan mencantumkan versi Kustomize dan Helm yang dipaketkan dengan versi Sinkronisasi Konfigurasi.

Kolom diagram Helm

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

Kolom Deskripsi
helmGlobals Parameter diterapkan ke semua diagram Helm
helmGlobals.chartHome Menerima string. Sebuah jalur, relatif terhadap {i> root<i} Kustomization, ke yang berisi subdirektori untuk setiap diagram agar 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 berupaya untuk membaca atau menulis direktori ini. Jika dihilangkan, TMP_DIR/helm akan digunakan, dengan TMP_DIR merupakan direktori sementara yang dibuat oleh Kustomisasi 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. Mengganti RELEASE_NAME di output template diagram
helmCharts.namespace Menerima string. Menetapkan namespace target untuk rilis (.Release.Namespace di template)
helmCharts.valuesInline Nilai yang akan digunakan, bukan nilai default yang menyertai diagram
helmCharts.valuesFile Menerima string. ValueFile adalah jalur lokal atau URL jarak jauh ke file nilai yang akan digunakan alih-alih nilai {i>default<i} yang menyertai diagram. Nilai default berada di 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 harus juga membuat CustomResourceDefinitions. Nilai defaultnya adalah false.

Merender diagram Helm jarak jauh

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

kustomization.yaml berikut merender remote cert-manager 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 lokal Diagram helm. Untuk menggunakan bagan Helm versi khusus, Anda dapat menarik versi rilis dari chart Helm (misalnya, ArtifactHub), buat perubahan secara lokal, dan lalu kirimkan perubahan ke sumber yang terpercaya.

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. Tujuan direktori default untuk chart Helm adalah charts dan karena diagram ini dicentang dalam 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:
  # Starting from 1.19.0, Config Sync allows loading from an external directory outside of the Kustomization root.
  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 sekaligus File kustomization.yaml, terlepas dari apakah diagram tersebut 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 selanjutnya