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.
- Pastikan Anda telah menyiapkan lingkungan dan memicu snapshot workload. Untuk informasi selengkapnya, lihat referensi berikut:
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:
Hapus Pod:
kubectl delete -f POD_NAME.yamlGanti
POD_NAMEdengan nama Pod Anda, misalnyamy-app.Terapkan kembali Pod:
kubectl apply -f POD_NAME.yamlLihat log untuk mengonfirmasi pemulihan snapshot:
kubectl logs my-app --namespace NAMESPACEOutput bergantung pada cara Anda mengonfigurasi aplikasi. Di contoh aplikasi Python, log menampilkan
GKE Pod Snapshot: restoresaat 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 perintahkubectl 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.