All Products
Search
Document Center

Elastic Container Instance:Buat instans spot

Last Updated:Jun 21, 2026

ECI mendukung instans spot. Anda dapat menggunakan instans spot untuk Pekerjaan berdurasi pendek dan aplikasi tanpa status yang sangat terdistribusi, skalabel, serta toleran terhadap kesalahan guna mengurangi biaya instans. Topik ini menjelaskan cara membuat pod ECI spot di kluster Kubernetes.

Informasi latar belakang

Instans preemptible adalah sumber daya komputasi berbiaya rendah berbasis penawaran (bid). Anda dapat menawar sumber daya idle di Alibaba Cloud untuk menjalankan kontainer Anda. Sumber daya ini ditarik kembali jika tawaran Anda turun di bawah harga pasar saat ini atau jika inventaris sumber daya tidak mencukupi.

Instans preemptible cocok untuk pekerjaan berdurasi pendek dan aplikasi tanpa status yang sangat terdistribusi, skalabel, serta toleran terhadap kesalahan, seperti layanan web yang dapat diskalakan secara elastis, rendering gambar, analitik data besar, dan komputasi paralel skala besar. Semakin terdistribusi, skalabel, dan toleran terhadap kesalahan aplikasi Anda, semakin besar potensi penghematan biaya dan peningkatan throughput yang dapat Anda peroleh dengan menggunakan instans preemptible. Untuk informasi selengkapnya, lihat Apa itu instans preemptible?.

Konsep utama

Sebelum membuat instans preemptible, pahami konsep berikut:

  • Metode penagihan

    Harga pasar instans preemptible berfluktuasi sesuai permintaan dan penawaran. Saat membuat instans preemptible, Anda harus menentukan kebijakan bid. Jika tawaran Anda lebih tinggi daripada harga pasar real-time untuk tipe instans yang ditentukan dan inventaris mencukupi, instans berhasil dibuat. Setelah dibuat, instans ditagih berdasarkan harga pasar pada saat pembelian selama periode perlindungannya (secara default 1 jam). Setelah periode perlindungan berakhir, instans ditagih berdasarkan harga pasar real-time.

    Catatan

    Instans preemptible ditawarkan dengan diskon dibandingkan instans pay-as-you-go. Harga aktual berfluktuasi berdasarkan permintaan dan penawaran, dan Anda dikenai biaya berdasarkan durasi penggunaan aktual. Untuk informasi selengkapnya, lihat Penagihan instans preemptible.

  • Mekanisme penarikan kembali

    Setelah periode perlindungan berakhir, sistem secara otomatis memeriksa harga pasar dan inventaris tipe instans setiap 5 menit. Jika harga pasar kapan pun lebih tinggi daripada tawaran Anda atau inventaris tipe instans tidak mencukupi, sistem melepas instans preemptible tersebut.

    Catatan
    • Sekitar 3 menit sebelum sistem menarik kembali sumber daya, sistem menghasilkan event yang menunjukkan bahwa instans akan segera dilepas.

    • Setelah sistem menarik kembali sumber daya, penagihan untuk instans dihentikan. Informasi instans tetap disimpan, dan statusnya berubah menjadi Expired.

Catatan penggunaan

Saat menggunakan instans preemptible, perhatikan hal berikut:

  • Pilih tipe instans yang sesuai dan ajukan tawaran yang wajar.

    Anda dapat memanggil operasi OpenAPI ECS untuk mengkueri informasi instans preemptible selama 30 hari terakhir guna membantu memilih tipe instans dan menentukan tawaran. Operasi terkait adalah:

    Penting

    Tentukan tawaran yang cukup tinggi untuk mengantisipasi fluktuasi harga pasar dan sesuai dengan ekspektasi biaya bisnis Anda. Hal ini meningkatkan peluang keberhasilan pembuatan instans preemptible dan mencegah pelepasan akibat perubahan harga, sehingga kebutuhan bisnis tetap terpenuhi sekaligus menghemat biaya.

  • Simpan data penting Anda di media penyimpanan yang tidak terpengaruh oleh pelepasan instans preemptible, seperti cloud disk (dengan opsi "release with instance" dinonaktifkan) atau NAS.

