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:
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:
$ kubectl apply -f persistent_volume.yaml
persistentvolume/pv created
Memeriksa PV
Setelah PV dibuat, detailnya dapat diperoleh dengan menggunakan perintah kubectl describe pv
:
$ 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:
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:
$ 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
:
$ 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
:
$ 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:
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:
$ 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:
$ kubectl exec -it helloworld-pvc sh
/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:
$ minikube ssh
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.