Mengatur Pod untuk Menggunakan Volume sebagai Tempat Penyimpanan
Laman ini menjelaskan bagaimana cara mengatur sebuah Pod untuk menggunakan Volume sebagai tempat penyimpanan.
Filesystem dari sebuah Container hanya hidup selama Container itu juga hidup. Saat Container berakhir dan dimulai ulang, perubahan pada filesystem akan hilang. Untuk penyimpanan konsisten yang independen dari Container, kamu dapat menggunakan Volume. Hal ini penting terutama untuk aplikasi stateful, seperti key-value stores (contohnya Redis) dan database.
Sebelum kamu memulai
Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:
Untuk melihat versi, tekankubectl version
.Mengatur volume untuk Pod
Pada latihan ini, kamu membuat sebuah Pod yang menjalankan sebuah Container. Pod ini memiliki sebuah Volume dengan tipe emptyDir yang tetap bertahan, meski Container berakhir dan dimulai ulang. Berikut berkas konfigurasi untuk Pod:
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
Membuat Pod:
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
Verifikasi apakah Container dari Pod berjalan sukses, lalu mengamati perubahan terhadap Pod:
kubectl get pod redis --watch
Hasil keluaran seperti ini:
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s
Pada terminal lain, buka shell untuk masuk ke Container yang sedang berjalan:
kubectl exec -it redis -- /bin/bash
Di dalam shell, pergi ke
/data/redis
, kemudian buat sebuah berkas:root@redis:/data# cd /data/redis/ root@redis:/data/redis# echo Hello > test-file
Di dalam shell, munculkan daftar proses-proses yang sedang berjalan:
root@redis:/data/redis# apt-get update root@redis:/data/redis# apt-get install procps root@redis:/data/redis# ps aux
Keluarannya mirip seperti ini:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379 root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
Di dalam shell, matikan proses Redis:
root@redis:/data/redis# kill <pid>
dengan
<pid>
adalah ID proses Redis (PID).Di dalam terminal awal, amati perubahan terhadap Pod Redis. Sampai akhirnya kamu akan melihat hal seperti ini:
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s redis 0/1 Completed 0 6m redis 1/1 Running 1 6m
Sampai di sini, Container telah berakhir dan dimuat ulang. Hal ini karena Pod Redis memiliki
restartPolicy
dengan nilai Always
.
Gunakan shell untuk masuk ke dalam Container yang telah dimuat ulang:
kubectl exec -it redis -- /bin/bash
Di dalam shell, pergi ke
/data/redis
, dan verifikasi apakahtest-file
masih ada.root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file
Hapus Pod yang kamu buat untuk latihan ini:
kubectl delete pod redis
Selanjutnya
Lihat Volume.
Lihat Pod.
Selain penyimpanan pada disk lokal yang di sediakan oleh
emptyDir
, Kubernetes juga mendukung solusi penyimpanan network-attached, termasuk PD pada GCE dan EBS dari EC2, yang cenderung lebih disukai untuk data sangat penting dan akan menangani urusan detil seperti mounting dan unmounting perangkat pada Node. Lihat Volume untuk informasi detil.