Halaman ini menunjukkan cara mencadangkan dan memulihkan penyimpanan Filestore menggunakan snapshot volume Kubernetes.
Membuat snapshot volume Kubernetes setara dengan membuat cadangan Filestore. Untuk mengetahui informasi selengkapnya, lihat Tentang snapshot volume Kubernetes.
Persyaratan
Untuk menggunakan snapshot volume di GKE, Anda harus memenuhi persyaratan berikut:
Anda harus men-deploy driver CSI Filestore. Hanya tingkat layanan Filestore berikut yang didukung:
- HDD Dasar dengan GKE versi 1.21 atau yang lebih baru
- HDD Dasar (100 GiB hingga 63,9 TiB) dengan GKE versi 1.33 atau yang lebih baru
- SSD Dasar dengan GKE versi 1.21 atau yang lebih baru
- Zonal (1 TiB hingga 9,75 TiB) dengan GKE versi 1.31 atau yang lebih baru
- Zonal (10 TiB hingga 100 TiB) dengan GKE versi 1.27 atau yang lebih baru
- Regional dengan GKE versi 1.33.4-gke.1172000 atau yang lebih baru
- Enterprise dengan GKE versi 1.25 atau yang lebih baru
Gunakan control plane versi 1.17 atau yang lebih baru. Untuk menggunakan driver CSI Filestore di
VolumeSnapshot, gunakan nomor versi GKE yang berlaku untuk tingkat layanan Anda.
- 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: pd.csi.storage.gke.ioataufilestore.csi.storage.gke.io. JikaPersistentVolumedisediakan secara dinamis oleh driver CSI seperti yang dijelaskan di bagian berikut,PersistentVolumeakan dikelola oleh driver CSI.
Batasan
Volume snapshot memiliki batasan ukuran yang sama dengan volume reguler. Misalnya, snapshot Filestore harus berukuran lebih besar dari atau sama dengan 1 TiB untuk tingkat HDD dasar.
Driver CSI Filestore tidak mendukung penyediaan dinamis atau alur kerja pencadangan untuk tingkat layanan Filestore Regional:
Anda hanya dapat mencadangkan satu berbagi per instance dalam satu waktu. Artinya, Anda tidak dapat membuat cadangan multishare atau memulihkan cadangan ke instance dengan beberapa share. Namun, permintaan pencadangan dari dua berbagi yang berbeda di dua instance Filestore berbeda akan berjalan secara bersamaan.
Anda dapat memulihkan cadangan instance dasar ke instance sumber dengan tingkat layanan yang sama, instance yang sudah ada, atau instance baru. Jika memilih instance baru, Anda dapat memilih antara instance HDD dasar dan SSD dasar, terlepas dari tingkat instance sumber.
Anda tidak dapat memulihkan instance zonal, regional, dan enterprise ke instance sumber atau yang sudah ada, hanya ke instance baru. Tingkatan instance baru tidak harus sama dengan tingkatan instance sumber. Misalnya, Anda dapat memulihkan cadangan instance regional ke instance zonal. Kapasitas yang disediakan untuk instance baru harus sama dengan atau melebihi kapasitas yang disediakan untuk instance sumber.
Untuk mengetahui daftar lengkap batasan fitur, lihat Batasan fitur pencadangan Filestore.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Membuat dan menggunakan snapshot volume
Contoh dalam dokumen ini menunjukkan cara melakukan tugas berikut:
- Buat
PersistentVolumeClaimdanDeployment. - Tambahkan file ke
PersistentVolumeyang digunakanDeployment. - Buat
VolumeSnapshotClassuntuk mengonfigurasi snapshot. - Buat snapshot volume
PersistentVolume. - Hapus file pengujian.
- Pulihkan
PersistentVolumeke snapshot yang Anda buat. - Verifikasi bahwa pemulihan berfungsi.
Untuk menggunakan snapshot volume, Anda harus menyelesaikan langkah-langkah berikut:
- Buat objek
VolumeSnapshotClassuntuk menentukan driver CSI dan kebijakan penghapusan untuk snapshot Anda. - Buat objek
VolumeSnapshotuntuk meminta snapshotPersistentVolumeClaimyang ada. - Merujuk
VolumeSnapshotdalamPersistentVolumeClaimuntuk memulihkan volume ke snapshot tersebut atau membuat volume baru menggunakan snapshot tersebut.
Buat PersistentVolumeClaim dan Deployment
Untuk membuat objek
PersistentVolumeClaim, simpan manifes berikut sebagaimy-pvc.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiContoh ini membuat PVC Filestore tingkat Enterprise. Untuk mempelajari lebih lanjut, lihat Mengakses instance Filestore dengan driver CSI Filestore.
Untuk
spec.storageClassName, Anda dapat menentukan class penyimpanan apa pun yang menggunakan driver CSI yang didukung.Terapkan manifes:
kubectl apply -f my-pvc.yamlUntuk 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-pvcTerapkan manifes:
kubectl apply -f my-deployment.yamlPeriksa status
Deployment:kubectl get deployment hello-appMungkin perlu waktu beberapa saat hingga
Deploymentsiap. 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
PodsdiDeployment:kubectl get pods -l app=hello-appOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56sBuat file pengujian di
Pod:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'Ganti
POD_NAMEdengan 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.Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: DeleteDalam contoh ini:
- Kolom
driverdigunakan oleh driver CSI untuk menyediakan snapshot. Dalam contoh ini,filestore.csi.storage.gke.iomenggunakan driver CSI Filestore. - Kolom
deletionPolicymemberi tahu GKE apa yang harus dilakukan dengan objekVolumeSnapshotContentdan snapshot yang mendasarinya saat objekVolumeSnapshotterikat dihapus. TentukanDeleteuntuk menghapus objekVolumeSnapshotContentdan snapshot yang mendasarinya. TentukanRetainjika Anda ingin mempertahankanVolumeSnapshotContentdan snapshot yang mendasarinya.
- Kolom
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 secara 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: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvcTerapkan manifes:
kubectl apply -f volumesnapshot.yamlSetelah Anda membuat snapshot
Volume, GKE akan membuat objekVolumeSnapshotContentyang sesuai di cluster. Objek ini menyimpan snapshot dan binding objekVolumeSnapshot. Anda tidak berinteraksi dengan objekVolumeSnapshotContentssecara langsung.Konfirmasi bahwa GKE membuat objek
VolumeSnapshotContents:kubectl get volumesnapshotcontentsOutputnya 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 pada sistem penyimpanan dan mengikatnya ke objek VolumeSnapshot di cluster, snapshot tersebut 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.
Untuk mereferensikan VolumeSnapshot dalam PersistentVolumeClaim, tambahkan
kolom dataSource ke PersistentVolumeClaim Anda.
Dalam contoh ini, Anda mereferensikan VolumeSnapshot yang Anda buat di PersistentVolumeClaim baru dan mengupdate Deployment untuk menggunakan klaim baru.
Simpan manifes berikut sebagai
pvc-restore.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiTerapkan manifes:
kubectl apply -f pvc-restore.yamlPerbarui file
my-deployment.yamluntuk menggunakanPersistentVolumeClaimyang baru:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restoreTerapkan manifes yang diupdate:
kubectl apply -f my-deployment.yaml
Pastikan snapshot berhasil dipulihkan
Dapatkan nama
Podbaru yang dibuat GKE untukDeploymentyang 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!
Mengimpor snapshot yang sudah ada
Anda dapat menggunakan snapshot volume yang ada yang dibuat di luar cluster saat ini
untuk menyediakan objek VolumeSnapshotContents secara manual. Misalnya, Anda dapat mengisi volume di GKE dengan snapshot resourceCloud de Confiance lain yang dibuat di cluster yang berbeda.
Temukan nama snapshot Anda.
Cloud de Confiance console
Google Cloud CLI
Jalankan perintah berikut:
gcloud compute snapshots listOutputnya mirip dengan hal berikut ini:
NAME DISK_SIZE_GB SRC_DISK STATUS snapshot-5e6af474-cbcc-49ed-b53f-32262959a0a0 1 us-central1-b/disks/pvc-69f80fca-bb06-4519-9e7d-b26f45c1f4aa READYSimpan manifes
VolumeSnapshotberikut sebagairestored-snapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-contentTerapkan manifes:
kubectl apply -f restored-snapshot.yamlSimpan manifes
VolumeSnapshotContentberikut sebagairestored-snapshot-content.yaml. Ganti kolomsnapshotHandledengan project ID dan nama snapshot Anda.volumeSnapshotRef.namedanvolumeSnapshotRef.namespaceharus mengarah keVolumeSnapshotyang dibuat sebelumnya agar binding dua arah valid.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: restored-snapshot-content spec: deletionPolicy: Retain driver: filestore.csi.storage.gke.io source: snapshotHandle: projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME volumeSnapshotRef: kind: VolumeSnapshot name: restored-snapshot namespace: defaultTerapkan manifes:
kubectl apply -f restored-snapshot-content.yamlSimpan manifes
PersistentVolumeClaimberikut sebagairestored-pvc.yaml. Pengontrol penyimpanan Kubernetes akan menemukanVolumeSnapshotbernamarestored-snapshot, lalu mencoba menemukan, atau membuat secara dinamis,PersistentVolumesebagai sumber data. Kemudian, Anda dapat menggunakan PVC ini di Pod untuk mengakses data yang dipulihkan.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restored-pvc spec: dataSource: name: restored-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteOnce resources: requests: storage: 1GiTerapkan manifes:
kubectl apply -f restored-pvc.yamlSimpan manifes
Podberikut sebagairestored-pod.yamlyang merujuk kePersistentVolumeClaim. Driver CSI akan menyediakanPersistentVolumedan mengisinya dari snapshot.apiVersion: v1 kind: Pod metadata: name: restored-pod spec: containers: - name: busybox image: busybox args: - sleep - "3600" volumeMounts: - name: source-data mountPath: /demo/data volumes: - name: source-data persistentVolumeClaim: claimName: restored-pvc readOnly: falseTerapkan manifes:
kubectl apply -f restored-pod.yamlVerifikasi bahwa file telah dipulihkan:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
Pembersihan
Agar akun Cloud de Confiance by S3NS Anda tidak dikenai biaya untuk resource yang digunakan di halaman ini, ikuti langkah-langkah berikut.
Hapus
VolumeSnapshot.kubectl delete volumesnapshot my-snapshotHapus
VolumeSnapshotClass.kubectl delete volumesnapshotclass my-snapshotclassHapus
Deployment.kubectl delete deployments hello-appHapus 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 Filestore sebagai opsi penyimpanan file untuk GKE.