Metode pembuatan

Anda dapat membuat instans kontainer elastis preemptible dengan menentukan tipe instans ECS atau dengan menentukan vCPU dan memori:

  • Tentukan tipe instans ECS

    Penagihan didasarkan pada harga pasar pay-as-you-go dari tipe instans yang ditentukan dan diskon real-time.

  • Tentukan vCPU dan memori

    Metode ini memiliki efek yang sama dengan menentukan tipe instans ECS. Sistem secara otomatis mencocokkan tipe instans ECS yang memenuhi persyaratan sumber daya dan harga. Penagihan didasarkan pada harga pasar tipe instans yang dicocokkan tersebut. Dengan kata lain, diskon berlaku untuk harga pasar tipe instans ECS yang dicocokkan, bukan harga pay-as-you-go vCPU dan memori yang sesuai.

    Metode ini hanya mendukung spesifikasi 2 vCPU atau lebih. Tabel berikut mencantumkan spesifikasi vCPU dan memori yang didukung. Jika Anda menentukan spesifikasi yang tidak didukung, sistem secara otomatis membulatkannya ke spesifikasi yang didukung berikutnya.

    vCPU

    Memori (GiB)

    2

    2, 4, 8, 16

    4

    4, 8, 16, 32

    8

    8, 16, 32, 64

    12

    12, 24, 48, 96

    16

    16, 32, 64, 128

    24

    24, 48, 96, 192

    32

    32, 64, 128, 256

    52

    96, 192, 384

    64

    128, 256, 512

Konfigurasi

Anda dapat membuat instans spot dengan menambahkan anotasi ke metadata pod. Tabel berikut menjelaskan anotasi terkait.

Anotasi

Nilai contoh

Wajib

Deskripsi

k8s.aliyun.com/eci-spot-strategy

SpotAsPriceGo

Ya

Strategi penawaran untuk instans spot. Nilai yang valid:

  • SpotWithPriceLimit: Menetapkan harga maksimum per jam untuk instans spot. Jika menggunakan strategi ini, Anda juga harus menentukan batas harga menggunakan anotasi k8s.aliyun.com/eci-spot-price-limit.

  • SpotAsPriceGo: Sistem secara otomatis menawar pada harga pasar saat ini.

    Penting

    Jika Anda menggunakan kebijakan SpotAsPriceGo dan sumber daya untuk tipe instans yang ditentukan langka di zona yang dipilih, harganya dapat naik hingga harga standar pay-as-you-go.

k8s.aliyun.com/eci-spot-price-limit

"0.5"

Tidak

Harga maksimum per jam untuk instans spot. Anda dapat menentukan nilai dengan hingga tiga tempat desimal.

Anotasi ini hanya berlaku ketika k8s.aliyun.com/eci-spot-strategy diatur ke SpotWithPriceLimit.

k8s.aliyun.com/eci-spot-duration

"0"

Tidak

Periode perlindungan untuk instans spot, dalam satuan jam. Nilai default adalah 1. Nilai 0 berarti tidak ada periode perlindungan.

k8s.aliyun.com/eci-spot-fallback

"true"

Tidak

Menentukan apakah akan membuat instans pay-as-you-go jika instans spot tidak dapat dibuat karena inventaris tidak mencukupi. Nilai default adalah false.

Penting
  • Tambahkan anotasi di bawah metadata pod. Misalnya, saat membuat Job, tambahkan anotasi di bawah spec>template>metadata.

  • Anotasi terkait Elastic Container Instance hanya diterapkan saat pod dibuat. Menambahkan atau mengubah anotasi ini pada pod yang sudah ada tidak akan berpengaruh.

Contoh 1: Tentukan tipe instans ECS dan gunakan SpotWithPriceLimit

