implementasi kustomize pada kubernetes

0
405

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: