Kustomize dan direktori base dan overlays

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.

Verified by MonsterInsights