Untuk menyimpan konfigurasi, selain volume kita bisa menggunakan ConfigMap. ConfigMap memiliki batas maksimal file sebesar 1 MB, sejak Kubernetes 1.19 menjadi read-only by default. Ada banyak contoh penggunaan ConfigMap, beberapa diantaranya:
1. Konfigurasi Database
2. Secret (Vault)
3. Environment variable

Sebagai contoh pembelajaran, kita akan mengganti konfigurasi nginx yang berada di /etc/nginx/nginx.conf dengan configMap yang kita buat
Buat file nginx-configmap.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: aplikasi-belanja
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
          readOnly: true
  volumes:
    - name: nginx-config
      configMap: 
        name: nginx-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    user  nginx;
    worker_processes  auto;
    worker_rlimit_nofile 10000;
 
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
 
    events {
        worker_connections 10000;
        use epoll;
        multi_accept on;
    }
 
    http {
        include /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
 
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        include /etc/nginx/conf.d/*.conf;
    }

konfigurasi diatas dibagi menjadi dua bagian, 1 POD yang menjalankan nginx, satu lagi configMap yang akan mengganti /etc/nginx/nginx.conf. Yang perlu diperhatikan adalah penggunaan subPath, tanpa menggunakan subPath kubernetes akan menghapus semua isi folder /etc/nginx/nginx.conf atau apapun folder yang di mount, karena kita hanya butuh mengganti 1 file, bisa digunakan dengan subPath jadi kita tidak perlu build docker dan inject konfigurasinya dari folder yang dimapping.

Contoh kasus lain yang bisa digunakan adalah sewaktu deploy Laravel ke kubernetes, dikarenakan .env laravel tidak bisa digunakan dari folder lain, cara ini adalah yang paling masuk akal sebagai solusinya.

Deploy konfigurasi tersebut

kubectl deploy -f nginx-configmap.yaml

Cek nginx.conf yang baru di deploy

kubectl exec nginx -- cat /etc/nginx/nginx.conf

Cek status pod nginx

kubectl get pod nginx
# output
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          6m23s

Cek response nginx

kubectl exec nginx -- curl -s -I localhost
# output
HTTP/1.1 200 OK
Server: nginx/1.21.1
Date: Tue, 20 Jul 2021 09:33:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 06 Jul 2021 14:59:17 GMT
Connection: keep-alive
ETag: "60e46fc5-264"
Accept-Ranges: bytes

Leave a comment

Your email address will not be published. Required fields are marked *