Imron Rosyadi
Imron Rosyadi Linux Enthusiast! Meringankan beban pekerjaan menuju kebahagiaan yang hakiki.

Deploy WordPress dan MySQL dengan Persistent Volume pada Kubernetes


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

  1. Sudah memiliki cluster kubernetes
  2. Internet stabil

Pembahasan

  1. Membuat Persistent Volume dan Persistent Volume Claim
  2. Buat file kustomization.yaml dengan:
    • Konfig resource WordPress
    • Konfig resource MySQL
  3. Apply resource dengan kustomization.yaml
  4. Clean up resource

Instalasi dan Konfigurasi

  1. 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
  1. 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
  1. 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

  1. 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
  1. 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
    
  1. 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
  1. 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
    
  1. 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.

  1. Untuk mengakses wordpressnya, silakan cek port servicenya dan akses ke browser menggunaakn IP Address/hostname:service_port.

  1. 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 :)

comments powered by Disqus