halo sobat sekolahlinux, kali ini saya akan sedikit share tentang bagaimana cara implementasi kustomize pada kubernetes, kustomize sendiri adalah sebuah standalone tool yang digunakan untuk memanage manifest k8s untuk banyak environment, kubectl sendiri saat ini sudah support untuk menjalakan kustomize file sejak kubectl v1.14
untuk layout file dari kustomize sendiri kurang lebih mirip seperti terraform, yang mana kita bisa membuat base template dan nantinya base template tersebut bisa kita overlay dengan template lain sesuai dengan environment yang ada, berikut ini gambaran layout kustomize
~/ServiceApps
├── base
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── development
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── production
├── deployment.yaml
├── kustomization.yaml
└── service.yaml
lalu berikut ini isi masing-masing dari file-file yang ada pada layout diatas
/base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml
/base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
/base/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
/overlays/development/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patchesStrategicMerge: - deployment.yaml - service.yaml
/overlays/development/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
env: development
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
selector:
matchLabels:
env: development
template:
metadata:
labels:
env: development
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: RESTART
value: "1"
/overlays/development/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
env: development
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
/overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patchesStrategicMerge: - deployment.yaml - service.yaml
/overlays/production/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
env: production
spec:
replicas: 6
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 3
selector:
matchLabels:
env: production
template:
metadata:
labels:
env: production
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: RESTART
value: "1"
/overlays/production/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
env: production
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
pada manifest diatas saya coba membedakan antara overlay development dan juga production, kalian bisa lihat pada part replica, pada development replica nya hanya 3, sedangkan pada production replica nya ada 6
lalu selanjutnya saya juga membedakan label pada overlay development dan juga production, pada overlay development saya menambahkan label env: development dan pada overlay production saya menambahkan label env: production, dan pada deployment.yaml yang ada di folder base saya sudah menanamkan label app: nginx
selanjutnya mari kita coba jalankan perintah dibawah ini untuk melihat hasil outputnya
kustomize build overlay/development/
maka outputnya akan menjadi seperti dibawah ini
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
env: development
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
env: development
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
env: development
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: nginx
env: development
spec:
containers:
- env:
- name: RESTART
value: "1"
image: nginx:latest
name: nginx
ports:
- containerPort: 80
jika sudah selanjutnya kita coba jalankan kustomize build pada overlay production
kustomize build overlay/production/
maka outputnya akan menjadi seperti dibawah ini
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
env: production
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
env: production
name: nginx
spec:
replicas: 6
selector:
matchLabels:
app: nginx
env: production
strategy:
rollingUpdate:
maxSurge: 3
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: nginx
env: production
spec:
containers:
- env:
- name: RESTART
value: "1"
image: nginx:latest
name: nginx
ports:
- containerPort: 80
jadi dari hasil percobaan diatas terlihat bahwa file deployment.yaml yang ada pada folder base/ mengalami perubahan, diataranya perubahan value pada replicas juga ada penambahan label env:, perubahan serta penambahan pada paramater serta label diatas menyesuaikan dengan folder overlay
nah untuk referensi detail lengkapnya kami bisa membaca link referensi dibawah ini:
