Menggunakan Kustomize untuk Manajemen Konfigurasi YAML
Hai teman-teman penggiat K8s! Pernah gak sih ngerasain pusing tujuh keliling pas lagi ngurusin konfigurasi YAML buat aplikasi yang di-deploy di Kubernetes? Yup, pasti pernah dong. YAML itu emang bahasa yang gampang buat manusia baca, tapi ketika aplikasi kita makin kompleks, file YAML makin banyak, duhh, ribet banget deh!
Nah, buat ngatasin masalah ini, ada satu tool keren namanya Kustomize. Kustomize ini bakal ngebuat hidup kita sebagai pengelola aplikasi di Kubernetes jadi lebih gampang dengan managed konfigurasi YAML-nya.
Apa itu Kustomize?
Buat yang belum tau, Kustomize itu adalah tool yang bikin kita bisa manajemen konfigurasi YAML secara deklaratif nih. Kustomize nggak ngedit file asli YAML kita, tapi dia ngebuild konfigurasi yang disesuain dengan kebutuhan kita. Nggak perlu takut kehilangan konfigurasi aslinya, karena tool ini nggak ngubah-ngubahnya secara langsung.
Gimana sih cara install Kustomize?
Sebelum kita ulik lebih jauh, yuk install dulu Kustomize-nya. Banyak caranya nih, tapi yang paling gampang pake kubectl
aja (Kustomize udah built-in di kubectl
dari versi 1.14 ke atas):
$ kubectl kustomize <dir>/kustomization.yaml
Atau kalau mau install standalone, bisa lewat curl
atau go get
juga:
# Pake curl
$ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
# Pake go get
$ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3
Mulai pake Kustomize
Eits, jangan keburu bosen dulu ngeliatin kode command-line, mari kita bikin konfigurasi YAML kita jadi lebih teratur!
Pertama, kita punya beberapa file YAML, misalnya deploy.yaml
, configmap.yaml
, dan service.yaml
. Kustomize minta kita naruh file-file itu di satu direktori sama dengan file kustomization.yaml
.
Contoh struktur direktori:
myapp/
├── base/
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays/
├── production
│ ├── deployment-patch.yaml
│ └── kustomization.yaml
└── staging
├── deployment-patch.yaml
└── kustomization.yaml
Nah, dari strukturnya keliatan kan, kita punya base
yang jadi konfigurasi dasar, lalu ada overlays
buat ngatur konfigurasi yang berbeda-beda tiap environment.
Contoh kustomization.yaml
di base/
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
Di sini kita punya deployment.yaml
dan service.yaml
sebagai resource. Kustomize nanti akan build mereka jadi satu kustomization.yaml
.
Contoh Overlay di overlays/production
Misal, di environment production kita mau nambahin resource configmap
dan nambah replicas. Maka filenya jadi gini:
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patchesStrategicMerge:
- deployment-patch.yaml
# deployment-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
Kustom Build
Nah, sekarang kita bisa pake perintah ini buat ngebuild file YAML final:
$ kubectl kustomize overlays/production
Atau buat langsung apply ke cluster K8s:
$ kubectl apply -k overlays/production
Kenapa Harus Pake Kustomize?
- DRY (Don’t Repeat Yourself): Kita nggak perlu ngeduplikasi banyak file YAML buat beda-beda environment. Tinggal pake overlay aja.
- Mudah Dikelola: Perubahan bisa fokus di konfigurasi dasarnya, lalu nanti
overlay
yang adjust ke kebutuhan environment. - Built-in Kubectl: Udah terintegrasi sama
kubectl
, jadi nggak perlu install tool lain lagi! - Flexible Patch: Kustomize support JSONPatch dan Strategic Merge Patch, jadi kita bisa ngubah sebagian konfigurasi tanpa ngutak-ngatik file aslinya.