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

