halo sobat sekolahlinux kali ini saya akan membahas tentang implementasi secret volume dan configmap volume pada kubernetes, oh iya untuk volume type kubernetes ini sebenarnya ada banyak, sobat sekolahlinux bisa lihat di link berikut ini
namun pada pembahasan kali ini saya hanya akan membahas 2 volume type, kenapa hanya 2, karena ya artikel ini memang dibuat untuk mendokumentasikan 2 volume type ini, apa saja 2 volume type tersebut hehehe :D, berikut ini listnya:
secret volume
secret volume biasanya digunakan untuk menyimpan file-file yang berisi data sensitiv, misal user dan password ataupun cert ssl, type volume ini akan menyimpan file kedalam momory, kamu bisa baca lebih jelasnya pada link dibawah:
configmap volume
configmap volume digunakan untuk menyimpan file yang sebelumnya sudah di set sebelumnya di configmap, biasanya configmap volume untuk menyimpan file-file konfigurasi suatu aplikasi sehingga jika ada perubahan pada file konfigurasi kita bisa langsung merubahnya disisi configmap nya, kamu bisa baca lebih jelasnya pada link dibawah:
oke kita langsung praktek saja ya, pertama kita akan buat secret untuk digunakan pada volume type secret, pada type secret ini saya memiliki 2 buah file cert ssl yaitu
- sekolahlinux.crt
- sekolahlinux.key
saya ingin 2 file tersebut ada didalam pods, misal saya pakai image nginx, maka saya ingin 2 file tersebut ada di folder /etc/nginx/ssl, pertama kita buat 2 file tersebut menjadi sebuah secret di kubernetes, caranya seperti berikut:
kubectl create secret generic sekolahlinux-ssl-file --from-file=./sekolahlinux.crt --from-file=./sekolahlinux.key -n sekolahlinux
selanjutnya kita coba cek apakah secret tersebut sudah berhasil dibuat dengan menjalankan perintah dibawah
kubectl get secret -n sekolahlinux
maka hasilnya akan seperti dibawah
sekolahlinux@sekolahlinux-controlbox:~$ kubectl get secret -n sekolahlinux NAME TYPE DATA AGE sekolahlinux-ssl-file Opaque 2 2d4h
oke sekarang lanjut untuk membuat config file dengan configmap, disini saya akan membuat 2 file yaitu
- sekolahlinux-main.conf
- default.conf
kurang lebih isi manifest configmap k8s nya seperti dibawah ini
sekolahlinux-nginx-conf.yaml
apiVersion: v1 kind: ConfigMap metadata: name: sekolahlinux-nginx-conf namespace: sekolahlinux data: sekolahlinux-main.conf: | server { listen 443; server_name sekolahlinux.com; root /var/www/html; index index.php index.html index.htm; ssl on; ssl_certificate /etc/nginx/ssl/sekolahlinux.crt; ssl_certificate_key /etc/nginx/ssl/sekolahlinux.key; location / { try_files $uri $uri/ /index.php?$args; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_param HTTP_PROXY ""; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } default.conf: | server { listen 80 default_server; server_name _; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }
jika sudah jalankan perintah dibawah ini
kubectl apply -f sekolahlinux-nginx-conf.yaml
selanjutnya jalankan perintah dibawah untuk melihat apakah configmap berhasil dibuat atau tidak
kubectl get configmap -n sekolahlinux
maka hasilnya akan seperti dibawah
sekolahlinux@sekolahlinux-controlbox:~$ kubectl get configmap -n sekolahlinux NAME DATA AGE sekolahlinux-nginx-conf 2 29h
oke kita sudah berhasil membuat configmap dan juga secret pada namespaces sekolahlinux di kubernetes, selanjutnya kita akan mount configmap dan juga secret ke deployment pods yang telah kita buat sebelumnya di tutorial sebelumnya, kamu bisa lihat di link dibawah untuk tutorial sebelumnya
kurang lebih manifest deployment k8s nya akan seperti dibawah ini jika kita mount secret dan juga configmap ke volume
sekolahlinux-wp.yaml
--- apiVersion: v1 kind: Service metadata: name: sekolahlinux-wp-service annotations: cloud.google.com/load-balancer-type: "Internal" namespace: sekolahlinux labels: app: sekolahlinux spec: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 selector: app: sekolahlinux --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: sekolahlinux-wp namespace: sekolahlinux spec: revisionHistoryLimit: 1 strategy: type: RollingUpdate replicas: 2 selector: matchLabels: app: sekolahlinux template: metadata: labels: app: sekolahlinux spec: containers: - name: sekolahlinux-wp image: richarvey/nginx-php-fpm imagePullPolicy: Always ports: - containerPort: 80 - containerPort: 443 resources: requests: memory: "64Mi" cpu: "64m" limits: memory: "256Mi" cpu: "256m" volumeMounts: - name: sekolahlinux-ssl-file mountPath: "/etc/nginx/ssl" readOnly: true - name: sekolahlinux-nginx-conf mountPath: "/etc/nginx/sites-enabled" - name: data-web mountPath: "/var/www/html" env: - name: "CREATED_BY" value: "AKBAR" volumes: - name: sekolahlinux-ssl-file secret: secretName: sekolahlinux-ssl-file - name: sekolahlinux-nginx-conf configMap: name: sekolahlinux-nginx-conf - name: data-web persistentVolumeClaim: claimName: data-web
lalu jika sudah jalankan perintah dibawah ini
kubectl apply -f sekolahlinux-wp.yaml
lalu bagaimana untuk check apakah sudah benar atau belum konfigurasi diatas, kamu bisa masuk kedalam pods nya dengan command dibawah ini, ganti pod_name dengan nama pod kamu
kubectl exec -it pods_name -n sekolahlinux bash
contoh :
kubectl exec -it sekolahlinux-wp-6d745c4d4-g4sbv -n sekolahlinux bash
jika sudah didalam pods nya kamu bisa cek didalam folder dibawah ini ada file yang kita buat di configmap dan juga secret
- /etc/nginx/ssl
- /etc/nginx/site-enabled
sekian tutorial kali ini semoga bermanfaat ya :), jangan sungkan bertanya di kolom komentar ataupun bisa ke linkedin saya