Di artikel sebelumnya diperlihatkan penggunaan perangkat manajemen kustomize untuk menginstalasi satu obyek deployment ingress dan servicenya di suatu kluster kubernetes.
Artikel ini akan memberikan contoh yang memperlihatkan keuntungan dari penggunaan kustomize untuk berbagai environment tanpa mengubah konfigurasi dasar dari sebuah obyek ingress. Obyek ingress yang diinstalasi di berbagai environment, seperti:
* produksi
* development
* staging
Untuk itu kita mulai dengan bagaimana pembentukan direktori yang diperlukan untuk penggunaan kustomize dengan 3 environment tersebut.
Pembentukan direktori utama adalah nama dari aplikasi itu sendiri untuk itu kita ambil nama applikasinya adalah aplikasi-nginx-ingress
* aplikasi-nginx-ingress
Di direktori aplikasi-nginx-ingress dibuat 2 direktori lainnya.
* base
* overlays
Direktori base ini akan berisikan konfigurasi dasar dari aplikasi dan konfigurasi ini dapat dirubah oleh berbagai file yang ada di direktori overlays.
Di direktori base akan ada 2 file:
* deployment.yaml
* kustomization yaml
Dan di direktori overlay akan ada 2 file seperti di bawah ini.
* kustomization.yaml
* patch_deployment.yaml
Sehingga dengan perintah tree akan memperlihatkan struktur file seperti di bawah ini.
aplikasi-nginx-ingress/
├── base/
│ ├── kustomization.yaml
│ └── base-deployment.yaml
|
└── overlays/
└── staging/
├── kustomization.yaml
└── aplikasi-nginx-ingres
Seperti yang diterangkan di artikel pertama, berikut adalah manifest deployment dari 3 environment untuk nginx.
Deployment untuk environment staging:
apiVersion: apps/v1
kind: Deployment
metadata:
name: staging-nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.62
resources:
requests:
cpu: "200m"
Deployment untuk environment development:
apiVersion: apps/v1
kind: Deployment
metadata:
name: development-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.2
resources:
requests:
cpu: "250m"
Dan yang ketiga untuk environment produksi:
apiVersion: apps/v1
kind: Deployment
metadata:
name: produksi-nginx-deployment
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.2
resources:
requests:
cpu: "500m"
Dari ketiga manifest di atas terlihat bahwa parameter yang berbeda adalah cpu dan replica dan nama dari deployment. Parameter lainnya seperti selector, metadata, image adalah sama.
Ada dua kemungkinan untuk pembuatan file base deployment. Di sini akan digunakan satu cara di mana seluruh parameter ditulis secara lengkap dan kemudian akan diubah berdasarkan berbagai file di direktori overlays.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21.6
resources:
requests:
cpu: "50m"
Contoh di sini hanya akan memperlihatkan bagaiman kustomize ini dilakukan di environment staging. Untuk environment lainnya, caa yang sama dilakukan dengan perbedaan di nama direktori dan isi dari berbagi file yang ada disesuaikan dengan values dari parameter yang didefinisikan, ,
Berikutnya adalah membuat file di direktori overlays dan sub direktori staging:
Untuk ini, kita akan menciptakan file deployment di direktori overlay untuk environment staging:
$ cat overlays/staging/deploymentStagingPatch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
template:
spec:
containers:
- name: nginx
resources:
requests:
cpu: "100m"
Proses berikutnya adalah menciptakan file kustomization di direktori base dan overlays.
Untuk direktori base berikut adalah isinya:
resources:
- base-deployment.yaml
Dan untuk kustomization di direktori overlays adalah sebagai berikut:
resources:
- ../base/base-deployment.yaml
patchesStrategicMerge:
- deploymentStagingPatch.yaml
Kustomize menggunakan file-file di direktori overlays untuk merubah nilai berbagai parameter dari sebuah file base berdasarkan kombinasi parameter berikut kind-name-apiVersion-(namespace)
.
Kustomize build
Setelah struktur direktori dan file-file-nya selesai dilakukan, langkah berikutnya adalah menciptakan file deployment itu sendiri. Hal ini dilakukan dengan perintah
- kustomize build
Perintah kustomize build dilakuakn di direktori aplikasi-nginx-ingress/base dan akan menampilkan di standar output sebuah file deployment. Hasil dari perintah ini dapat dianalisa untuk meyakinkan bahwa tidak ada kesalahan yang terjadi di berbagai file di direktori base dan overlays.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.21.6
name: nginx
resources:
requests:
cpu: 100m
Untuk memudah melakukan analisa adalah dengan menaruh standar output dari perintah kustomize build ke dalam sebuah file..
Jika setelah analisa standard output perintah kustomize build disimpulkan aplikasi dapat diinstalasi perintah berikut adalah perintah yang dapat dilakukan:
$ kustomize build | kubectl apply -f -
Perintah di atas akan menginstalasi aplikasi yang telah dijelaskan di atas.