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 Antarmuka Penyimpanan Container vSphere.
Pastikan
cluster Anda memiliki StorageClass bernama standard-rwo
dan
driver CSI vSphere telah diinstal.
Versi vSphere, ESXi, dan Server vCenter Anda harus merupakan Update 7.0 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:
- Membuat PersistentVolumeClaim.
- Buat
PersitentVolumeClaim
yang meminta kelas penyimpanan
standard-rwo
. Kemudian, cluster akan menyediakan PersistentVolume secara dinamis dan mengaitkannya dengan PersistentVolumeClaim.
- Membuat Deployment.
- Buat Deployment yang memiliki satu Pod. Pod menentukan volume berdasarkan PersistentVolumeClaim. Satu container dalam Pod memasang volume pada
/hello/
.
- Tulis file ke volume Pod.
- Buat file bernama
hello.txt
di volume Pod. Isi filenya adalah "Hello World!".
- Membuat VolumeSnapshot.
- Membuat VolumeSnapshot yang merekam status volume Pod.
- File rusak.
- Ubah file
hello.txt
sehingga terlihat seperti file yang rusak. Isi file tersebut sekarang menjadi "Hello W-corrupted-file-orld!"
- Gunakan snapshot untuk memulihkan volume.
- Buat PersistentVolumeClaim kedua yang menggunakan VolumeSnapshot sebagai sumber datanya. Edit Deployment Anda agar volumenya terkait 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
ditetapkan ke
standard-rwo
. Ini adalah kelas penyimpanan yang terkait dengan driver CSI
vSphere.
Simpan manifes dalam file bernama my-pvc.yaml
. Membuat dan melihat 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 pada
/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. Mendapatkan 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 dalam 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 akan 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 tampak
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'
Di 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
. Membuat dan melihat 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
, dan tutup editor:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
Deployment menghapus Pod, dan membuat Pod baru yang menggunakan PersistentVolumeClaim baru.
Tunggu beberapa menit, lalu dapatkan nama Pod baru:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Pastikan 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.