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
{i>Read<i} Menggunakan driver Antarmuka Penyimpanan Container vSphere.
Verifikasi
bahwa cluster Anda memiliki StorageClass bernama standard-rwo
dan bahwa
Driver vSphere CSI diinstal.
Nama Versi vSphere, ESXi dan vCenter Server, harus dalam versi 7.0 Update 3 atau yang lebih baru. Untuk informasi selengkapnya, lihat Memecahkan masalah penyimpanan.
Ringkasan langkah
Berikut adalah langkah-langkah utama latihan yang diberikan dalam dokumen ini:
- Buat PersistentVolumeKlaim.
- Buat
PersistentVolumeClaim
yang meminta kelas penyimpanan
standard-rwo
. Cluster tersebut kemudian penyediaan secara dinamis PersistentVolume dan mengaitkannya dengan PersistentVolume Claims Anda.
- Membuat Deployment.
- Membuat Deployment yang memiliki satu Pod. Pod menentukan volume berdasarkan
PersistentVolumeKlaim. Satu container di Pod memasang volume pada
/hello/
.
- Menulis file ke volume Pod.
- Buat file bernama
hello.txt
di volume Pod. Isi file "Hello World!".
- Membuat VolumeSnapshot.
- Buat VolumeSnapshot yang merekam status volume Pod.
- Rusakkan file.
- Ubah file
hello.txt
sehingga terlihat seperti file yang rusak. Konten file tersebut sekarang menjadi "Hello W-corrupted-file-orld!"
- Gunakan snapshot untuk memulihkan volume.
- Buat PersistentVolumeKlaim kedua yang menggunakan VolumeSnapshot sebagai
sumber data. Edit Deployment agar volumenya terkait dengan yang baru
PersistentVolumeKlaim. Kemudian, pastikan file
hello.txt
telah dipulihkan.
Membuat PersistentVolumeClaim
Berikut adalah manifes untuk PersistentVolume Claims:
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 kelas penyimpanan yang terkait dengan CSI vSphere
{i>driver<i}.
Simpan manifes dalam file bernama my-pvc.yaml
. Buat dan lihat
PersistentVolumeKlaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
Di output, Anda bisa melihat bahwa PersistentVolume Claims terikat dengan
PersistentVolume yang disediakan secara dinamis. Misalnya, output berikut
menunjukkan bahwa PersistentVolumeKlaim 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 hal-hal penting untuk dipahami tentang manifes Deployment sebelumnya:
Pod meminta penyimpanan dengan menentukan PersistentVolumeKlaim,
my-pvc
, yang Anda buat sebelumnya.Pod memiliki satu container, dan container memasang volume pada
/hello/
.
Simpan manifes dalam file bernama my-deployment.yaml
, dan buat elemen
Penyebaran:
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 dalam volume Pod, dan 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 menunjukkan 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
, dan buat elemen
VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Merusak file dalam volume
Ubah konten hello.txt
sehingga terlihat seperti
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 PersistentVolumeKlaim 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 bisa melihat bahwa sumber data untuk Klaim PersistentVolume adalah VolumeSnapshot yang Anda buat sebelumnya.
Simpan manifes dalam file bernama my-pvc-2.yaml
. Buat dan lihat
PersistentVolumeKlaim:
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 PersistentVolumeKlaim.
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.