Halaman ini menunjukkan cara menjalankan workload fault-tolerant dengan biaya lebih rendah menggunakan Pod Spot di cluster Google Kubernetes Engine (GKE) Autopilot Anda.
Ringkasan
Di cluster GKE Autopilot, Spot Pod adalah Pod yang berjalan pada node yang didukung oleh Spot VM Compute Engine. Pod Spot dihargai lebih rendah daripada Pod Autopilot standar, tetapi dapat ditiadakan oleh GKE setiap kali resource komputasi diperlukan untuk menjalankan Pod standar.
Pod Spot ideal untuk menjalankan beban kerja stateless, batch, atau fault-tolerant dengan biaya lebih rendah daripada menjalankan beban kerja tersebut sebagai Pod standar. Untuk menggunakan Pod Spot di cluster Autopilot, ubah manifes dengan spesifikasi Pod untuk meminta Pod Spot.
Anda dapat menjalankan Pod Spot di class komputasi Autopilot umum default serta di class komputasi khusus yang memenuhi persyaratan hardware tertentu. Untuk mengetahui informasi tentang class komputasi ini, lihat Class komputasi di Autopilot.
Untuk mempelajari lebih lanjut harga Pod Spot di cluster Autopilot, lihat Harga Google Kubernetes Engine.
Manfaat
Menggunakan Pod Spot di cluster Autopilot akan memberi Anda manfaat berikut:
- Harga lebih rendah daripada menjalankan beban kerja yang sama pada Pod Autopilot standar.
- GKE mengelola penskalaan otomatis dan penjadwalan secara otomatis.
- GKE secara otomatis taint node yang menjalankan Pod Spot untuk memastikan bahwa Pod standar, seperti beban kerja penting, tidak dijadwalkan pada node tersebut. Deployment Anda yang menggunakan Pod Spot akan otomatis diupdate dengan tolerasi yang sesuai.
Persyaratan dan batasan
- Memerlukan GKE versi 1.21.4 atau yang lebih baru.
- Pod Spot dikecualikan dari Perjanjian Tingkat Layanan Autopilot.
- GKE tidak dapat menjadwalkan Pod Spot di cluster yang menjalankan versi GKE sebelum versi 1.21.4.
Cluster autopilot mendukung permintaan untuk Pod yang dapat dihentikan di cluster yang menjalankan GKE versi 1.21.4 atau yang lebih baru, menggunakan pemilih
cloud.google.com/gke-preemptible
. Pod yang menggunakan pemilih ini otomatis dimigrasikan ke Pod Spot, dan pemilih diubah menjadicloud.google.com/gke-spot
.
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
.
Meminta Pod Spot di beban kerja Autopilot Anda
Untuk meminta agar Pod Anda berjalan sebagai Pod Spot, gunakan
label cloud.google.com/gke-spot=true
di nodeSelector
atau afinitas node
dalam spesifikasi Pod Anda. GKE secara otomatis menyediakan node
yang dapat menjalankan Pod Spor.
Pod Spot dapat dikeluarkan dan dihentikan kapan saja, misalnya jika resource komputasi diperlukan di tempat lain di Google Cloud. Saat penghentian terjadi,
Pod Spot di node penghentian dapat meminta masa tenggang
hingga 25 detik sebelum penghentian, yang diberikan berdasarkan upaya terbaik, dengan
menentukan kolom terminationGracePeriodSeconds
.
Masa tenggang maksimum yang diberikan untuk Pod Spot selama preemption
adalah 25 detik. Meminta lebih dari 25 detik dalam terminationGracePeriodSeconds
tidak berarti mendapatkan lebih dari 25 detik selama preemption. Saat dikeluarkan, Pod Anda akan dikirimi
sinyal SIGTERM,
dan harus mengambil langkah untuk mematikan selama masa tenggang.
Untuk Autopilot, GKE juga secara otomatis melakukan taint pada node yang dibuat untuk menjalankan Pod Spot dan mengubah beban kerja tersebut dengan toleransi yang sesuai. Taint ini mencegah Pod standar dijadwalkan pada node yang menjalankan Pod Spot.
Menggunakan PemilihNode untuk mengharuskan Pod Spot
Anda dapat menggunakan Pemilihnode untuk mewajibkan Pod Spot dalam Deployment. Tambahkan
label cloud.google.com/gke-spot=true
ke Deployment Anda, seperti dalam contoh
berikut:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
nodeSelector:
cloud.google.com/gke-spot: "true"
terminationGracePeriodSeconds: 25
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Menggunakan afinitas node untuk meminta Pod Spot
Atau, Anda dapat menggunakan afinitas node untuk meminta Pod Spot. Afinitas node memberi Anda cara yang lebih luas dalam memilih node yang akan menjalankan beban kerja. Misalnya, Anda dapat menggabungkan beberapa kriteria pemilihan untuk mendapatkan kontrol yang lebih baik atas lokasi di mana Pod Anda berjalan. Saat menggunakan afinitas node untuk meminta Pod Spot, Anda dapat menentukan jenis afinitas node yang akan digunakan, sebagai berikut:
requiredDuringSchedulingIgnoredDuringExecution
: Harus menggunakan Pod Spot.preferredDuringSchedulingIgnoredDuringExecution
: Gunakan Pod Spot atas dasar upaya terbaik.
Untuk menggunakan afinitas node guna require Pod Spot dalam Deployment, tambahkan
aturan nodeAffinity
berikut ke manifes Deployment Anda:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
terminationGracePeriodSeconds: 25
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-spot
operator: In
values:
- "true"
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Meminta Pod Spot atas dasar upaya terbaik
Untuk menggunakan afinitas node guna meminta Pod Spot dengan upaya terbaik, gunakan
preferredDuringSchedulingIgnoredDuringExecution
.
Saat Anda meminta Pod Spot berdasarkan pilihan, GKE
akan menjadwalkan Pod berdasarkan urutan berikut:
- Node yang ada yang dapat menjalankan Pod Spot yang memiliki ketersediaan kapasitas yang dapat dialokasikan.
- Node standar yang ada dan memiliki kapasitas alokasi yang tersedia.
- Node baru yang dapat menjalankan Pod Spot, jika resource komputasi tersedia.
- Node standar baru.
Karena GKE lebih memilih node standar yang ada dan memiliki kapasitas yang dapat dialokasikan daripada membuat node baru untuk Pod Spot, Anda mungkin melihat lebih banyak Pod yang berjalan sebagai Pod standar daripada Pod Spot, sehingga Anda tidak bisa memanfaatkan sepenuhnya harga Pod Spot yang lebih rendah.
Menemukan dan menghapus Pod yang dihentikan
Selama penghentian Pod setelah selesai, kubelet menetapkan status Failed
dan
alasan Shutdown
ke Pod yang dihentikan. Saat jumlah Pod yang dihentikan
mencapai batas 1000,
pembersihan sampah memori
akan membersihkan Pod. Anda juga dapat menghapus Pod shutdown secara manual menggunakan perintah berikut:
kubectl get pods --all-namespaces | grep -i shutdown | awk '{print $1, $2}' | xargs -n2 kubectl delete pod -n
Langkah selanjutnya
- Pelajari arsitektur cluster Autopilot lebih lanjut.
- Pelajari siklus proses Pod.
- Baca tentang VM Spot di cluster GKE Standard.