Memulihkan beban kerja dari snapshot Pod

Pelajari cara memulihkan workload dari snapshot Pod yang disimpan, mengelola snapshot yang ada, dan menonaktifkan snapshot Pod Google Kubernetes Engine (GKE).

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk 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.

Mengelola snapshot

Saat Anda membuat snapshot Pod, resource kustom PodSnapshot akan dibuat untuk menyimpan status Pod pada saat itu. Kolom status dari resource ini menunjukkan apakah operasi snapshot berhasil dan apakah snapshot tersedia untuk pemulihan.

Untuk melihat semua resource PodSnapshot dalam namespace, jalankan perintah berikut:

kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE

Outputnya akan terlihat seperti berikut:

NAME                                   STATUS                  POLICY           AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4   AllSnapshotsAvailable   example-policy   47h

Memulihkan beban kerja dari snapshot

Untuk memulihkan workload dari snapshot terbaru, Anda dapat menghapus Pod yang ada setelah snapshot diambil, lalu men-deploy ulang Pod. Atau, Anda dapat men-deploy Pod baru dengan spesifikasi yang identik. GKE secara otomatis memulihkan Pod dari snapshot yang cocok.

Langkah-langkah berikut menunjukkan cara memulihkan Pod dari snapshot yang cocok dengan menghapus dan men-deploy ulang Pod:

  1. Hapus Pod:

    kubectl delete -f POD_NAME.yaml
    

    Ganti POD_NAME dengan nama Pod Anda, misalnya my-app.

  2. Terapkan kembali Pod:

    kubectl apply -f POD_NAME.yaml
    
  3. Lihat log untuk mengonfirmasi pemulihan snapshot:

    kubectl logs my-app --namespace NAMESPACE
    

    Output bergantung pada cara Anda mengonfigurasi aplikasi. Di contoh aplikasi Python, log menampilkan GKE Pod Snapshot: restore saat operasi pemulihan terjadi.

Memulihkan dari snapshot tertentu

Secara default, GKE memulihkan workload dari resource PodSnapshot terbaru yang cocok dengan Pod. Saat snapshot diambil, GKE secara otomatis membuat nama unik (UUID) untuk resource PodSnapshot, yang dapat Anda lihat dengan menjalankan kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.

Untuk memulihkan workload dari resource PodSnapshot yang lebih lama atau spesifik, tambahkan anotasi podsnapshot.gke.io/ps-name ke spesifikasi Pod workload Anda, dengan menentukan nama resource PodSnapshot yang akan digunakan untuk memulihkan workload:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  namespace: NAMESPACE
  labels:
    app: my-app
  annotations:
    podsnapshot.gke.io/ps-name: "POD_SNAPSHOT_NAME"
spec:
  serviceAccountName: KSA_NAME
  runtimeClassName: gvisor
  containers:
  ...

Ganti kode berikut:

  • POD_SNAPSHOT_NAME: nama snapshot yang ingin Anda pulihkan. Anda bisa mendapatkan nama snapshot dengan menjalankan perintah kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
  • NAMESPACE: namespace untuk Pod Anda.
  • KSA_NAME: nama KSA Anda.

Agar GKE dapat menggunakan snapshot yang ditentukan untuk pemulihan, kondisi status resource PodSnapshot harus Ready dan ada di namespace yang sama dengan Pod. Jika PodSnapshot tidak Ready atau tidak ada di namespace yang sama dengan Pod, workload akan melakukan cold start, bukan memulihkan dari snapshot.

Pencocokan dan kompatibilitas snapshot

Saat memulihkan Pod dari snapshot, GKE harus menentukan snapshot mana yang kompatibel. Kompatibilitas ditentukan oleh aturan seperti urutan pemilihan, kriteria kecocokan (berdasarkan cakupan whole-pod versus rootfs-only), dan pencocokan aturan pengelompokan.

Untuk referensi mendetail tentang persyaratan pencocokan, kriteria kompatibilitas, dan kolom spesifikasi yang memengaruhi kompatibilitas, lihat Pencocokan dan kompatibilitas snapshot pod.

Menonaktifkan snapshot

Menghapus CRD PodSnapshotPolicy akan mencegah Pod di-snapshot dan dipulihkan. Pod yang sedang berjalan tidak terpengaruh oleh penghapusan resource. Namun, jika Anda menghapus kebijakan saat Pod sedang disimpan atau dipulihkan, Pod mungkin memasuki status gagal.

Untuk menonaktifkan pembuatan snapshot dan pemulihan untuk Pod baru yang diatur oleh kebijakan, hapus PodSnapshotPolicy dengan menjalankan perintah berikut:

kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE

Ganti SNAPSHOT_POLICY dengan nama PodSnapshotPolicy yang ingin Anda hapus, misalnya example-pod-snapshot-policy.

Anda juga dapat menghapus resource PodSnapshot tertentu sehingga Pod tidak lagi dipulihkan dari snapshot tertentu tersebut. Menghapus resource PodSnapshot juga akan menghapus file yang disimpan di Cloud Storage.

Untuk mencegah snapshot tertentu digunakan untuk pemulihan di masa mendatang, hapus objek PodSnapshot dengan menjalankan perintah berikut:

kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE

Ganti POD_SNAPSHOT_NAME dengan nama snapshot yang ingin Anda hapus, misalnya example-podsnapshot.

Langkah berikutnya

Pelajari cara Memecahkan masalah snapshot Pod.