Traffine I/O

Bahasa Indonesia

2022-07-03

PV dan PVC dalam Kubernetes

Pengantar

Kubernetes mengatur beban kerja wadah dengan mengelola siklus hidupnya di dalam Pods. Setiap Pod dapat dianggap sebagai host virtual yang bersifat sementara. Sifat yang mudah berubah pada Pods berarti mereka dapat menghilang kapan saja, menyebabkan masalah signifikan terkait keberlanjutan data.

Meskipun kita dapat mengaitkan ConfigMaps atau Secrets sebagai ReadOnly Volumes di dalam Pods, pendekatan ini tidak ideal untuk data yang perlu dipertahankan, seperti file database. Dalam skenario di mana Pod menghilang, data terkait juga hilang, mengakibatkan potensi kehilangan informasi.

Solusi untuk masalah ini terletak pada penyimpanan data bukan pada tingkat Pod, tetapi pada Node itu sendiri menggunakan fitur yang disebut Persistent Volume (PV). Komponen ini memainkan peran penting dalam mempertahankan data bahkan ketika Pods tidak ada.

Persistent Volume (PV)

Persistent Volume (PV) adalah sepotong penyimpanan dalam kluster Kubernetes yang telah disediakan oleh administrator. PV adalah resource di dalam kluster, seperti node, yang memungkinkan pengguna untuk menyimpan data secara persisten melampaui siklus hidup Pods individu.

Membuat PV

Untuk menyimpan data secara persisten, kita dapat membuat PV pada Node. Hal ini dapat dicapai dengan menggunakan perintah kubectl apply -f dengan file konfigurasi yang mendefinisikan properti PV. Sebagai contoh, file konfigurasi YAML berikut menentukan PV dengan kapasitas penyimpanan 100M, kelas penyimpanan manual, dan mode akses ReadWriteOnce, berlokasi di /mnt/pvc di host:

persistent_volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv
spec:
  storageClassName: manual
  capacity:
    storage: 100M
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/pvc"

Anda dapat menerapkan konfigurasi ini dengan menggunakan:

bash
$ kubectl apply -f persistent_volume.yaml

persistentvolume/pv created

Memeriksa PV

Setelah PV dibuat, detailnya dapat diperoleh dengan menggunakan perintah kubectl describe pv:

bash
$ kubectl describe pv pv

Perintah ini mengembalikan deskripsi PV, termasuk kapasitas penyimpanan, mode akses, kebijakan pengambilan kembali, status, dan PVC yang terikat. Informasi yang diperoleh dari perintah ini dapat penting dalam memahami keadaan PV dan mendiagnosis masalah potensial.

Persistent Volume Claim (PVC)

Persistent Volume Claim (PVC) adalah permintaan penyimpanan oleh pengguna. PVC mirip dengan pod dalam hal pod mengonsumsi resource node dan PVC mengonsumsi resource PV. Dengan kata lain, PVC memungkinkan pengguna untuk mengklaim penyimpanan PV dalam kluster Kubernetes.

Membuat PVC

Untuk menggunakan PV, Anda perlu membuat PVC. PVC menentukan kelas penyimpanan, mode akses, dan kapasitas penyimpanan yang diperlukan. File konfigurasi YAML berikut, misalnya, mendefinisikan PVC yang meminta kelas penyimpanan manual, mode akses ReadWriteOnce, dan penyimpanan 10M:

persistent_volume_claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10M

Anda dapat membuat PVC dengan menerapkan konfigurasi ini menggunakan:

bash
$ kubectl apply -f persistent_volume_claim.yaml

persistentvolumeclaim/pvc created

Memverifikasi PVC

Setelah PVC dibuat, Anda dapat memverifikasi detailnya dengan menggunakan perintah kubectl get pvc:

bash
$ kubectl get pvc

NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc    Bound    pv       100M       RWO            manual         11s