apiVersion: batch/v1
kind: Job
metadata:
  name: test
spec:
  template:
    metadata:
      labels:
        app: perl
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs : "ecs.c6.large"           # Tentukan tipe instans ECS.
        k8s.aliyun.com/eci-spot-strategy: "SpotWithPriceLimit"  # Gunakan strategi penawaran dengan batas harga kustom.
        k8s.aliyun.com/eci-spot-price-limit: "0.25"            # Tetapkan harga maksimum per jam.
    spec:
      containers:
      - name: pi
        image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Contoh YAML di atas membuat instans spot dengan tipe instans ecs.c6.large.

  • Pada saat pembuatan, jika tidak ada inventaris yang memenuhi persyaratan tipe instans dan batas harga, pembuatan gagal.

  • Setelah dibuat, instans memiliki periode perlindungan 1 jam. Setelah periode perlindungan 1 jam berakhir, instans spot ditarik kembali jika harga pasar melebihi tawaran Anda atau inventaris untuk tipe instans tidak mencukupi.

Contoh 2: Tentukan vCPU dan memori serta gunakan SpotAsPriceGo

  • Tentukan vCPU dan memori menggunakan pod.spec.resources

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: perl
            alibabacloud.com/eci: "true" 
          annotations:
            k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  # Gunakan penawaran otomatis sistem yang mengikuti harga pasar real-time.
        spec:
          containers:
          - name: pi
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
            resources:
              limits:              # Tentukan 2 vCPU dan 4 GiB memori untuk kontainer pi.
                cpu: 2000m
                memory: 4096Mi
          restartPolicy: Never
  • Tentukan vCPU dan memori menggunakan anotasi

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: perl
            alibabacloud.com/eci: "true" 
          annotations:
            k8s.aliyun.com/eci-use-specs : "2-4Gi"             # Tentukan vCPU dan memori. Instans dengan 2 vCPU atau lebih didukung.
            k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  # Gunakan penawaran otomatis sistem yang mengikuti harga pasar real-time.
        spec:
          containers:
          - name: pi
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never

Contoh YAML di atas membuat instans spot dengan 2 vCPU dan 4 GiB memori.

  • Pada saat pembuatan, jika tidak ada inventaris yang memenuhi persyaratan sumber daya, pembuatan gagal.

  • Setelah dibuat, instans memiliki periode perlindungan 1 jam. Setelah periode perlindungan 1 jam berakhir, instans spot ditarik kembali jika harga pasar melebihi tawaran Anda atau inventaris untuk tipe instans tidak mencukupi.

Contoh 3: Atur tanpa periode perlindungan

apiVersion: batch/v1
kind: Job
metadata:
  name: test
spec:
  template:
    metadata:
      labels:
        app: perl
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs : "2-4Gi"             # Tentukan vCPU dan memori. Instans dengan 2 vCPU atau lebih didukung.
        k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  # Gunakan penawaran otomatis sistem yang mengikuti harga pasar real-time.
        k8s.aliyun.com/eci-spot-duration: "0"              # Atur tanpa periode perlindungan.
    spec:
      containers:
      - name: pi
        image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Contoh YAML di atas membuat instans spot dengan 2 vCPU dan 4 GiB memori.

  • Pada saat pembuatan, jika tidak ada inventaris yang memenuhi persyaratan sumber daya, pembuatan gagal.

  • Setelah dibuat, tidak ada periode perlindungan. Instans spot segera ditarik kembali begitu harga pasar melebihi tawaran atau inventaris untuk tipe instans tidak mencukupi.

Contoh 4: Kembali ke instans pay-as-you-go

apiVersion: batch/v1
kind: Job
metadata:
  name: test
