Pelajari cara mengaktifkan dan mengonfigurasi snapshot Pod Google Kubernetes Engine (GKE) di cluster Anda dan menyiapkan Cloud Storage untuk menyimpan snapshot.
Untuk mengetahui informasi selengkapnya tentang cara kerja snapshot Pod, lihat Tentang snapshot Pod.
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 perintah yang dijalankan dalam dokumen ini.
Mengaktifkan snapshot Pod
Untuk mengaktifkan snapshot Pod, buat atau perbarui cluster dengan fitur snapshot Pod yang diaktifkan. Untuk cluster Standar, Anda juga harus membuat atau memperbarui node pool untuk dijalankan di GKE Sandbox. GKE Sandbox didukung secara default dengan cluster Autopilot.
Untuk mengaktifkan snapshot Pod di cluster, selesaikan salah satu prosedur berikut, bergantung pada mode operasi GKE yang ingin Anda gunakan:
Autopilot
Untuk mengaktifkan snapshot Pod di cluster baru, jalankan perintah berikut:
gcloud container clusters create-auto CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSIONGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.CLUSTER_VERSION: versi cluster baru Anda, yang harus 1.35.3-gke.1234000 atau yang lebih baru.
Untuk mengaktifkan snapshot Pod di cluster yang sudah ada, selesaikan langkah-langkah berikut:
Upgrade cluster ke versi 1.35.3-gke.1234000 atau yang lebih baru:
gcloud container clusters upgrade CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=CONTROL_PLANE_LOCATIONGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.CLUSTER_VERSION: versi cluster baru Anda, yang harus 1.35.3-gke.1234000 atau yang lebih baru.
Aktifkan snapshot Pod di cluster Anda:
gcloud container clusters update CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATION
Snapshot Pod cakupan
whole-poddefault tidak mendukung jenis mesin E2. Di Autopilot, GKE mungkin menggunakan jenis mesin default yang tidak mendukung snapshot Pod. Jika Anda menggunakanwhole-podsnapshot cakupan, untuk membantu memastikan workload Anda berjalan di hardware yang kompatibel, Anda harus menggunakan ComputeClass kustom untuk memprioritaskan keluarga mesin yang kompatibel. Snapshot sistem file (rootfs-only) mendukung jenis mesin E2.
Untuk membuat dan menggunakan ComputeClass kustom, selesaikan langkah-langkah berikut:
Simpan manifes berikut sebagai
non-e2-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: non-e2-class spec: priorities: - machineFamily: n2 - machineFamily: c3 activeMigration: optimizeRulePriority: false whenUnsatisfiable: DoNotScaleUpTerapkan manifes:
kubectl apply -f non-e2-class.yamlDalam spesifikasi Pod, referensikan ComputeClass menggunakan
cloud.google.com/compute-classpemilih node:spec: nodeSelector: cloud.google.com/compute-class: non-e2-class ...
Standar
Untuk mengaktifkan snapshot Pod di cluster baru, jalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \ --enable-pod-snapshots \ --cluster-version=CLUSTER_VERSION \ --workload-pool=PROJECT_ID.svc.id.goog \ --workload-metadata=GKE_METADATA \ --location=CONTROL_PLANE_LOCATIONGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.CLUSTER_VERSION: versi cluster baru Anda, yang harus 1.35.3-gke.1234000 atau yang lebih baru.PROJECT_ID: project ID Anda.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.
Untuk mengaktifkan snapshot Pod di cluster yang sudah ada, selesaikan langkah-langkah berikut:
Upgrade cluster ke versi 1.35.3-gke.1234000 atau yang lebih baru:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODEPOOL_NAME \ --cluster-version=CLUSTER_VERSION \ --location=CONTROL_PLANE_LOCATIONGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.NODEPOOL_NAME: nama node pool Anda.CLUSTER_VERSION: versi untuk mengupdate cluster baru Anda, yang harus 1.35.3-gke.1234000 atau yang lebih baru.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.
Aktifkan snapshot Pod di cluster Anda:
gcloud beta container clusters update CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATIONGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.
Untuk menjalankan Pod di GKE Sandbox pada cluster Standar, buat atau perbarui node pool dengan gVisor yang diaktifkan. Untuk memperbarui node pool, gunakan flag --sandbox type=gvisor. Untuk membuat node pool dengan gVisor yang diaktifkan, jalankan perintah berikut:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--node-version=NODE_VERSION \
--machine-type=MACHINE_TYPE \
--location=CONTROL_PLANE_LOCATION \
--image-type=cos_containerd \
--sandbox type=gvisor
Ganti variabel berikut:
NODE_POOL_NAME: nama node pool baru.CLUSTER_NAME: nama cluster Anda.NODE_VERSION: versi yang akan digunakan untuk node pool.MACHINE_TYPE: jenis mesin yang akan digunakan untuk node.CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.
Untuk mengetahui informasi selengkapnya tentang penggunaan gVisor, lihat Mengisolasi workload Anda menggunakan GKE Sandbox.
Menyimpan snapshot
Snapshot Pod disimpan di bucket Cloud Storage, yang berisi memori dan (opsional) status GPU. Snapshot Pod memerlukan Workload Identity Federation for GKE untuk mengaktifkan dan menggunakan akun layanan Pod untuk melakukan autentikasi ke Cloud Storage.
Snapshot Pod memerlukan konfigurasi berikut untuk bucket:
- Namespace hierarkis: namespace ini harus diaktifkan untuk memungkinkan kueri baca dan tulis yang lebih tinggi per detik. Namespace hierarkis juga mengharuskan bahwa akses level bucket yang seragam diaktifkan.
- Penghapusan sementara: karena snapshot Pod menggunakan upload gabungan paralel, Anda harus menonaktifkan fitur perlindungan data seperti penghapusan sementara. Jika fitur ini tetap diaktifkan, penghapusan sementara objek sementara dapat meningkatkan tagihan penyimpanan Anda secara signifikan.
- Lokasi: lokasi bucket Cloud Storage harus sama dengan lokasi cluster GKE karena performa mungkin terpengaruh jika snapshot ditransfer di berbagai region.
Untuk membuat bucket dan izin yang diperlukan, selesaikan langkah-langkah berikut:
Buat bucket Cloud Storage. Perintah berikut membuat bucket dengan konfigurasi yang diperlukan:
gcloud storage buckets create "gs://BUCKET_NAME" \ --uniform-bucket-level-access \ --enable-hierarchical-namespace \ --soft-delete-duration=0d \ --location="LOCATION"Ganti kode berikut:
BUCKET_NAME: nama bucket Anda.LOCATION: lokasi bucket Anda.
Untuk mengetahui daftar lengkap opsi pembuatan bucket, lihat
buckets createopsi.
Memberikan akses workload ke bucket Cloud Storage
Secara default, GKE tidak memiliki akses ke Cloud Storage. Untuk membaca dan menulis file snapshot, Anda harus memberikan peran IAM yang berisi izin yang sesuai ke Kubernetes ServiceAccount (KSA) yang digunakan oleh Pod workload Anda, atau memberikan token yang berlaku singkat.
Memberikan peran ke Kubernetes ServiceAccount tertentu
Dapatkan kredensial agar Anda dapat berkomunikasi dengan cluster Anda menggunakan perintah
kubectl:gcloud container clusters get-credentials "CLUSTER_NAME"Untuk setiap Pod, selesaikan langkah-langkah berikut:
Buat KSA untuk setiap Pod:
kubectl create serviceaccount "KSA_NAME" \ --namespace "NAMESPACE"Ganti kode berikut:
KSA_NAME: nama KSA Anda.NAMESPACE: namespace untuk Pod Anda.
Berikan izin KSA untuk mengakses bucket:
gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="roles/storage.bucketViewer"gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="roles/storage.objectUser"Ganti kode berikut:
BUCKET_NAME: nama bucket Anda.PROJECT_NUMBER: nomor project Anda.PROJECT_ID: project ID Anda.NAMESPACE: namespace untuk Pod Anda.KSA_NAME: nama KSA Anda.
Mengaktifkan multi-tenancy menggunakan token yang berlaku singkat
Sebagai alternatif untuk memberikan izin ke KSA individual, Anda dapat mengaktifkan multi-tenancy dengan token yang berlaku singkat dan dibatasi cakupannya. Pendekatan ini membantu menghindari penundaan propagasi yang terkait dengan binding IAM manual.
Daripada memberikan izin ke setiap KSA, Anda melakukan pemberian peran roles/storage.admin satu kali di bucket penyimpanan snapshot ke akun layanan node GKE. Akun layanan node kemudian membuat token yang berlaku singkat sesuai permintaan untuk jalur tertentu.
Mengaktifkan token dengan snapshot Pod memerlukan GKE versi 1.35.3-gke.1737000 atau yang lebih baru.
Untuk mengaktifkan multi-tenancy, selesaikan langkah-langkah berikut:
Untuk memberikan izin akun layanan node untuk mengakses bucket, jalankan perintah berikut:
gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com" \ --role="roles/storage.admin"Saat Anda mengonfigurasi penyimpanan untuk snapshot, tetapkan nilai kolom
tokenSourcekefederatedP4SA.
Memberikan akses pengontrol snapshot Pod ke bucket Cloud Storage
Untuk mengizinkan pengontrol snapshot Pod menghapus snapshot di dalam bucket Cloud Storage, agen Layanan GKE harus diberi peran Storage Object User (roles/storage.objectUser) di project. Berikan peran roles/storage.objectUser dengan menjalankan perintah berikut:
gcloud projects add-iam-policy-binding "PROJECT_ID" \
--member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
--role="roles/storage.objectUser" \
--condition="expression=resource.name.startsWith(\"projects/_/buckets/BUCKET_NAME\"),title=restrict_to_bucket,description=Restricts access to one bucket only"
Ganti kode berikut:
PROJECT_NUMBER: nomor project Anda.PROJECT_ID: project ID Anda.BUCKET_NAME: nama bucket Anda.
(Opsional) Membuat folder terkelola untuk bucket Cloud Storage
Membuat folder memungkinkan Anda mengisolasi izin untuk snapshot dari Pod yang tidak tepercaya, yang berguna dalam kasus penggunaan multi-tenant. Untuk menyiapkan folder terkelola, selesaikan langkah-langkah berikut:
Buat peran IAM kustom yang hanya berisi izin yang diperlukan untuk snapshot Pod:
gcloud iam roles create podSnapshotGcsReadWriter \ --project="PROJECT_ID" \ --permissions="storage.objects.get,storage.objects.create,storage.objects.delete,storage.folders.create"Berikan peran
roles/storage.bucketViewerke semua KSA di namespace target. Peran ini memungkinkan KSA membaca metadata bucket, tetapi tidak memberikan izin baca atau tulis ke objek di bucket.gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/namespace/NAMESPACE" \ --role="roles/storage.bucketViewer"Ganti kode berikut:
BUCKET_NAME: nama bucket Anda.PROJECT_NUMBER: nomor project Anda.PROJECT_ID: project ID Anda.NAMESPACE: namespace untuk Pod Anda.
Untuk setiap KSA yang perlu menyimpan snapshot Pod, selesaikan langkah-langkah berikut:
Buat folder terkelola untuk KSA:
gcloud storage managed-folders create "gs://BUCKET_NAME/FOLDER_PATH/"Ganti kode berikut:
BUCKET_NAME: nama bucket Anda.FOLDER_PATH: jalur untuk folder terkelola, misalnyamy-app-snapshots.
Berikan peran
podSnapshotGcsReadWriterkustom KSA di folder terkelola:gcloud storage managed-folders add-iam-policy-binding "gs://BUCKET_NAME/FOLDER_PATH/" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="projects/PROJECT_ID/roles/podSnapshotGcsReadWriter"Ganti kode berikut:
BUCKET_NAME: nama bucket Anda.FOLDER_PATH: jalur untuk folder terkelola, misalnyamy-app-snapshots.PROJECT_NUMBER: nomor project Anda.PROJECT_ID: project ID Anda.NAMESPACE: namespace untuk Pod Anda.KSA_NAME: nama KSA Anda.
Mengonfigurasi penyimpanan untuk snapshot
Untuk menentukan tempat menyimpan file snapshot, buat resource PodSnapshotStorageConfig.
Contoh berikut mengonfigurasi GKE untuk menyimpan snapshot Pod di jalur
FOLDER_PATH/di dalam bucket Cloud Storage BUCKET_NAME. Simpan manifes berikut sebagaiexample-pod-snapshot-storage-config:apiVersion: podsnapshot.gke.io/v1 kind: PodSnapshotStorageConfig metadata: name: example-pod-snapshot-storage-config spec: snapshotStorageConfig: gcs: bucket: "BUCKET_NAME" path: "FOLDER_PATH" tokenSource: "TOKEN_SOURCE"Ganti kode berikut:
BUCKET_NAME: nama bucket Cloud Storage Anda.FOLDER_PATH: jalur untuk folder terkelola Cloud Storage.TOKEN_SOURCE: penyedia identitas untuk akses. GunakanpodKSA(default) ataufederatedP4SAuntuk multi-tenancy.
Terapkan manifes:
kubectl apply -f example-pod-snapshot-storage-config.yaml
Langkah berikutnya
- Pelajari cara memicu snapshot Pod.