Perintah ini akan mengembalikan nama PVC, statusnya, volume yang terikat, kapasitasnya, mode akses, kelas penyimpanan, dan umurnya.

PV Terikat

Jika PVC berhasil terikat ke PV, Anda dapat memverifikasinya dengan mencantumkan PV menggunakan perintah kubectl get pv:

bash
$ kubectl get pv

NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM         STORAGECLASS   REASON   AGE
pv     100M       RWO            Retain           Bound    default/pvc   manual                  54s

Perintah ini akan menampilkan semua PV dalam kluster, beserta detailnya. Jika PVC terikat ke PV, Anda akan melihat status 'Bound' pada output.

Memasang PVC sebagai Volume di dalam Pod

Setelah PVC terikat ke PV, dapat digunakan sebagai volume di dalam Pod. Hal ini memungkinkan kontainer di dalam Pod untuk mengakses penyimpanan yang diberikan oleh PV.

PVC dapat dipasang ke dalam Pod dengan menyebutkan nama PVC di bagian volumes pada file konfigurasi Pod. File ini, umumnya dalam format YAML, menggambarkan properti Pod, termasuk kontainer yang harus dijalankan dan volume yang harus dipasang.

Berikut adalah contoh YAML tentang cara memasang PVC dalam konfigurasi Pod:

pod_pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: helloworld-pvc
  name: helloworld-pvc
spec:
  containers:
  - image: bhargavshah86/kube-test:v0.1
    name: helloworld-pvc
    ports:
    - containerPort: 8080
    resources: {}
    volumeMounts:
    - name: my-pv
      mountPath: /mnt/pvc
  volumes:
    - name: my-pv
      persistentVolumeClaim:
        claimName: pvc

Konfigurasi ini menentukan sebuah Pod dengan satu kontainer. Kontainer memasang volume pada jalur /mnt/pvc. Volume ini merujuk pada PVC yang telah dibuat sebelumnya.

Anda dapat membuat Pod menggunakan perintah kubectl apply -f dengan file konfigurasi Pod:

bash
$ kubectl apply -f pod_pvc.yaml

pod/helloworld-pvc created

Setelah Pod dibuat, ia akan memiliki akses ke penyimpanan yang ditentukan dalam PVC, memungkinkannya untuk membaca dan menulis data secara persisten melalui restart dan penghentian Pod.

Operasi Berkas di dalam Pod

Dengan PVC dipasang sebagai volume, Pod sekarang dapat membaca dan menulis file ke volume ini. Anda dapat berinteraksi dengan Pod yang sedang berjalan dan menjalankan perintah di dalam kontainernya menggunakan perintah kubectl exec.

Karena PVC didukung oleh PV yang berada di dalam Node, Anda seharusnya dapat melihat file yang dibuat di dalam Pod pada Node itu sendiri. Untuk memverifikasi hal ini, Anda dapat SSH ke Node dan memeriksa file tersebut:

bash
$ kubectl exec -it helloworld-pvc sh
bash
/usr/share/nginx/html # echo "from pod" > /mnt/pvc/from_pod.txt
/usr/share/nginx/html # cat /mnt/pvc/from_pod.txt

from pod

Perintah echo menulis string "from pod" ke dalam file from_pod.txt pada jalur pemasangan volume. Perintah cat kemudian digunakan untuk menampilkan isi file, memverifikasi bahwa file tersebut berhasil dibuat.

As the PVC is backed by a PV that resides on a Node, you should be able to see the file created in the Pod on the Node itself. To verify this, you can SSH into the Node and inspect the file:

bash
$ minikube ssh
bash
docker@minikube:~$ cat /mnt/pvc/from_pod.txt

from pod

Perintah ini akan menghasilkan output "from pod", menunjukkan bahwa file yang dibuat di dalam Pod ada secara persisten di Node. Ini mengkonfirmasi bahwa data yang ditulis oleh Pod akan bertahan melalui restart dan penghentian Pod, memecahkan masalah keberlanjutan data di Kubernetes.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!