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: