Panduan Linux

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?

  1. DRY (Don’t Repeat Yourself): Kita nggak perlu ngeduplikasi banyak file YAML buat beda-beda environment. Tinggal pake overlay aja.
  2. Mudah Dikelola: Perubahan bisa fokus di konfigurasi dasarnya, lalu nanti overlay yang adjust ke kebutuhan environment.
  3. Built-in Kubectl: Udah terintegrasi sama kubectl, jadi nggak perlu install tool lain lagi!
  4. Flexible Patch: Kustomize support JSONPatch dan Strategic Merge Patch, jadi kita bisa ngubah sebagian konfigurasi tanpa ngutak-ngatik file aslinya.

#Kustomize #Tutorial