Snapshot Pod Google Kubernetes Engine (GKE) membantu meningkatkan latensi startup workload dengan memulihkan snapshot Pod yang sedang berjalan. Snapshot Pod menyimpan seluruh status Pod, termasuk perubahan memori dan sistem file. Saat Anda membuat replika baru, replika tersebut dipulihkan dari snapshot, sehingga beban kerja dapat dilanjutkan, bukan dimulai dari status baru. Kemampuan ini berguna untuk menskalakan workload secara horizontal, seperti model inferensi AI yang memuat bobot besar ke dalam memori atau aplikasi yang memuat dependensi ekstensif.
Gunakan dokumen ini untuk memahami cara kerja snapshot Pod GKE dan mengevaluasi apakah workload Anda dapat memperoleh manfaat darinya.
Admin dan operator platform serta developer Aplikasi dapat menggunakan dokumen ini untuk mengevaluasi kompatibilitas workload, merencanakan kebijakan penyimpanan snapshot, dan memahami cara GKE mengelola pembuatan checkpoint dan pemulihan. Untuk informasi selengkapnya tentang peran umum dan contoh tugas yang dirujuk dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Untuk mempersiapkan dan menggunakan snapshot Pod di cluster Anda, lihat panduan berikut:
Kapan snapshot Pod digunakan
Gunakan snapshot Pod untuk workload yang memiliki waktu inisialisasi yang lama. Contohnya mencakup beban kerja inferensi AI yang memuat model besar ke dalam memori CPU atau GPU, atau aplikasi besar yang memuat banyak library dan dependensi. Workload yang sudah memiliki waktu mulai yang cepat umumnya tidak akan mendapatkan manfaat dari snapshot Pod.
Cara kerja snapshot Pod
Snapshot Pod GKE menyimpan salinan persis status proses Pod pada waktu tertentu. Saat Anda membuat replika baru, alih-alih menginisialisasi Pod dari status baru, GKE memulihkan Pod dari snapshot. Pemulihan ini berarti Pod melanjutkan eksekusi dari titik saat snapshot diambil.
Untuk mengonfigurasi snapshot Pod secara deklaratif, Anda membuat resource kustom Kubernetes untuk menentukan perilaku snapshot. Agen yang berjalan di setiap node GKE mengelola siklus proses snapshot. Berdasarkan kebijakan yang Anda tentukan, agen akan menentukan kapan harus membuat snapshot baru dan kapan harus menggunakan snapshot yang ada untuk memulihkan Pod baru. Pengontrol yang berjalan di bidang kontrol GKE membersihkan snapshot yang sudah tidak digunakan dan menyelesaikan masalah. Cloud Storage menyimpan snapshot Pod Anda.
Isi snapshot
Tabel berikut mencantumkan apa saja yang disertakan dan tidak disertakan dalam snapshot Pod:
| Kategori | Disertakan | Dikecualikan |
|---|---|---|
| Status aplikasi |
|
Tidak ada (semua status proses dalam memori diambil) |
| Sistem file |
|
|
| Jaringan |
|
|
Resource kustom
Untuk mengonfigurasi snapshot Pod secara deklaratif, gunakan resource kustom berikut:
- PodSnapshotStorageConfig: menentukan lokasi penyimpanan untuk snapshot. Hanya mendukung bucket Cloud Storage.
- PodSnapshotPolicy: menentukan Pod mana yang akan diambil snapshotnya berdasarkan pemilih label Kubernetes. Resource kustom ini berisi sebagian besar opsi konfigurasi untuk fitur, termasuk cara pemicuan snapshot, cakupan snapshot, dan kebijakan retensi.
- PodSnapshotManualTrigger (opsional): jika Anda tidak menggunakan pemicu workload, tentukan pemicu manual untuk membuat snapshot bagi Pod tertentu.
Untuk spesifikasi referensi, lihat Referensi CustomResourceDefinition PodSnapshot.
Pemicu snapshot
Anda dapat memicu snapshot Pod dengan cara berikut:
- Pemicu workload: aplikasi di dalam Pod memberi sinyal ke agen GKE bahwa aplikasi siap untuk snapshot. Jenis pemicu ini dieksekusi satu kali dalam siklus workload, misalnya pada status workload siap. Pendekatan ini paling baik untuk meningkatkan latensi startup workload yang diskalakan secara horizontal.
- Pemicu manual: Anda dapat memicu snapshot sesuai permintaan untuk Pod tertentu dengan membuat resource kustom PodSnapshotManualTrigger. Jenis pemicu ini dapat dieksekusi sebanyak yang diperlukan. Pendekatan ini paling cocok untuk situasi saat Anda tidak dapat mengubah aplikasi untuk menandakan kesiapan.
Pencocokan dan kompatibilitas snapshot
Untuk membantu memastikan bahwa snapshot kompatibel dengan workload yang dipulihkan, GKE melakukan pencocokan kompatibilitas antara Pod yang di-checkpoint asli dan Pod target.
GKE menggunakan aturan berikut untuk menentukan kompatibilitas:
- Urutan pemilihan: secara default, GKE memulihkan workload dari resource kustom PodSnapshot terbaru yang cocok dengan namespace dan konfigurasi Pod.
- Kriteria kecocokan: pemeriksaan kompatibilitas bergantung pada cakupan snapshot
yang dikonfigurasi di resource kustom PodSnapshotPolicy Anda (
whole-podataurootfs-only).
Pencocokan cakupan whole-pod (default)
Untuk kebijakan dengan cakupan whole-pod default, GKE memeriksa
hal berikut:
Hash spesifikasi yang disederhanakan: GKE membuat hash unik berdasarkan pada kolom runtime penting dalam spesifikasi Pod. Agar pemulihan berhasil, Pod target harus menghasilkan hash yang identik dari spesifikasi yang disaring. Pemeriksaan ini memverifikasi bahwa Pod yang di-checkpoint dan dipulihkan identik dalam konfigurasi runtime-nya.
Kolom berikut dari objek Pod adalah bagian dari spesifikasi yang disederhanakan dan memengaruhi hash unik:
metadata:annotations: hanya anotasi yang relevan dengan GKE Sandbox (seperti anotasi yang dimulai dengan awalandev.gvisor.*).labels:batch.kubernetes.io/job-completion-index
spec:volumes:name,volumeSource,hostPath,persistentVolumeClaim,configMapcontainers:nameimagecommandargsworkingDirports:name,containerPort,protocolvolumeMounts:name,readOnly,recursiveReadOnly,mountPath,subPath,mountPropagation,subPathExprvolumeDevices:namelifecycle:postStart,preStopterminationMessagePathterminationMessagePolicysecurityContext(dan semua sub-kolom)stdinstdinOncetty
initContainers: sub-kolom yang sama dengancontainers.dnsPolicyautomountServiceAccountTokenhostNetworkhostPIDhostIPCshareProcessNamespacesecurityContextdnsConfigruntimeClassNameoshostUsers
Kompatibilitas hardware: Pod target harus berjalan di node dengan seri mesin dan arsitektur CPU yang identik dengan Pod yang di-checkpoint asli (misalnya, N2 ke N2, atau G2 ke G2).
Kompatibilitas versi: versi kernel GKE Sandbox dan versi driver GPU harus cocok dengan versi yang diambil dalam snapshot asli.
Pencocokan cakupan rootfs-only
Saat Anda mengonfigurasi kebijakan dengan cakupan rootfs-only
(tersedia di GKE versi 1.35.3-gke.1031000 dan yang lebih baru), persyaratan
pencocokan tidak terlalu ketat:
- GKE tidak menghitung atau membandingkan hash spesifikasi Pod yang disederhanakan. Pencocokan yang lebih longgar ini memungkinkan Anda memulihkan snapshot ke Pod target dengan resource, lingkungan, atau kolom konfigurasi lainnya yang berbeda. Namun, versi node dan image container yang mendasarinya harus kompatibel.
- Karena memori proses tidak dipulihkan, Anda dapat memulihkan snapshot yang diambil di satu kelompok mesin ke kelompok mesin lain (termasuk jenis mesin E2).
Pencocokan aturan pengelompokan
Jika kebijakan menggunakan kolom snapshotGroupingRules untuk mengelompokkan snapshot menurut
nilai label tertentu (seperti tenant atau lingkungan), maka Pod yang dipulihkan
harus memiliki kunci dan nilai label yang cocok. Pengontrol snapshot Pod hanya memilih snapshot dari grup yang cocok. Untuk mengetahui informasi selengkapnya tentang cara menyiapkan
label pengelompokan, lihat Mengonfigurasi kebijakan snapshot Pod tambahan.
Memulihkan kesiapan dan pemuatan di latar belakang
Saat Pod dipulihkan dari snapshot, kernel GKE Sandbox akan dipulihkan terlebih dahulu, yang biasanya memerlukan waktu beberapa detik. Untuk meminimalkan latensi startup, aplikasi dilanjutkan segera setelah kernel dipulihkan. Tidak menunggu memori aplikasi dimuat sepenuhnya. Memori aplikasi dipulihkan menggunakan mekanisme streaming latar belakang.
Jika aplikasi mencoba membaca bagian memori yang belum dimuat, maka akan terjadi kesalahan halaman. GKE Sandbox mencegat kesalahan ini, menjeda thread aplikasi, dan segera mengambil halaman memori yang diperlukan dari penyimpanan. Pengambilan sesuai permintaan ini diprioritaskan daripada streaming latar belakang.
Karena pemuatan di latar belakang ini, akses memori mungkin mengalami latensi singkat selama beberapa detik pertama setelah pemulihan jika aplikasi meminta memori yang tidak di-streaming. Latensi ini akan hilang saat status memori disinkronkan sepenuhnya.
Perilaku pemuatan latar belakang ini juga berlaku untuk status GPU. Misalnya, Pod model bahasa besar (LLM) mungkin tampak dalam status Running dan merespons pemeriksaan jaringan meskipun memori GPU-nya masih diisi.
Model tidak akan sepenuhnya responsif untuk inferensi hingga status GPU dipulihkan sepenuhnya. Karena penundaan ini, saat mengukur kecepatan pemulihan,
pastikan Anda mengukur saat server model siap melayani permintaan.
Anda dapat memverifikasi kesiapan server model menggunakan metrik seperti waktu hingga token pertama (TTFT) atau pemeriksaan kesiapan Pod.
Status GPU
Snapshot Pod mendukung pengambilan status GPU. Saat Anda memicu snapshot
untuk Pod yang menggunakan GPU, alat NVIDIA cuda-checkpoint menyimpan status GPU
ke dalam memori proses. Langkah ini membantu memastikan bahwa data yang disimpan di GPU, seperti bobot model, disertakan dalam snapshot. GKE menjeda
Pod dan mengambil snapshot. Selama pemulihan, GKE membalikkan
operasi ini.
Karena status GPU ditulis ke dalam memori proses, penggunaan memori Pod meningkat selama operasi snapshot dan pemulihan. Perhitungkan persyaratan memori tambahan ini saat Anda menetapkan batas memori untuk Pod.
Pertimbangan untuk Pod yang dipulihkan
Dari perspektif Kubernetes API, objek Pod baru dibuat. Saat Pod dimulai, jika ada snapshot yang sesuai untuk Pod, maka GKE akan memulihkan Pod dari snapshot tersebut, termasuk memori dan status proses asli. Namun, beberapa aspek status Pod harus berubah agar dapat berfungsi sebagai instance baru yang unik.
Pertimbangkan perubahan status berikut setelah pemulihan:
- Antarmuka jaringan: Pod yang dipulihkan menerima alamat IP baru. Semua antarmuka dan rute dikonfigurasi ulang. Koneksi jaringan aktif yang ada pada saat snapshot diambil akan ditutup saat dipulihkan. Soket pendengar, koneksi loopback, dan koneksi soket domain Unix akan terus berfungsi.
- Nama host: Pod yang dipulihkan mengasumsikan identitas baru dan menerima nama host baru.
- Waktu aktual: waktu aktual akan dipercepat ke waktu saat ini.
- Status aplikasi: status aplikasi harus unik untuk setiap Pod, seperti ID eksperimen atau seed angka acak, dan harus diinisialisasi ulang setelah pemulihan.
- Secret: kunci enkripsi dan sertifikat yang dibuat sebelum Anda mengambil snapshot harus dibuat ulang.
- Variabel lingkungan: Anda dapat mengubah variabel lingkungan antara
snapshot dan pemulihan. Namun, karena variabel lingkungan disimpan dalam
memori aplikasi, GKE Sandbox tidak dapat menemukan dan menggantinya dengan andal. Jika
beban kerja Anda mengandalkan variabel lingkungan baru setelah pemulihan, maka
Pod harus memperbaruinya secara manual. Variabel lingkungan baru tersedia di file
/proc/gvisor/spec_environ. Format filenya sama dengan/proc/<pid>/environ.
Multi-tenancy dan identitas
Snapshot Pod memerlukan binding Identity and Access Management (IAM) manual untuk setiap objek Kubernetes ServiceAccount Pod agar dapat menggunakan Cloud Storage. Binding IAM manual memerlukan waktu untuk diterapkan, yang mungkin menjadi masalah jika Anda perlu mengambil snapshot segera setelah membuat Pod.
Untuk mengatasi penundaan dan menyederhanakan pengelolaan multi-tenant, alih-alih mengikat IAM ke objek ServiceAccount secara manual, Anda dapat menggunakan akun layanan node GKE untuk membuat token yang berlaku singkat sesuai permintaan. Untuk mengonfigurasi snapshot Pod dengan pendekatan ini, gunakan kolom tokenSource
di resource kustom PodSnapshotStorageConfig dengan salah satu
nilai berikut:
podKSA(default): menggunakan binding IAM manual antara objek ServiceAccount Pod dan bucket Cloud Storage.federatedP4SA: menggunakan token khusus jalur yang dibuat oleh akun layanan node.
Persyaratan
Untuk menggunakan snapshot Pod GKE, pastikan Anda memenuhi persyaratan berikut:
- Pod harus berjalan di GKE Sandbox karena snapshot Pod bergantung pada lingkungan terisolasi yang disediakan GKE Sandbox.
- Untuk menggunakan GPU dengan snapshot Pod, Anda harus memenuhi persyaratan berikut:
- Pod GPU tunggal didukung di node GPU tunggal dan multi-GPU.
- Pod Multi-GPU hanya didukung di GPU L4 (jenis mesin
g2-standard-*). - Pada GKE versi 1.35.0-gke.1738000 dan yang lebih lama, Pod yang berjalan di node multi-GPU harus menggunakan semua GPU yang tersedia di node tersebut. Pada versi 1.35.0-gke.1738000 dan yang lebih baru, Pod dapat menggunakan subset GPU di node.
- Anda harus menggunakan salah satu jenis mesin yang didukung berikut:
g2-standard-4(1 x L4)g2-standard-8(1 x L4)g2-standard-12(1 x L4)g2-standard-16(1 x L4)g2-standard-32(1 x L4)g2-standard-48(4 x L4)g2-standard-96(8 x L4)a2-highgpu-1g(1 x A100-40GB)a2-ultragpu-1g(1 x A100-80GB)a3-highgpu-1g(1 x H100-80GB)
Batasan
Snapshot Pod GKE memiliki batasan berikut:
- Snapshot pod tidak mendukung jenis mesin E2 saat menggunakan cakupan snapshot
whole-poddefault. Snapshot sistem file (rootfs-only) mendukung jenis mesin E2. - Berbagi GPU dengan Multi-Instance GPU (MIG) tidak didukung.
- Container sidecar driver CSI Cloud Storage FUSE tidak didukung dengan snapshot Pod.
- Snapshot pod tidak mendukung TPU.
Langkah berikutnya
- Pelajari cara mempersiapkan snapshot Pod.