Deploy WordPress dan MySQL dengan Persistent Volume pada Kubernetes
Pada tutorial kali ini akan membahas cara deploy WordPress menggunakan Persistent Volume pada Kubernetes. Persistent Volume (PV) merupakan sebuah bagian dari penyimpanan cluster yang secara statis dibuat oleh administrator dan secara dinamis dibuat oleh Storage Class.
Sedangkan Persistent Volume Claim (PVC) merupakan strorage yang direquest oleh user. Jadi si admin disini membuat storage cluster terlebih dahulu, katakanlah 10Gb. Nantinya si user bisa claim storage sebesar 5Gb atau maksimal 10Gb untuk bisa menggunakannya.
Nah, langsung saja bagaimana cara deploy WordPress dan MySQL menggunakan Persisten Volume pada kubernetes, langsung simak penjelasan berikut ini.
Prasyarat
- Sudah memiliki cluster kubernetes
- Internet stabil
Pembahasan
- Membuat Persistent Volume dan Persistent Volume Claim
- Buat file
kustomization.yaml
dengan:- Konfig resource WordPress
- Konfig resource MySQL
- Apply resource dengan
kustomization.yaml
- Clean up resource
Instalasi dan Konfigurasi
- Login ke master node, dan buat file konfigurasi untuk membuat file PV dan PVC WordPress misal dengan nama
wp-pv-pvc.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/root/blid/wordpress-config/wordpress-data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Keterangan:
- name: Isikan nama yang Anda inginkan
- storage: Isikan besaran data storage yang Anda inginkan
- path: Bisa disesuaikan dengan direktori dimana volume akan disimpan, nantinya akan dimount ke path file sistem Pod. Misalnya: /root/blid/wordpress-config/wordpress-data
- Selanjutnya buat objek service pada WordPress denga nama file
wp-svc.yaml
seperti contoh konfigurasi berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
name: wordpress-svc
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
- Buat file konfigurasi untuk objek deployment pada WordPress dengan nama file
wp-deployment.yaml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress-deploy
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.4.0-php7.2-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpressdb-svc
- name: WORDPRESS_DB_PASSWORD
value: <Masukkan_Password_DB>
- name: WORDPRESS_DB_USER
value: <Masukkan_User_Database>
- name: WORDPRESS_DB_NAME
value: <Masukkan_Nama_Database>
ports:
- containerPort: 80
name: wordpress-svc
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-pvc
Keterangan:
mountPath: Tempat mount file sistem
- Sama seperti sebelumnya, kali ini buat PV dan PVC untuk mysql dengan nama file
wpdb-pv-pvc.yaml
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpressdb-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/root/blid/wordpress-config/wordpressdb-data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpressdb-pvc
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
- Buat objek service untuk mysql dengan nama file
wpdb-svc.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
apiVersion: v1 kind: Service metadata: name: wordpressdb-svc labels: app: wordpress spec: ports: - port: 3306 protocol: TCP targetPort: 3306 selector: app: wordpress tier: wordpressdb type: ClusterIP clusterIP: None
- Selanjutnya buat objek deployment untuk mysql dengan nama file
wpdb-deployment.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpressdb-deploy
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: wordpressdb
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: wordpressdb
spec:
containers:
- image: mariadb:10.5.2-bionic
name: wordpressdb-container
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: <Masukkan_User_Root>
- name: MYSQL_USER
value: <Masukkan_User_Mysql>
- name: MYSQL_PASSWORD
value: <Masukkan_Password_Mysql>
- name: MYSQL_DATABASE
value: <Masukkan_Nama_Database>
ports:
- containerPort: 3306
name: wordpressdb-svc
volumeMounts:
- name: wordpressdb-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: wordpressdb-persistent-storage
persistentVolumeClaim:
claimName: wordpressdb-pvc
- Kemudian masukkan semua file tersebut pada file
kustomization.yaml
. File tersebut nantinya mengandung semua resource pada daftar file yang sudah dimasukkan sebelumnya, sehingga untuk deploynya tidak satu persatu, melainkan secara keseluruhan.1 2 3 4 5 6 7 8 9
# cat kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 resources: - wpdb-pv-pvc.yaml - wpdb-svc.yaml - wpdb-deployment.yaml - wp-pv-pvc.yaml - wp-svc.yaml - wp-deployment.yaml
- Langkah yang terakhir apply dan verify pada file
kustomization.yaml
1
kubectl apply -k ./
Verifikasi hasil PV, PVC, service, dan deployment. Pastikan PVC sudah berstatus bound.
- Untuk mengakses wordpressnya, silakan cek port servicenya dan akses ke browser menggunaakn IP Address/hostname:service_port.
- Jika Anda ingin menghapus semua objek (deployment, service, PV, dan PVC) bisa menggunakan perintah berikut:
1
kubectl delete -k ./
Sekian dan terima kasih.
Semoga bermanfaat dan berokah :)