Halaman ini menunjukkan cara menjalankan workload fault-tolerant, stateless, atau batch dengan biaya yang lebih rendah menggunakan Spot VM di cluster dan node pool Google Kubernetes Engine (GKE).
Ringkasan
Spot VM adalah virtual machine (VM) Compute Engine yang harganya lebih rendah daripada VM standar default dan tidak memberikan jaminan ketersediaan. Spot VM menawarkan jenis mesin dan opsi yang sama dengan VM Compute Engine standar. Compute Engine dapat mengklaim kembali Spot VM kapan saja karena peristiwa sistem, seperti saat resource diperlukan untuk VM standar.
Untuk mempelajari Spot VM di GKE lebih lanjut, baca artikel tentang Spot VM.
Spot VM menggantikan kebutuhan menggunakan preemptible VM untuk menjalankan workload stateless, batch, atau fault-tolerant. Berbeda dengan preemptible VM, yang masa berlakunya akan habis setelah 24 jam, Spot VM tidak memiliki masa berlaku. Spot VM dihentikan saat Compute Engine memerlukan resource untuk menjalankan VM standar.
Spot VM juga didukung di cluster GKE Autopilot melalui Spot Pod. Dengan Pod Spot, Autopilot otomatis menjadwalkan dan mengelola workload pada Spot VM.
Batasan
- Fitur pemadaman node tuntas kubelet hanya diaktifkan pada cluster yang menjalankan GKE versi 1.20 dan yang lebih baru. Untuk GKE versi sebelum 1.20, Anda dapat menggunakan Kubernetes di Pengendali Peristiwa Penghentian Node GCP untuk menghentikan Pod Anda dengan lancar saat Spot VM di-preempt.
- Spot VM tidak mendukung node pool Windows Server.
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
.
Membuat cluster dengan Spot VM
Anda dapat membuat cluster baru menggunakan Spot VM dengan Google Cloud CLI atau Konsol Google Cloud.
gcloud
Buat cluster baru yang menggunakan Spot VM di node pool default, bukan VM standar:
gcloud container clusters create CLUSTER_NAME \
--spot
Ganti CLUSTER_NAME
dengan nama cluster baru Anda.
Konsol
Untuk membuat cluster baru dengan node pool menggunakan Spot VM, lakukan langkah-langkah berikut:
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Klik add_box Create.
Pada dialog Buat cluster, di samping GKE Standard, klik Konfigurasi.
Dari menu navigasi, di bagian Node Pools, klik nama node pool yang ingin Anda konfigurasi, lalu klik Nodes.
Centang kotak Enable Spot VMs.
Konfigurasikan cluster sesuai kebutuhan, lalu klik Buat.
Membuat node pool dengan Spot VM
Anda dapat membuat node pool baru menggunakan Spot VM dengan gcloud CLI atau Konsol Google Cloud. Anda hanya dapat mengaktifkan Spot VM pada node pool baru. Anda tidak dapat mengaktifkan atau menonaktifkan Spot VM pada node pool yang ada.
gcloud
Buat node pool baru menggunakan Spot VM:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--spot
Ganti POOL_NAME
dengan nama node pool baru Anda.
Konsol
Untuk membuat node pool baru menggunakan Spot VM, lakukan langkah-langkah berikut:
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik
Add node pool.Dari menu navigasi, klik Node.
Centang kotak Enable Spot VMs.
Konfigurasikan node pool sesuai kebutuhan, lalu klik Create.
Menjadwalkan workload di Spot VM
GKE menambahkan label cloud.google.com/gke-spot=true
dan cloud.google.com/gke-provisioning=spot
(untuk node yang menjalankan GKE versi 1.25.5-gke.2500 atau yang lebih baru) ke node yang menggunakan Spot VM. Anda dapat memfilter label ini di spesifikasi Pod
menggunakan kolom nodeSelector
di spesifikasi Pod atau afinitas node.
Pada contoh berikut, Anda membuat cluster dengan dua node pool, salah satunya menggunakan Spot VM. Kemudian, Anda akan men-deploy aplikasi nginx
stateless ke Spot VM, menggunakan nodeSelector
untuk mengontrol tempat GKE menempatkan Pod.
Buat cluster baru dengan node pool default menggunakan VM standar:
gcloud container clusters create CLUSTER_NAME
Ganti
CLUSTER_NAME
dengan nama cluster baru Anda.Dapatkan kredensial untuk cluster:
gcloud container clusters get-credentials CLUSTER_NAME
Buat node pool menggunakan Spot VM:
gcloud container node-pools create POOL_NAME \ --num-nodes=1 \ --spot
Ganti
POOL_NAME
dengan nama node pool baru Anda.Simpan manifes berikut sebagai file bernama
pi-app.yaml
: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
Dalam manifes ini, kolom
nodeSelector
memberi tahu GKE untuk hanya menjadwalkan Pod pada node yang menggunakan Spot VM.Terapkan manifes ke cluster Anda:
kubectl apply -f pi-app.yaml
Deskripsikan Pod:
kubectl describe pod pi
Outputnya mirip dengan hal berikut ini:
Name: pi-kjbr9 Namespace: default Priority: 0 Node: gke-cluster-2-spot-pool-fb434072-44ct ... Labels: app=pi job-name=pi Status: Succeeded ... Controlled By: Job/pi Containers: ... Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: ... Node-Selectors: cloud.google.com/gke-spot=true Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m3s default-scheduler Successfully assigned default/pi-kjbr9 to gke-cluster-2-spot-pool-fb434072-44ct Normal Pulling 4m2s kubelet Pulling image "perl:5.34.0" Normal Pulled 3m43s kubelet Successfully pulled image "perl:5.34.0" in 18.481761978s Normal Created 3m43s kubelet Created container pi Normal Started 3m43s kubelet Started container pi
Kolom
Node
menunjukkan bahwa GKE hanya menjadwalkan Pod Anda di node yang menggunakan Spot VM.
Menggunakan taint dan toleransi untuk Spot VM
Sebagai praktik terbaik, buat cluster dengan setidaknya satu node pool tanpa Spot VM tempat Anda dapat menempatkan workload sistem seperti DNS. Anda dapat menggunakan taint node dan tolerasi yang sesuai untuk memberi tahu GKE agar menghindari penempatan workload tertentu di Spot VM.
Untuk membuat node pool dengan node yang menggunakan Spot VM dan memiliki taint node, gunakan flag
--node-taints
saat membuat node pool:gcloud container node-pools create POOL_NAME \ --node-taints=cloud.google.com/gke-spot="true":NoSchedule --spot
Untuk menambah toleransi yang sesuai ke Pod yang ingin dijadwalkan ke Spot VM, ubah deployment Anda dan tambahkan hal berikut ke spesifikasi Pod:
tolerations: - key: cloud.google.com/gke-spot operator: Equal value: "true" effect: NoSchedule
GKE hanya menjadwalkan Pod dengan toleransi ini ke Spot VM dengan taint node yang ditambahkan.
Langkah selanjutnya
- Pelajari cara menjalankan aplikasi GKE di Spot VM dengan node on demand sebagai penggantian.
- Pelajari Spot VM di GKE lebih lanjut.
- Pelajari taint dan toleransi.
- Ikuti tutorial tentang cara men-deploy workload batch menggunakan Spot VM di GKE.