spec:
  template:
    metadata:
      labels:
        app: perl
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs : "ecs.c6.large"           # Tentukan tipe instans ECS.
        k8s.aliyun.com/eci-spot-strategy: "SpotWithPriceLimit"  # Gunakan strategi penawaran dengan batas harga kustom.
        k8s.aliyun.com/eci-spot-price-limit: "0.05"            # Tetapkan harga maksimum per jam.
        k8s.aliyun.com/eci-spot-fallback: "true"                # Secara otomatis beralih ke instans pay-as-you-go jika inventaris spot tidak tersedia.
    spec:
      containers:
      - name: pi
        image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Contoh YAML di atas membuat instans spot dengan tipe instans ecs.c6.large.

  • Pada saat pembuatan, jika inventaris yang memenuhi persyaratan tipe instans dan batas harga tersedia, instans spot dibuat. Setelah dibuat, instans memiliki periode perlindungan 1 jam. Setelah periode perlindungan 1 jam berakhir, instans spot ditarik kembali jika harga pasar melebihi tawaran Anda atau inventaris untuk tipe instans tidak mencukupi.

  • Pada saat pembuatan, jika tidak ada inventaris yang memenuhi persyaratan tipe instans dan batas harga, instans pay-as-you-go dibuat. Setelah dibuat, sistem tidak secara otomatis menarik kembali instans tersebut.

    Setelah instans dibuat, Anda dapat menjalankan perintah kubectl describe pod untuk memeriksa event pod dan memastikan apakah instans telah kembali ke mode pay-as-you-go. Event SpotDegraded menunjukkan bahwa instans telah kembali ke instans pay-as-you-go.

    Events:
      Type     Reason                  Age   From               Message
      ----     ------                  ---   ----               -------
      Warning  MissingClusterDNS       32m   virtual-kubelet    pod: "default/test4-dbrw6(3ef7c65d-3908-40e3-ab1f-39ff9562a36b)". virtual-kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to "Default" policy.
      Warning  SpotDegraded            32m   EciService         [eci.containergroup]Spot[SpotStrategy:SpotWithPriceLimit,SpotPriceLimit:0.001,SpotDuration:1] will be degraded because the specified instance is out of stock
      Normal   SuccessfulHitImageCache 32m   EciService         [eci.imagecache]Successfully hit image cache imc-2ze7udxttnd(xxx), eci will be scheduled with this image cache.
      Normal   Pulled                  32m   kubelet            Container image "registry-vpc.cn-beijing.aliyuncs.com/eci_open/perl:5" already present on machine
      Normal   Created                 32m   kubelet            Created container pi
      Normal   Started                 32m   kubelet            Started container pi

Detail Pemulihan

Setelah instans spot dibuat, instans tersebut berjalan normal selama periode perlindungannya. Setelah periode perlindungan berakhir, instans spot ditarik kembali jika harga pasar melebihi tawaran Anda atau jika inventaris sumber daya tidak mencukupi. Bagian ini menjelaskan event dan status pod terkait penarikan kembali instans spot.

  • Event pra-pelepasan

    Sekitar tiga menit sebelum instans spot ditarik kembali, event SpotToBeReleased dihasilkan.

    Penting

    ECI memberi tahu Anda melalui Kubernetes Events bahwa instans spot akan dilepas. Selama periode ini, Anda dapat mengambil tindakan untuk mencegah gangguan bisnis akibat penarikan kembali instans. Untuk informasi selengkapnya, lihat Penghentian elegan.

    • Jalankan perintah kubectl describe untuk melihat informasi detail pod. Anda dapat melihat event pra-pelepasan di bagian Events output. Berikut contohnya:

      Events:
        Type     Reason            Age    From          Message
        ----     ------            ----   ----          -------
        Warning  SpotToBeReleased  3m32s  kubelet, eci  Spot ECI will be released in 3 minutes
    • Jalankan perintah kubectl get events untuk melihat informasi event. Anda dapat melihat event pra-pelepasan di output. Berikut contohnya:

      LAST SEEN   TYPE      REASON             OBJECT         MESSAGE
      3m39s       Warning   SpotToBeReleased   pod/pi-frmr8   Spot ECI will be released in 3 minutes
  • Status pod setelah penarikan kembali

    Setelah instans spot ditarik kembali, informasinya tetap disimpan, tetapi statusnya berubah menjadi Failed, dan alasannya adalah BidFailed.

    • Jalankan perintah kubectl get pod untuk melihat informasi pod. Anda dapat melihat perubahan status pod di output. Berikut contohnya:

      NAME       READY   STATUS      RESTARTS   AGE
      pi-frmr8   1/1     BidFailed   0          3h5m
    • Jalankan perintah kubectl describe untuk melihat informasi detail pod. Anda dapat melihat informasi status pod di output. Berikut contohnya:

      Status:             Failed
      Reason:             BidFailed
      Message:            The pod is spot instance, and have been released at 2020-04-08T12:36Z

