Dokumen ini menunjukkan cara membuat snapshot volume, lalu menggunakan snapshot tersebut untuk memulihkan volume. Petunjuk di sini berlaku untuk cluster yang menggunakan driver CSI vSphere.
Sebelum memulai
Baca Menggunakan driver vSphere Container Storage Interface.
Verifikasi
bahwa cluster Anda memiliki StorageClass bernama standard-rwo
dan bahwa
driver vSphere CSI telah diinstal.
Versi vSphere, ESXi, dan vCenter Server Anda harus 7.0 Update 3 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah penyimpanan.
Ringkasan langkah
Berikut adalah langkah-langkah utama latihan yang diberikan dalam dokumen ini:
- Buat PersistentVolumeClaim.
- Buat
PersistentVolumeClaim
yang meminta class penyimpanan
standard-rwo
. Cluster kemudian menyediakan PersistentVolume secara dinamis dan mengaitkannya dengan PersistentVolumeClaim Anda.
- Membuat Deployment.
- Buat Deployment yang memiliki satu Pod. Pod menentukan volume berdasarkan
PersistentVolumeClaim Anda. Satu container dalam Pod memasang volume di
/hello/
.
- Tulis file ke volume Pod.
- Buat file bernama
hello.txt
di volume Pod. Konten file adalah "Hello World!".
- Buat VolumeSnapshot.
- Buat VolumeSnapshot yang merekam status volume Pod.
- Merusak file.
- Ubah file
hello.txt
sehingga terlihat seperti file yang rusak. Konten file kini menjadi "Hello W-corrupted-file-orld!"
- Gunakan snapshot untuk memulihkan volume.
- Buat PersistentVolumeClaim kedua yang menggunakan VolumeSnapshot Anda sebagai
sumber datanya. Edit Deployment Anda agar volumenya dikaitkan dengan
PersistentVolumeClaim baru. Kemudian, verifikasi bahwa file
hello.txt
telah dipulihkan.
Membuat PersistentVolumeClaim
Berikut adalah manifes untuk PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo
Dalam manifes sebelumnya, Anda dapat melihat bahwa storageClassName
disetel ke
standard-rwo
. Ini adalah class penyimpanan yang terkait dengan driver CSI vSphere.
Simpan manifes dalam file bernama my-pvc.yaml
. Buat dan lihat
PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
Dalam output, Anda dapat melihat bahwa PersistentVolumeClaim terikat dengan
PersistentVolume yang disediakan secara dinamis. Misalnya, output berikut menunjukkan bahwa PersistentVolumeClaim bernama my-pvc
terikat dengan PersistentVolume bernama pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5
:
my-pvc Bound pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5 … standard-rwo 100s
Membuat Deployment
Berikut manifes untuk Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: my-volume mountPath: /hello/ volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc
Dalam konteks latihan ini, berikut adalah poin-poin penting yang perlu dipahami tentang manifes Deployment sebelumnya:
Pod meminta penyimpanan dengan menentukan PersistentVolumeClaim,
my-pvc
, yang Anda buat sebelumnya.Pod memiliki satu container, dan container memasang volume di
/hello/
.
Simpan manifes dalam file bernama my-deployment.yaml
, lalu buat Deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
Deployment memiliki satu Pod. Dapatkan nama Pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Catat nama Pod. Misalnya, dalam output berikut, nama Pod
adalah my-deployment-7575c4f5bf-r59nt
:
my-deployment-7575c4f5bf-r59nt 1/1 Running 0 65s
Buat file di volume Pod, lalu lihat file tersebut.
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello World!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Output menampilkan konten file /hello/hello.txt
:
Hello World!
Membuat snapshot
Berikut adalah manifes untuk VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: csi-vsphere-snapshot-class source: persistentVolumeClaimName: my-pvc
Simpan manifes dalam file bernama my-snapshot.yaml
, lalu buat
VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Merusak file dalam volume
Ubah konten hello.txt
sehingga terlihat seperti telah
rusak:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello W-corrupted-file-orld!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Dalam output, Anda dapat melihat bahwa file telah diubah:
Hello W-corrupted-file-orld!
Pulihkan
Berikut adalah manifes untuk PersistentVolumeClaim kedua:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc-2 spec: storageClassName: standard-rwo dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
Dalam manifes sebelumnya, Anda dapat melihat bahwa sumber data untuk klaim PersistentVolume baru adalah VolumeSnapshot yang Anda buat sebelumnya.
Simpan manifes dalam file bernama my-pvc-2.yaml
. Buat dan lihat
PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Buka Deployment untuk mengedit:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit deployment my-deployment
Ubah my-pvc
menjadi my-pvc-2
, lalu tutup editor:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
Deployment akan menghapus Pod, dan membuat Pod baru yang menggunakan PersistentVolumeClaim baru.
Tunggu beberapa menit, lalu dapatkan nama Pod baru:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Verifikasi bahwa volume Pod telah dipulihkan:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Output menunjukkan bahwa volume telah dipulihkan:
Hello World!
Pemecahan masalah
Untuk panduan pemecahan masalah, lihat Memecahkan masalah penyimpanan.