Jalankan workload fault-tolerant dengan biaya lebih rendah menggunakan Spot VM

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

  • Spot VM tidak mendukung node pool Windows Server.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin 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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Menyediakan Spot VM di GKE

Anda dapat menyediakan Spot VM dengan membuat cluster yang menggunakan Spot VM untuk node pool default. Atau, Anda dapat membuat node pool yang menggunakan Spot VM.

Gunakan gcloud CLI untuk menetapkan parameter bagi penonaktifan yang benar untuk VM Spot. Untuk mengetahui informasi selengkapnya tentang kemampuan untuk menyetel parameter penonaktifan yang benar, fitur yang tersedia di Pratinjau, lihat Penghentian dan penonaktifan yang benar pada Spot VM.

Membuat cluster dengan Spot VM

Anda dapat membuat cluster baru menggunakan Spot VM dengan Google Cloud CLI atau Konsol Google Cloud. Google Cloud

gcloud

Buat cluster baru yang menggunakan Spot VM di node pool default, bukan VM standar:

gcloud container clusters create CLUSTER_NAME \
    --spot
    [--system-config-from-file=SYSTEM_CONFIG_PATH]

Ganti CLUSTER_NAME dengan nama cluster baru Anda.

Secara opsional, jika Anda ingin menetapkan parameter untuk penonaktifan yang benar (Pratinjau) untuk node pool default, ganti SYSTEM_CONFIG_PATH dengan jalur ke file yang berisi konfigurasi kubelet Anda. Untuk mengetahui informasi selengkapnya, lihat Penghentian Spot VM yang benar di GKE. Anda juga dapat memperbarui parameter ini setelah pembuatan node pool, tetapi GKE harus membuat ulang node untuk melakukan perubahan.

Konsol

Untuk membuat cluster baru dengan node pool menggunakan Spot VM, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Create a Kubernetes cluster.

    Buka Membuat cluster Kubernetes

  2. Dari menu navigasi, di bagian Node Pools, klik nama node pool yang ingin Anda konfigurasi, lalu klik Nodes.

  3. Centang kotak Enable Spot VMs.

  4. 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
    [--system-config-from-file=SYSTEM_CONFIG_PATH]

Ganti POOL_NAME dengan nama node pool baru Anda.

Secara opsional, jika Anda ingin menetapkan parameter untuk penonaktifan yang benar (Pratinjau), ganti SYSTEM_CONFIG_PATH dengan jalur ke file yang berisi konfigurasi kubelet Anda. Untuk mengetahui informasi selengkapnya, lihat Penghentian Spot VM yang benar di GKE. Anda juga dapat memperbarui parameter ini setelah pembuatan node pool, tetapi GKE harus membuat ulang node untuk melakukan perubahan.

Konsol

Untuk membuat node pool baru menggunakan Spot VM, lakukan langkah-langkah berikut:

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud .

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Klik tab Nodes.

  4. Klik Buat kumpulan node yang dikelola pengguna.

  5. Dari menu navigasi, klik Node.

  6. Centang kotak Enable Spot VMs.

  7. 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.

  1. Buat cluster baru dengan node pool default menggunakan VM standar:

    gcloud container clusters create CLUSTER_NAME
    

    Ganti CLUSTER_NAME dengan nama cluster baru Anda.

  2. Dapatkan kredensial untuk cluster:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  3. 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.

  4. 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.

  5. Terapkan manifes ke cluster Anda:

    kubectl apply -f pi-app.yaml
    
  6. 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 toleransi yang sesuai untuk memberi tahu GKE agar menghindari penempatan workload tertentu di Spot VM.

  1. 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
    
  2. 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 berikutnya