Penghentian elegan

Sekitar tiga menit sebelum instans spot ditarik kembali, event SpotToBeReleased dihasilkan, dan bidang ContainerInstanceExpired dalam kondisi pod diatur ke true. Gunakan mekanisme notifikasi ini untuk menerapkan penghentian elegan dan rotasi pod, yang meminimalkan gangguan bisnis akibat penarikan kembali instans spot.

Virtual Node mendukung penghentian elegan untuk instans spot ECI. Anda dapat menambahkan anotasi k8s.aliyun.com/eci-spot-release-strategy: api-evict ke pod ECI Anda. Saat virtual node menerima event SpotToBeReleased, virtual node memanggil Eviction API untuk mengeluarkan instans spot tersebut.

Penting

Untuk mendukung notifikasi interupsi melalui kondisi pod dan pengeluaran melalui Eviction API, Anda harus melakukan upgrade ACK Virtual Node ke versi v2.11.0 atau lebih baru. Untuk informasi selengkapnya, lihat ACK Virtual Node.

Pengeluaran yang dimulai melalui API menghormati konfigurasi PodDisruptionBudget (PDB) dan terminationGracePeriodSeconds Anda. Membuat objek Eviction menggunakan API mirip dengan melakukan operasi DELETE yang dikontrol kebijakan pada pod. Prosesnya sebagai berikut:

  1. Permintaan API

    Virtual node menerima event SpotToBeReleased dan memanggil Eviction API.

  2. Pemeriksaan PDB

    Server API memvalidasi PodDisruptionBudget yang terkait dengan pod target.

  3. Eksekusi pengeluaran

    Jika server API mengizinkan pengeluaran, pod dihapus sebagai berikut:

    1. Sumber daya pod di server API diperbarui dengan timestamp penghapusan, setelah itu server API menganggap pod sedang dalam proses terminasi. Sumber daya pod juga ditandai dengan periode tenggang yang dikonfigurasi.

    2. Kubelet di node tempat pod berjalan memperhatikan bahwa sumber daya pod ditandai untuk terminasi dan mulai mematikan pod lokal secara elegan.

    3. Saat kubelet mematikan pod, lapisan kontrol menghapus pod dari objek Endpoint dan EndpointSlice. Akibatnya, pengontrol tidak lagi menganggap pod sebagai objek yang valid.

    4. Setelah periode tenggang pod berakhir, kubelet secara paksa menghentikan pod lokal.

    5. Kubelet memberi tahu server API untuk menghapus sumber daya pod.

    6. Server API menghapus sumber daya pod.

  4. Rekonsiliasi beban kerja

    Jika pod target dikelola oleh pengontrol (seperti ReplicaSet, StatefulSet, atau Job toleransi kesalahan, sparkApplication, atau Workflow), pengontrol biasanya membuat pod baru untuk menggantikan pod yang dikeluarkan.

Catatan

Jika PodDisruptionBudget salah dikonfigurasi, atau jika banyak pod tidak dalam status Ready saat Eviction API dipanggil, proses pengeluaran dapat diblokir. Jika pengeluaran tidak selesai sebelum instans spot kedaluwarsa, instans segera ditarik kembali.