Cadangkan dan pulihkan penyimpanan persisten untuk cluster GKE Anda

Halaman ini menunjukkan cara mencadangkan dan memulihkan penyimpanan Filestore dasar yang terkait dengan cluster GKE Anda menggunakan snapshot volume Kubernetes.

Membuat snapshot volume Kubernetes sama dengan membuat pencadangan 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 yang mendukung tingkat layanan Filestore berikut:

    • HDD dasar dengan GKE versi 1.21 atau yang lebih baru
    • SSD dasar dengan GKE versi 1.21 atau yang lebih baru
    • Enterprise dengan GKE versi 1.25 atau yang lebih baru
  • Gunakan control plane versions 1.17 atau yang lebih baru. Untuk menggunakan driver CSI Filestore di VolumeSnapshot, gunakan GKE versi 1.21 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 spesifikasi PersistentVolume memiliki bagian csi dengan driver: pd.csi.storage.gke.io atau filestore.csi.storage.gke.io. Jika PersistentVolume disediakan secara dinamis oleh driver CSI seperti dijelaskan di bagian berikut, driver tersebut 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 Filestore CSI tidak mendukung alur kerja penyediaan atau pencadangan dinamis untuk tingkat layanan Filestore berikut:

    • Zonal dengan band kapasitas lebih tinggi (sebelumnya SSD skala tinggi)
    • Zonal dengan pita kapasitas lebih rendah
  • Anda hanya dapat mencadangkan satu saham per instance dalam satu waktu. Terkait dengan kumpulan penyimpanan, permintaan pencadangan yang dikeluarkan dari dua bagian yang berbeda dari dua instance Filestore yang berbeda akan dijalankan secara bersamaan.

  • Cadangan singleshare hanya dapat dipulihkan ke volume singleshare. Dengan menggunakan driver CSI Filestore, Anda hanya dapat memulihkan volume singleshare ke instance Filestore baru.

    • Instance baru harus menggunakan tingkat layanan yang sama dengan cadangan.
    • Instance baru harus memiliki kapasitas minimum yang sama dengan cadangan.
  • Operasi backup restore Filestore ke sumber atau ke instance Filestore yang ada tidak didukung. Untuk daftar lengkap batasan fitur, lihat Batasan fitur pencadangan Filestore.

  • Pencadangan multi-berbagi tidak didukung.

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:

  1. Buat PersistentVolumeClaim dan Deployment.
  2. Tambahkan file ke PersistentVolume yang digunakan Deployment.
  3. Buat VolumeSnapshotClass untuk mengonfigurasi snapshot.
  4. Buat snapshot volume PersistentVolume.
  5. Hapus file pengujian.
  6. Pulihkan PersistentVolume ke snapshot yang Anda buat.
  7. Verifikasi bahwa pemulihan berfungsi.

Untuk menggunakan snapshot volume, Anda harus menyelesaikan langkah-langkah berikut:

  1. Buat objek VolumeSnapshotClass untuk menentukan driver CSI dan kebijakan penghapusan untuk snapshot Anda.
  2. Buat objek VolumeSnapshot untuk meminta snapshot PersistentVolumeClaim yang ada.
  3. Referensikan VolumeSnapshot di PersistentVolumeClaim untuk memulihkan volume ke snapshot tersebut atau membuat volume baru menggunakan snapshot.

Membuat PersistentVolumeClaim dan Deployment

  1. Untuk membuat objek PersistentVolumeClaim, simpan manifes berikut sebagai my-pvc.yaml:

    Filestore

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: my-pvc
     spec:
       storageClassName: enterprise-rwx
       accessModes:
       - ReadWriteMany
       resources:
         requests:
           storage: 1Ti
    

    Contoh ini membuat PVC Filestore tingkat perusahaan. Untuk mempelajari lebih lanjut, lihat Mengakses instance Filestore dengan driver Filestore CSI.

    Untuk spec.storageClassName, Anda dapat menentukan class penyimpanan apa pun yang menggunakan driver CSI yang didukung.

  2. Terapkan manifes:

    kubectl apply -f my-pvc.yaml
    
  3. Untuk membuat Deployment, simpan manifes berikut sebagai my-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
    
  4. Terapkan manifes:

    kubectl apply -f my-deployment.yaml
    
  5. 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

  1. Cantumkan Pods dalam Deployment:

    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
    
  2. Buat file pengujian di Pod:

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'
    

    Ganti POD_NAME dengan nama Pod.

  3. 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.

  1. 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: Delete
    

    Dalam contoh ini:

    • Kolom driver digunakan oleh driver CSI untuk menyediakan snapshot. Dalam contoh ini, filestore.csi.storage.gke.io menggunakan driver CSI Filestore.
    • Kolom deletionPolicy memberi tahu GKE apa yang harus dilakukan dengan objek VolumeSnapshotContent dan snapshot yang mendasarinya saat objek VolumeSnapshot terikat dihapus. Tentukan Delete untuk menghapus objek VolumeSnapshotContent dan snapshot yang mendasarinya. Tentukan Retain jika Anda ingin mempertahankan VolumeSnapshotContent dan snapshot yang mendasarinya.
  2. 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.

  1. 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
    
  2. Terapkan manifes:

    kubectl apply -f volumesnapshot.yaml
    

    Setelah Anda membuat snapshot Volume, GKE akan membuat objek VolumeSnapshotContent yang sesuai dalam cluster. Objek ini menyimpan snapshot dan binding objek VolumeSnapshot. Anda tidak berinteraksi dengan objek VolumeSnapshotContents secara langsung.

  3. 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

  1. Hapus file pengujian yang Anda buat:

    kubectl exec POD_NAME \
        -- sh -c 'rm /usr/share/hello/hello.txt'
    
  2. 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

  1. 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: 1Ti
    
  2. Terapkan manifes:

    kubectl apply -f pvc-restore.yaml
    
  3. Perbarui file my-deployment.yaml untuk menggunakan PersistentVolumeClaim yang baru:

    ...
    volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: pvc-restore
    
  4. Terapkan manifes yang diupdate:

    kubectl apply -f my-deployment.yaml
    

Pastikan snapshot berhasil dipulihkan

  1. Dapatkan nama Pod baru yang dibuat GKE untuk Deployment 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.

  1. Hapus VolumeSnapshot.

    kubectl delete volumesnapshot my-snapshot
    
  2. Hapus VolumeSnapshotClass.

    kubectl delete volumesnapshotclass my-snapshotclass
    
  3. Hapus Deployment.

    kubectl delete deployments hello-app
    
  4. Hapus objek PersistentVolumeClaim:

    kubectl delete pvc my-pvc pvc-restore
    

Langkah selanjutnya