All Products
Search
Document Center

Container Service for Kubernetes:Jalankan job pada instans preemptible

Last Updated:Mar 26, 2026

Job batch dan workload toleran gangguan dapat menjadi mahal jika dijalankan terus-menerus pada instans sesuai permintaan (on-demand). Instans preemptible memungkinkan Anda menjalankan workload tersebut pada Pod berbasis Elastic Container Instance (ECI) dengan biaya jauh lebih rendah, sementara Kubernetes Job controller secara otomatis menggantikan Pod apa pun yang direklaim sebelum job selesai.

Workload yang sesuai

Gunakan instans preemptible untuk workload yang dapat mentoleransi gangguan:

SesuaiTidak sesuai
Job batch dan tugas satu kali jalanAplikasi stateful
Aplikasi stateless dan toleran gangguan, seperti layanan web yang dapat diskalakanLayanan berjalan lama yang tidak dapat menangani gangguan di tengah tugas
Tugas komputasi berumur pendek yang dapat menerima restartWorkload yang waktu startup atau shutdown-nya melebihi jendela pra-rilis 5 menit

Cara kerja

Saat membuat instans preemptible, Anda menentukan kebijakan penawaran (bid policy). Instans dibuat ketika harga penawaran Anda melebihi harga pasar real-time dan inventaris resource untuk tipe instans tersebut mencukupi.

Periode perlindungan: Setelah dibuat, instans berjalan selama periode perlindungan 1 jam (default), ditagih berdasarkan harga pasar saat pembelian.

Setelah periode perlindungan: Sistem memeriksa harga pasar dan inventaris setiap 5 menit. Jika harga pasar melebihi harga penawaran Anda atau inventaris habis, instans akan dirilis. Event SpotToBeReleased dikirim ke daftar event Kubernetes sekitar 5 menit sebelum rilis — gunakan jendela ini untuk menghentikan lalu lintas masuk atau membuat checkpoint workload Anda.

Kontinuitas job: Ketika Pod dirilis sebelum job selesai, Kubernetes Job controller secara otomatis membuat Pod baru untuk melanjutkan job tersebut. Pod asli tetap dipertahankan dengan status BidFailed.

Batasan

  • Secara default, periode perlindungan adalah 1 jam.

  • Setelah periode perlindungan, ketersediaan instans bergantung pada harga pasar dan inventaris resource — tidak ada jaminan uptime.

  • Event SpotToBeReleased tiba sekitar 5 menit sebelum rilis. Jika workload Anda membutuhkan waktu lebih dari 5 menit untuk shutdown secara bersih, instans preemptible mungkin tidak cocok.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK Serverless

  • kubectl yang telah dikonfigurasi untuk terhubung ke kluster

Jalankan job pada instans preemptible

Langkah 1: Buat manifes job

Buat file bernama spot_job.yaml dengan konten berikut:

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    metadata:
      annotations:
        k8s.aliyun.com/eci-use-specs: ecs.c5.large,2-4Gi  # Multiple instance types improve creation success rate
        k8s.aliyun.com/eci-spot-strategy: SpotAsPriceGo    # Use the real-time market price as the bid price
    spec:
      containers:
      - name: pi
        image: registry-vpc.cn-beijing.aliyuncs.com/ostest/perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Anotasi k8s.aliyun.com/eci-spot-strategy menetapkan kebijakan penawaran:

NilaiDeskripsi
SpotAsPriceGoSecara otomatis menggunakan harga pasar saat pembelian sebagai harga penawaran.
SpotWithPriceLimitMenggunakan harga maksimum per jam yang Anda tetapkan. Tambahkan anotasi k8s.aliyun.com/eci-spot-price-limit untuk menentukan harga tersebut.

Anotasi k8s.aliyun.com/eci-use-specs mencantumkan beberapa tipe instans. Menentukan beberapa tipe meningkatkan kemungkinan instans preemptible berhasil dibuat saat inventaris salah satu tipe sedang rendah.

Langkah 2: Buat job

kubectl create -f spot_job.yaml

Langkah 3: Pantau status Pod

kubectl get pod

Pod melewati status berikut:

Running — job sedang berjalan:

NAME       READY   STATUS    RESTARTS   AGE
pi-frmr8   1/1     Running   0          35s

Completed — job berhasil selesai:

NAME       READY   STATUS      RESTARTS   AGE
pi-frmr8   0/1     Completed   0          2h

BidFailed — Pod dirilis sebelum job selesai. Job controller telah membuat Pod baru (pi-kp5zx) untuk melanjutkan:

NAME       READY   STATUS      RESTARTS   AGE
pi-frmr8   1/1     BidFailed   0          4h53m
pi-kp5zx   1/1     Running     0          3h45m
Catatan

Event SpotToBeReleased dikeluarkan sekitar 5 menit sebelum Pod memasuki status BidFailed. Untuk melihat event tersebut, jalankan kubectl get events. Untuk detail penanganan event pra-rilis, lihat Release of preemptible instances.

Langkah selanjutnya