Anda dapat menggunakan fitur snapshot volume Kubernetes untuk Volume persisten dan penyediaan dinamis di cluster GKE.
Dengan snapshot volume, Anda dapat membuat salinan volume pada titik waktu tertentu. Anda dapat menggunakan salinan ini untuk mengembalikan volume ke status sebelumnya atau untuk menyediakan volume pengganti.
Anda dapat menyediakan dan memasang snapshot volume dengan komponen berikut:
Persyaratan
Untuk menggunakan snapshot volume di GKE di AWS, Anda harus memiliki hal berikut:
Volume yang menggunakan driver Container Storage Interface (CSI) yang mendukung snapshot. Driver Elastic Block Store (EBS) yang digunakan GKE di AWS secara default mendukung snapshot.
Untuk daftar semua driver CSI yang mendukung snapshot, lihat kolom "Fitur lainnya" di Driver dalam dokumentasi Kubernetes.
Memiliki
PersistentVolumeClaimyang ada untuk digunakan untuk snapshot.PersistentVolumeyang Anda gunakan untuk sumber snapshot harus dikelola oleh driver CSI. Anda dapat memverifikasi bahwa Anda menggunakan driver CSI dengan memeriksa apakah spesifikasiPersistentVolumememiliki bagiancsidengandriver: ebs.csi.aws.com. Jika cluster Anda Menyediakan PersistentVolume secara dinamis oleh driver CSI seperti yang dijelaskan di bagian berikut, PersistentVolume akan dikelola oleh driver CSI.
Sebelum memulai
Membuat dan menggunakan snapshot volume
Contoh dalam dokumen ini menunjukkan cara melakukan tugas berikut:
- Buat contoh
PersistentVolumeClaimdanPod. - Buat VolumeSnapshot.
- Pulihkan snapshot volume.
- Verifikasi bahwa pemulihan berfungsi.
Untuk menggunakan snapshot volume, Anda harus menyelesaikan langkah-langkah berikut:
- Buat objek
VolumeSnapshotuntuk meminta snapshot PersistentVolumeClaim yang ada. - Merujuk
VolumeSnapshotdalamPersistentVolumeClaimuntuk memulihkan volume ke snapshot tersebut atau membuat volume baru menggunakan snapshot tersebut.
Buat contoh PersistentVolumeClaim dan Pod
Untuk membuat objek
PersistentVolumeClaim, simpan manifes berikut sebagaiexample-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1GiUntuk
spec.storageClassName, Anda dapat menentukan class penyimpanan apa pun yang menggunakan driver CSI yang didukung. Contoh ini menggunakan class penyimpananstandard-rwodefault.Terapkan manifes:
kubectl apply -f example-pvc.yamlBuat Pod yang menulis tanggal dan waktu saat ini ke volume. Untuk membuat Pod, simpan manifes berikut sebagai
snapshot-shell.yaml:apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvcTerapkan manifes:
kubectl apply -f snapshot-shell.yamlPeriksa status Pod:
kubectl get pod snapshot-shellMungkin perlu waktu beberapa saat agar Pod berjalan dan selesai. Anda dapat menjalankan perintah sebelumnya hingga melihat output yang mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Membuat VolumeSnapshot
Objek VolumeSnapshot adalah permintaan untuk snapshot objek
PersistentVolumeClaim yang sudah ada. Saat Anda membuat objek VolumeSnapshot, cluster Anda akan otomatis membuat dan mengikatnya dengan objek VolumeSnapshotContent, yang merupakan resource dalam cluster Anda seperti objek PersistentVolume.
Simpan manifes berikut sebagai
volumesnapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvcTerapkan manifes:
kubectl apply -f volumesnapshot.yamlSetelah Anda membuat snapshot volume, cluster Anda akan membuat objek
VolumeSnapshotContentyang sesuai. Objek ini menyimpan snapshot dan binding objekVolumeSnapshot. Anda tidak berinteraksi dengan objekVolumeSnapshotContentssecara langsung.Konfirmasi bahwa cluster Anda membuat objek
VolumeSnapshotContents:kubectl get volumesnapshotcontentsOutputnya mirip dengan hal berikut ini:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Konfirmasi bahwa snapshot volume sudah siap
Setelah konten snapshot volume dibuat, driver CSI yang Anda tentukan dalam
VolumeSnapshotClass akan membuat snapshot pada sistem penyimpanan
yang sesuai. Setelah cluster Anda membuat snapshot pada sistem penyimpanan dan mengikatnya ke objek VolumeSnapshot, snapshot tersebut siap digunakan. Anda dapat memeriksa
statusnya dengan menjalankan perintah berikut:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Jika snapshot siap digunakan, outputnya akan mirip dengan berikut ini:
NAME READY
example-snapshot true
Memulihkan snapshot volume
Anda dapat mereferensikan VolumeSnapshot di PersistentVolumeClaim untuk menyediakan
volume baru dengan data dari volume yang ada atau memulihkan volume ke
status yang Anda rekam dalam snapshot.
Untuk mereferensikan VolumeSnapshot dalam PersistentVolumeClaim, tambahkan kolom dataSource
ke PersistentVolumeClaim Anda.
Dalam contoh ini, Anda mereferensikan VolumeSnapshot yang Anda buat di PersistentVolumeClaim baru dan membuat Pod yang me-mount PersistentVolumeClaim.
Simpan manifes berikut sebagai
pvc-restore.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1GiTerapkan manifes:
kubectl apply -f pvc-restore.yamlLuncurkan Pod sementara yang memasang PVC ke Pod dan mencetak isi
out.txtke log.Simpan manifes berikut sebagai
restore-log.yaml:apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: NeverTerapkan manifes:
kubectl apply -f restore-log.yaml
Pastikan snapshot berhasil dipulihkan
Pod yang Anda buat pada langkah sebelumnya membaca dari snapshot. Untuk melihat
data dari snapshot, gunakan perintah kubectl logs.
kubectl logs restore-verify
Output harus menyertakan stempel waktu dari snapshot.
Pembersihan
Agar tidak menimbulkan biaya untuk resource yang digunakan di halaman ini, ikuti langkah-langkah berikut.
Hapus
VolumeSnapshot.kubectl delete volumesnapshot example-snapshotHapus Pod sementara:
kubectl delete -f restore-log.yamlHapus Pod:
kubectl delete -f snapshot-shell.yamlHapus objek
PersistentVolumeClaim:kubectl delete pvc example-pvc pvc-restore
Langkah berikutnya
- Baca dokumentasi Snapshot Volume Kubernetes.
- Instal driver CSI tambahan.