PV & PVC Kubernetes

Persistance Volume (PV) adalah sebuah tipe volume dimana kita dapat mengambil beberapa sumber volume yang lain seperti network volume (nfs, cephfs, glusterfs) di node lain agar data yang kita attach kedalam pod tidak hilang saat pod restart.

Buat sebuah Persistance Volume :

kind:               PersistentVolume
apiVersion:         v1
metadata:
  name:             nfs-vol
  labels:
    type:           local
spec:
  storageClassName: manual
  capacity:
    storage:        10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    server: 10.101.101.40
    path: /var/nfsshare

Cek PV tersebut :

ubuntu@master:~$ kubectl create -f pv.yaml 
persistentvolume "nfs-vol" created
ubuntu@master:~$ kubectl get pv nfs-vol
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
nfs-vol   10Gi       RWX            Retain           Available             manual                   10s
ubuntu@master:~$ kubectl describe pv/nfs-vol
Name:            nfs-vol
Labels:          type=local
Annotations:     <none>
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    manual
Status:          Available
Claim:           
Reclaim Policy:  Retain
Access Modes:    RWX
Capacity:        10Gi
Node Affinity:   <none>
Message:         
Source:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    10.101.101.40
    Path:      /var/nfsshare
    ReadOnly:  false
Events:        <none>

Persistance Volume Claim (PVC) adalah sesuatu yang akan mengkonsumsi PV yang dibuat. Jika pada konsep pod dan node worker, pod akan mengkonsumsi resource node worker, maka PVC akan mengkonsumsi resource dari PV.

Buat sebuah Persistance Volume Claim :

kind:               PersistentVolumeClaim
apiVersion:         v1
metadata:
  name:             nginxpvc
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage:      200Mi

PVC ini akan mengunakan resource dari PV sebesar 200 MB. lalu create dan cek PVC tersebut

ubuntu@master:~$ kubectl create -f pvc.yaml 
persistentvolumeclaim "nginxpvc" created
ubuntu@master:~$ kubectl get pvc
NAME       STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nginxpvc   Bound     nfs-vol   10Gi       RWX            manual         6s
ubuntu@master:~$ kubectl describe pvc/nginxpvc
Name:          nginxpvc
Namespace:     default
StorageClass:  manual
Status:        Bound
Volume:        nfs-vol
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      10Gi
Access Modes:  RWX
Events:        <none>

PVC inilah yang akan kita gunakan sebagai volume saat membuat sebuah deployment. contohnya :

kind:                          Deployment
apiVersion:                    extensions/v1beta1
metadata:
  name:                        nginx-with-pv
spec:
  replicas:                    1
  template:
    metadata:
      labels:
        app:                   nginx
    spec:
      containers:
      - name:                  webserver
        image:                 nginx
        ports:
        - containerPort:       80
        volumeMounts:
        - mountPath:           "/usr/share/nginx/html"
          name:                webservercontent
      volumes:
      - name:                  webservercontent
        persistentVolumeClaim:
          claimName:           nginxpvc

Catatan :

Pastikan semua worker node sudah terinstall paket nfs-common, jika belum :

apt install nfs-common

Comments are closed.