Halaman ini menunjukkan cara mencadangkan dan memulihkan penyimpanan Persistent Disk menggunakan snapshot volume.
Untuk pengantar, lihat Tentang snapshot volume Kubernetes.
Persyaratan
Untuk menggunakan snapshot volume di GKE, Anda harus memenuhi persyaratan berikut:
Menggunakan driver CSI yang mendukung snapshot. Driver Persistent Disk hierarki tidak mendukung snapshot. Untuk membuat dan mengelola snapshot, Anda harus menggunakan driver CSI yang sama dengan
PersistentVolumeClaim
(PVC) yang mendasarinya.Untuk snapshot volume Persistent Disk (PD), gunakan driver Compute Engine Persistent Disk CSI. Driver Compute Engine Persistent Disk CSI diinstal secara default pada cluster Linux baru yang menjalankan GKE versi 1.18.10-gke.2100 atau yang lebih baru, atau versi 1.19.3-gke.2100 atau yang lebih baru. Anda juga dapat mengaktifkan driver Compute Engine Persistent Disk CSI di cluster yang ada.
Untuk mengetahui daftar semua driver CSI yang mendukung snapshot, lihat kolom Fitur lainnya di Driver dalam dokumentasi Kubernetes.
Gunakan control plane versions 1.17 atau yang lebih baru. Untuk menggunakan driver CSI Compute Engine Persistent Disk di
VolumeSnapshot
, gunakan GKE versi 1.17.6-gke.4 atau yang lebih baru.
- Memiliki
PersistentVolumeClaim
yang ada untuk digunakan untuk snapshot.PersistentVolume
yang Anda gunakan untuk sumber snapshot harus dikelola oleh driver CSI. Anda dapat memverifikasi bahwa Anda menggunakan driver CSI dengan memeriksa apakah spesifikasiPersistentVolume
memiliki bagiancsi
dengandriver: pd.csi.storage.gke.io
ataufilestore.csi.storage.gke.io
. JikaPersistentVolume
disediakan secara dinamis oleh driver CSI seperti dijelaskan di bagian berikut, driver tersebut dikelola oleh driver CSI.
Batasan
Semua batasan untuk membuat snapshot disk di Compute Engine juga berlaku untuk GKE.
Praktik terbaik
Pastikan untuk mengikuti praktik terbaik untuk snapshot disk Compute Engine saat menggunakan snapshot Volume
Persistent Disk di GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Membuat dan menggunakan snapshot volume
Contoh dalam dokumen ini menunjukkan cara melakukan tugas berikut:
- Buat
PersistentVolumeClaim
danDeployment
. - Tambahkan file ke
PersistentVolume
yang digunakanDeployment
. - Buat
VolumeSnapshotClass
untuk mengonfigurasi snapshot. - Buat snapshot volume
PersistentVolume
. - Hapus file pengujian.
- Pulihkan
PersistentVolume
ke snapshot yang Anda buat. - Verifikasi bahwa pemulihan berfungsi.
Untuk menggunakan snapshot volume, Anda harus menyelesaikan langkah-langkah berikut:
- Buat objek
VolumeSnapshotClass
untuk menentukan driver CSI dan kebijakan penghapusan untuk snapshot Anda. - Buat objek
VolumeSnapshot
untuk meminta snapshotPersistentVolumeClaim
yang ada. - Referensikan
VolumeSnapshot
diPersistentVolumeClaim
untuk memulihkan volume ke snapshot tersebut atau membuat volume baru menggunakan snapshot.
Membuat PersistentVolumeClaim
dan Deployment
Untuk membuat objek
PersistentVolumeClaim
, simpan manifes berikut sebagaimy-pvc.yaml
:Persistent Disk
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Contoh ini menggunakan kelas penyimpanan
standard-rwo
yang diinstal secara default dengan driver CSI Persistent Disk Compute Engine. Untuk mempelajari lebih lanjut, baca Menggunakan driver CSI Persistent Disk Compute Engine.Untuk
spec.storageClassName
, Anda dapat menentukan class penyimpanan apa pun yang menggunakan driver CSI yang didukung.Terapkan manifes:
kubectl apply -f my-pvc.yaml
Untuk membuat
Deployment
, simpan manifes berikut sebagaimy-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app 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: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvc
Terapkan manifes:
kubectl apply -f my-deployment.yaml
Periksa status
Deployment
:kubectl get deployment hello-app
Mungkin perlu waktu beberapa saat sampai
Deployment
siap. Anda dapat menjalankan perintah sebelumnya hingga melihat output yang mirip dengan berikut ini:NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
Menambahkan file pengujian ke volume
Cantumkan
Pods
dalamDeployment
:kubectl get pods -l app=hello-app
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56s
Buat file pengujian di
Pod
:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'
Ganti
POD_NAME
dengan namaPod
.Verifikasi bahwa file tersebut ada:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
Outputnya mirip dengan hal berikut ini:
Hello World!
Membuat objek VolumeSnapshotClass
.
Buat objek VolumeSnapshotClass
untuk menentukan driver CSI dan
deletionPolicy
untuk snapshot volume Anda. Anda dapat mereferensikan
objek VolumeSnapshotClass
saat membuat objek VolumeSnapshot
.
Simpan manifes berikut sebagai
volumesnapshotclass.yaml
.Persistent Disk
Gunakan versi
v1
API untuk cluster yang menjalankan versi 1.21 atau yang lebih baru.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: pd.csi.storage.gke.io deletionPolicy: Delete
Dalam contoh ini:
Kolom
driver
digunakan oleh driver CSI untuk menyediakan snapshot. Dalam contoh ini,pd.csi.storage.gke.io
menggunakan driver CSI Persistent Disk Compute Engine.Kolom
deletionPolicy
memberi tahu GKE apa yang harus dilakukan dengan objekVolumeSnapshotContent
dan snapshot yang mendasarinya saat objekVolumeSnapshot
terikat dihapus. TentukanDelete
untuk menghapus objekVolumeSnapshotContent
dan snapshot yang mendasarinya. TentukanRetain
jika Anda ingin mempertahankanVolumeSnapshotContent
dan snapshot yang mendasarinya.Untuk menggunakan lokasi penyimpanan kustom, tambahkan parameter
storage-locations
ke class snapshot. Untuk menggunakan parameter ini, cluster Anda harus menggunakan versi 1.21 atau yang lebih baru.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass parameters: storage-locations: us-east2 driver: pd.csi.storage.gke.io deletionPolicy: Delete
Untuk membuat disk image, tambahkan baris berikut ke kolom
parameters
:parameters: snapshot-type: images image-family: IMAGE_FAMILY
Ganti
IMAGE_FAMILY
dengan nama kelompok image pilihan Anda, sepertipreloaded-data
.
Terapkan manifes:
kubectl apply -f volumesnapshotclass.yaml
Membuat VolumeSnapshot
Objek VolumeSnapshot
adalah permintaan untuk snapshot objek
PersistentVolumeClaim
yang sudah ada. Saat Anda membuat objek VolumeSnapshot
,
GKE otomatis membuat dan mengikatnya dengan
objek VolumeSnapshotContent
, yang merupakan resource di cluster Anda seperti
objek PersistentVolume
.
Simpan manifes berikut sebagai
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc
Terapkan manifes:
kubectl apply -f volumesnapshot.yaml
Setelah Anda membuat snapshot
Volume
, GKE akan membuat objekVolumeSnapshotContent
yang sesuai dalam cluster. Objek ini menyimpan snapshot dan binding objekVolumeSnapshot
. Anda tidak berinteraksi dengan objekVolumeSnapshotContents
secara langsung.Konfirmasi bahwa GKE membuat objek
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
Outputnya mirip dengan hal berikut ini:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Setelah konten snapshot Volume
dibuat, driver CSI yang Anda tentukan dalam
VolumeSnapshotClass
akan membuat snapshot pada sistem penyimpanan
yang sesuai. Setelah GKE membuat snapshot di sistem penyimpanan dan
mengikatnya ke objek VolumeSnapshot
di cluster, snapshot siap
digunakan. Anda dapat memeriksa status 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
my-snapshot true
Menghapus file pengujian
Hapus file pengujian yang Anda buat:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'
Verifikasi bahwa file sudah tidak ada:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
Outputnya mirip dengan hal berikut ini:
cat: /usr/share/hello/hello.txt: No such file or directory
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. Proses yang sama akan digunakan
terlepas dari apakah VolumeSnapshotContents
mengacu pada disk image atau snapshot.
Dalam contoh ini, Anda mereferensikan VolumeSnapshot
yang Anda buat di
PersistentVolumeClaim
baru dan memperbarui Deployment
untuk menggunakan klaim baru tersebut.
Pastikan apakah Anda menggunakan snapshot disk atau image, yang berbeda sebagai berikut:
- Snapshot disk: Seringlah mengambil snapshot dan jarang memulihkan.
- Snapshot gambar: Tidak sering mengambil snapshot dan sering memulihkan. Snapshot image juga mungkin lebih lambat dibuat daripada snapshot disk.
Untuk mengetahui detailnya, lihat Batas frekuensi snapshot. Mengetahui jenis snapshot Anda akan membantu jika Anda perlu memecahkan masalah apa pun.
Periksa
VolumeSnapshot
:kubectl describe volumesnapshot SNAPSHOT_NAME
Kolom
volumeSnapshotClassName
menentukan class snapshot.kubectl describe volumesnapshotclass SNAPSHOT_CLASS_NAME
Parameter
snapshot-type
akan menentukansnapshots
atauimages
. Jika tidak diberikan, defaultnya adalahsnapshots
.Jika tidak ada class snapshot (misalnya, jika snapshot dibuat secara statis), periksa
VolumeSnapshotContents
.sh kubectl describe volumesnapshotcontents SNAPSHOT_CONTENTS_NAME
Format handle snapshot dalam output memberi tahu Anda jenis snapshot, sebagai berikut: *projects/PROJECT_NAME/global/snapshots/SNAPSHOT_NAME
: snapshot diskprojects/PROJECT_NAME/global/images/IMAGE_NAME
: snapshot image
Simpan manifes berikut sebagai
pvc-restore.yaml
:Persistent Disk
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Terapkan manifes:
kubectl apply -f pvc-restore.yaml
Perbarui file
my-deployment.yaml
untuk menggunakanPersistentVolumeClaim
yang baru:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restore
Terapkan manifes yang diupdate:
kubectl apply -f my-deployment.yaml
Pastikan snapshot berhasil dipulihkan
Dapatkan nama
Pod
baru yang dibuat GKE untukDeployment
yang telah diupdate:kubectl get pods -l app=hello-app
Pastikan file pengujian ada:
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
Ganti NEW_POD_NAME
dengan nama Pod
baru
yang dibuat GKE.
Outputnya mirip dengan hal berikut ini:
Hello World!
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.
Hapus
VolumeSnapshot
.kubectl delete volumesnapshot my-snapshot
Hapus
VolumeSnapshotClass
.kubectl delete volumesnapshotclass my-snapshotclass
Hapus
Deployment
.kubectl delete deployments hello-app
Hapus objek
PersistentVolumeClaim
:kubectl delete pvc my-pvc pvc-restore
Langkah selanjutnya
- Baca dokumentasi Snapshot Volume Kubernetes.
- Pelajari ekspansi volume.
- Pelajari cara menginstal driver CSI secara manual.
- Pelajari block storage (Persistent Disk) untuk GKE.