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