全部产品
Search
文档中心

Elastic Container Instance:Buat instance kontainer elastis preemptible

更新时间:Jul 06, 2025

Elastic Container Instance mendukung instance preemptible. Anda dapat menjalankan aplikasi tanpa status yang memiliki skalabilitas tinggi dan toleransi kesalahan serta pekerjaan jangka pendek pada instance preemptible untuk mengurangi biaya penggunaan instance. Topik ini menjelaskan cara membuat pod berbasis Elastic Container Instance preemptible dalam kluster Kubernetes.

Informasi latar belakang

Instance kontainer elastis preemptible bersifat hemat biaya. Anda dapat menawar untuk menggunakan sumber daya Alibaba Cloud yang tidak terpakai guna membuat instance preemptible. Ketika harga pasar melebihi harga penawaran Anda untuk instance preemptible atau ketika inventaris sumber daya tidak mencukupi, sumber daya yang dikonsumsi oleh instance tersebut ditarik kembali dan instance dilepaskan.

Instance preemptible dapat digunakan untuk menjalankan pekerjaan jangka pendek dan aplikasi tanpa status yang memiliki skalabilitas tinggi dan toleransi kesalahan, seperti layanan situs web yang dapat diskalakan, rendering gambar, analisis data besar, dan komputasi paralel berskala besar. Instance preemptible cocok untuk aplikasi yang memerlukan distribusi luas, skalabilitas tinggi, dan toleransi kesalahan tinggi. Instance preemptible membantu Anda mengurangi biaya dan meningkatkan throughput untuk aplikasi-aplikasi ini. Untuk informasi lebih lanjut, lihat Instance Preemptible.

Konsep dasar

Sebelum Anda membuat instance preemptible, perhatikan item-item berikut:

  • Penagihan

    Harga pasar instance preemptible berfluktuasi berdasarkan penawaran dan permintaan untuk spesifikasi instansinya. Saat Anda membuat instance preemptible, Anda harus menentukan kebijakan penawaran untuk instance tersebut. Jika harga penawaran Anda lebih tinggi dari harga pasar real-time dan inventaris sumber daya untuk spesifikasi instance mencukupi, instance preemptible akan dibuat. Setelah instance preemptible dibuat, ia memasuki periode perlindungan selama mana instance ditagih berdasarkan harga pasar saat pembelian. Secara default, periode perlindungan adalah 1 jam. Setelah periode perlindungan berakhir, instance ditagih berdasarkan harga pasar real-time.

    Catatan

    Instance preemptible ditagih dengan harga lebih rendah dibandingkan instance pay-as-you-go. Harga instance preemptible berfluktuasi berdasarkan penawaran dan permintaan untuk spesifikasi instansinya. Instance preemptible ditagih berdasarkan durasi penggunaan aktualnya. Untuk informasi lebih lanjut, lihat bagian "Metode Penagihan" dari topik Instance Preemptible.

  • Mekanisme Penarikan

    Setelah periode perlindungan instance preemptible berakhir, sistem memeriksa harga pasar dan inventaris sumber daya untuk spesifikasi instance setiap 5 menit. Jika harga pasar real-time melebihi harga penawaran Anda atau inventaris sumber daya tidak mencukupi, instance preemptible dilepaskan.

    Catatan
    • Event Siap-Dilepaskan (SpotToBeReleased) dihasilkan sekitar 3 menit sebelum sumber daya instance preemptible ditarik kembali.

    • Setelah sumber daya instance preemptible ditarik kembali, informasi tentang instance tetap disimpan, penagihan pada instance berhenti, dan status instance berubah menjadi Kedaluwarsa.

Peringatan

Sebelum Anda menggunakan instance preemptible, perhatikan item-item berikut:

  • Pilih spesifikasi instance yang sesuai dan tempatkan penawaran yang sesuai.

    Anda dapat memanggil operasi API berikut dari Elastic Compute Service (ECS) untuk menanyakan informasi tentang instance preemptible selama 30 hari terakhir. Kemudian, Anda dapat memilih spesifikasi instance yang sesuai dan menempatkan penawaran.

    Penting

    Saat Anda menempatkan penawaran, pertimbangkan fluktuasi harga pasar dan rentang harga yang nyaman bagi Anda. Penawaran yang baik biasanya lebih tinggi dari harga pasar rata-rata, namun masih dalam rentang persyaratan bisnis Anda. Dengan cara ini, permintaan untuk membuat instance preemptible dapat diterima dan diproses, dan instance yang dibuat tidak akan dilepaskan karena perubahan harga pasar.

  • Kami merekomendasikan agar Anda menyimpan data penting di media penyimpanan yang tidak akan terpengaruh jika instance preemptible dilepaskan. Sebagai contoh, Anda dapat menggunakan disk independen yang tidak akan dilepaskan bersama dengan instance terkaitnya, atau menggunakan sumber daya penyimpanan eksternal seperti File Storage NAS file system.

Metode pembuatan

Anda dapat membuat instance preemptible dengan menentukan jenis instance ECS atau jumlah vCPU dan ukuran memori.

  • Tentukan Jenis Instance ECS

    Instance preemptible ditagih dengan harga diskon pay-as-you-go real-time dari jenis instance ECS yang ditentukan.

  • Tentukan Jumlah vCPU dan Ukuran Memori Instance

    Metode ini memiliki efek yang sama dengan metode menentukan jenis instance ECS. Sistem secara otomatis memilih jenis instance ECS yang memenuhi persyaratan Anda untuk jumlah vCPU, ukuran memori, dan harga. Instance preemptible yang dibuat ditagih dengan harga pasar diskon real-time dari jenis instance ECS yang digunakan, bukan harga pay-as-you-go dari sumber daya vCPU dan memori yang digunakan oleh instance kontainer elastis.

    Hanya instance yang menyediakan dua atau lebih vCPU yang dapat dibuat menggunakan metode ini. Tabel berikut mencantumkan spesifikasi vCPU dan memori yang didukung. Jika spesifikasi yang Anda tentukan tidak didukung oleh Elastic Container Instance, sistem secara otomatis menggunakan spesifikasi yang lebih tinggi yang didukung.

    Jumlah vCPU

    Memori (GiB)

    2

    2, 4, 8, dan 16

    4

    4, 8, 16, dan 32

    8

    8, 16, 32, dan 64

    12

    12, 24, 48, dan 96

    16

    16, 32, 64, dan 128

    24

    24, 48, 96, dan 192

    32

    32, 64, 128, dan 256

    52

    96, 192, dan 384

    64

    128, 256, dan 512

Deskripsi konfigurasi

Anda dapat menambahkan anotasi ke bagian metadata dalam file konfigurasi pod untuk membuat instance kontainer elastis preemptible. Tabel berikut menjelaskan anotasi:

Anotasi

Contoh

Diperlukan

Deskripsi

k8s.aliyun.com/eci-spot-strategy

SpotAsPriceGo

Ya

Menentukan kebijakan penawaran untuk instance preemptible. Nilai valid:

  • SpotWithPriceLimit: Instance dibuat sebagai instance preemptible dengan harga maksimum per jam. Saat Anda menggunakan kebijakan penawaran ini, Anda harus menambahkan anotasi k8s.aliyun.com/eci-spot-price-limit untuk menentukan harga maksimum per jam.

  • SpotAsPriceGo: Instance dibuat sebagai instance preemptible yang menggunakan harga pasar saat pembelian sebagai harga penawaran secara otomatis.

    Penting

    Jika Anda mengatur SpotStrategy ke SpotAsPriceGo dan sumber daya untuk spesifikasi instance tertentu dalam zona tertentu tidak mencukupi, nilai yang Anda tentukan untuk harga maksimum per jam instance harus mendekati harga pay-as-you-go instance. Ini dapat meningkatkan tingkat keberhasilan pembuatan instance.

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

"0.5"

Tidak

Menentukan harga maksimum per jam instance preemptible. Nilai ini dapat akurat hingga tiga tempat desimal.

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

k8s.aliyun.com/eci-spot-duration

"0"

Tidak

Menentukan periode perlindungan instance preemptible. Unit: jam. Nilai default: 1. Nilai 0 menunjukkan tidak ada periode perlindungan.

k8s.aliyun.com/eci-spot-fallback

"true"

Tidak

Menentukan apakah akan secara otomatis membuat instance pay-as-you-go untuk memastikan bahwa instance dibuat jika sumber daya inventaris yang memenuhi persyaratan spesifikasi untuk instance preemptible tidak mencukupi. Nilai default: false.

Penting
  • Anotasi harus ditambahkan ke metadata pod. Sebagai contoh, saat Anda membuat job, Anda harus menambahkan anotasi di bagian spec.template.metadata.

  • Untuk menggunakan fitur Elastic Container Instance, Anda hanya dapat menambahkan anotasi saat membuat pod berbasis Elastic Container Instance. Jika Anda menambahkan atau memodifikasi anotasi saat memperbarui pod, anotasi tersebut tidak akan berlaku.

Contoh 1: Tentukan jenis instance ECS dan gunakan kebijakan penawaran 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 jenis instance ECS.
        k8s.aliyun.com/eci-spot-strategy: "SpotWithPriceLimit"  # Tentukan SpotWithPriceLimit sebagai kebijakan penawaran.
        k8s.aliyun.com/eci-spot-price-limit: "0.25"            # Tentukan harga maksimum per jam untuk instance preemptible.
    spec:
      containers:
      - name: pi
        image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Kode YAML di atas dapat membuat instance preemptible berdasarkan jenis instance ecs.c6.large.

  • Jika sumber daya inventaris yang memenuhi persyaratan untuk jenis instance dan harga maksimum per jam tidak mencukupi, instance tidak dapat dibuat.

  • Setelah instance dibuat, Anda dijamin dapat menggunakan instance selama satu jam. Setelah periode perlindungan satu jam berakhir, jika harga pasar lebih tinggi dari harga penawaran Anda atau sumber daya inventaris yang memenuhi spesifikasi instance tidak mencukupi, instance preemptible dilepaskan.

Contoh 2: Tentukan jumlah vCPU dan ukuran memori dan gunakan kebijakan penawaran SpotAsPriceGo

  • Tentukan jumlah vCPU dan ukuran 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"  # Tentukan SpotAsPriceGo sebagai kebijakan penawaran. Instance dibuat sebagai instance preemptible yang menggunakan harga pasar saat pembelian sebagai harga penawaran secara otomatis.
        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 container pi.
                cpu: 2000m
                memory: 4096Mi
          restartPolicy: Never
  • Tentukan jumlah vCPU dan ukuran 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 jumlah vCPU dan ukuran memori. Jumlah vCPU harus 2 atau lebih besar.
            k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  # Tentukan SpotAsPriceGo sebagai kebijakan penawaran. Instance dibuat sebagai instance preemptible yang menggunakan harga pasar saat pembelian sebagai harga penawaran secara otomatis.
        spec:
          containers:
          - name: pi
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never

Kode YAML di atas dapat membuat instance preemptible yang memiliki 2 vCPU dan 4 GiB memori.

  • Jika sumber daya inventaris yang memenuhi persyaratan untuk spesifikasi instance tidak mencukupi, instance tidak dapat dibuat.

  • Setelah instance dibuat, Anda dijamin dapat menggunakan instance selama satu jam. Setelah periode perlindungan satu jam berakhir, jika harga pasar lebih tinggi dari harga penawaran Anda atau sumber daya inventaris yang memenuhi spesifikasi instance tidak mencukupi, instance preemptible dilepaskan.

Contoh 3: Atur tidak ada 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 jumlah vCPU dan ukuran memori. Jumlah vCPU harus 2 atau lebih besar.
        k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  # Tentukan SpotAsPriceGo sebagai kebijakan penawaran. Instance dibuat sebagai instance preemptible yang menggunakan harga pasar saat pembelian sebagai harga penawaran secara otomatis.
        k8s.aliyun.com/eci-spot-duration: "0"              # Atur tidak ada 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

Kode YAML di atas dapat membuat instance preemptible yang memiliki 2 vCPU dan 4 GiB memori.

  • Jika sumber daya inventaris yang memenuhi persyaratan untuk spesifikasi instance tidak mencukupi, instance tidak dapat dibuat.

  • Setelah instance dibuat, Anda tidak dijamin dapat menggunakan instance. Jika harga pasar lebih tinggi dari harga penawaran Anda atau sumber daya inventaris yang memenuhi spesifikasi instance tidak mencukupi, instance preemptible dilepaskan.

Contoh 4: Secara otomatis buat instance pay-as-you-go jika sumber daya inventaris yang memenuhi persyaratan untuk spesifikasi instance tidak mencukupi

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 jenis instance ECS.
        k8s.aliyun.com/eci-spot-strategy: "SpotWithPriceLimit"  # Tentukan SpotWithPriceLimit sebagai kebijakan penawaran.
        k8s.aliyun.com/eci-spot-price-limit: "0.05"            # Tentukan harga maksimum per jam untuk instance preemptible.
        k8s.aliyun.com/eci-spot-fallback: "true"                # Secara otomatis buat instance pay-as-you-go jika sumber daya inventaris yang memenuhi persyaratan untuk spesifikasi instance preemptible tidak mencukupi.
    spec:
      containers:
      - name: pi
        image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Kode YAML di atas dapat membuat instance preemptible berdasarkan jenis instance ecs.c6.large.

  • Jika sumber daya inventaris yang memenuhi persyaratan untuk jenis instance dan harga maksimum per jam mencukupi, instance preemptible dibuat. Setelah instance dibuat, Anda dijamin dapat menggunakan instance selama satu jam. Setelah periode perlindungan satu jam berakhir, jika harga pasar lebih tinggi dari harga penawaran Anda atau sumber daya inventaris yang memenuhi spesifikasi instance tidak mencukupi, instance preemptible dilepaskan.

  • Jika sumber daya inventaris yang memenuhi persyaratan untuk jenis instance dan harga maksimum per jam tidak mencukupi, instance pay-as-you-go dibuat. Setelah instance dibuat, sistem tidak secara otomatis melepaskan instance.

    Setelah instance dibuat, Anda dapat menjalankan perintah kubectl describe pod untuk melihat event pod yang sesuai untuk memeriksa apakah instance adalah instance pay-as-you-go. Jika event SpotDegraded ditampilkan, instance adalah instance pay-as-you-go.

    spot转按量事件..png

Pelepasan instance preemptible

Setelah instance preemptible dibuat, ia dapat berjalan normal selama periode perlindungan. Setelah periode perlindungan berakhir, instance preemptible dilepaskan jika harga pasar lebih tinggi dari harga penawaran Anda atau sumber daya inventaris tidak mencukupi. Anda dapat memahami status pelepasan instance preemptible dengan melakukan operasi berikut:

  • Event SpotToBeReleased

    Event SpotToBeReleased dihasilkan sekitar 3 menit sebelum instance preemptible dilepaskan.

    Penting

    Elastic Container Instance mengirimkan event ke daftar event Kubernetes. Selama periode tiga menit, Anda dapat mengambil langkah-langkah untuk memastikan bahwa bisnis Anda tidak terpengaruh oleh pelepasan instance preemptible. Untuk informasi lebih lanjut, lihat Penghentian yang Mulus.

    • Jalankan perintah kubectl describe untuk melihat detail instance preemptible. Event SpotToBeReleased ditampilkan di bagian Events dari output perintah. Contoh:

      Events:
        Type     Reason            Age    From          Message
        ----     ------            ----   ----          -------
        Warning  SpotToBeReleased  3m32s  kubelet, eci  Spot ECI akan dilepaskan dalam 3 menit
    • Jalankan perintah kukubectl get events untuk melihat informasi event. Event SpotToBeReleased ditampilkan di output perintah. Contoh:

      LAST SEEN   TYPE      REASON             OBJECT         MESSAGE
      3m39s       Warning   SpotToBeReleased   pod/pi-frmr8   Spot ECI akan dilepaskan dalam 3 menit
  • Status Instance Preemptible Setelah Dilepaskan

    Setelah instance preemptible dilepaskan, informasi instance masih disimpan. Status instance berubah menjadi Gagal dan penyebab kegagalan adalah BidFailed.

    • Jalankan perintah kubectl get pod untuk melihat informasi instance. Status instance yang ditampilkan di output perintah berubah menjadi BidFailed. Contoh:

      NAME       READY   STATUS      RESTARTS   AGE
      pi-frmr8   1/1     BidFailed   0          3h5m
    • Jalankan perintah kubectl describe untuk melihat detail instance preemptible. Lalu, lihat detail tentang status instance di output perintah. Contoh:

      Status:             Failed
      Reason:             BidFailed
      Message:            Pod ini adalah instance spot, dan telah dilepaskan pada 2020-04-08T12:36Z

Penghentian yang mulus

Event SpotToBeReleased dihasilkan sekitar 3 menit sebelum instance preemptible dilepaskan. Pada saat yang sama, parameter ContainerInstanceExpired dalam kondisi pod diatur ke true. Untuk menghindari gangguan layanan yang disebabkan oleh penarikan instance preemptible, Anda dapat menggunakan mekanisme notifikasi untuk mengakhiri instance preemptible secara mulus dan merotasi pod.

Node virtual memungkinkan Anda mengonfigurasi penghentian yang mulus untuk instance preemptible. Anda dapat menambahkan anotasi k8s.aliyun.com/eci-spot-release-strategy: api-evict ke metadata pod berbasis Elastic Container Instance preemptible. Dengan cara ini, ketika node virtual menerima notifikasi tentang event SpotToBeReleased, node virtual memanggil Eviction API untuk mengeluarkan instance preemptible.

Penting

Untuk mengaktifkan notifikasi pada interupsi instance preemptible menggunakan kondisi pod dan mengeluarkan instance preemptible menggunakan Eviction API, Anda harus memperbarui ack-virtual-node ke versi 2.11.0 atau lebih baru. Untuk informasi lebih lanjut, lihat ACK Virtual Node.

Eviction API dipanggil sesuai dengan konfigurasi yang ditentukan oleh PodDisruptionBudget (PDB) dan parameter terminationGracePeriodSeconds yang dikonfigurasikan untuk pod. Membuat objek Eviction untuk pod dengan memanggil API mirip dengan melakukan operasi DELETE yang didefinisikan oleh kebijakan kontrol pod. Prosedur penghentian yang mulus:

  1. Buat Panggilan API

    Saat node virtual menerima notifikasi tentang event SpotToBeReleased, node memanggil Eviction API.

  2. Periksa PDB

    Server API memeriksa PDB yang dikonfigurasikan untuk pod yang akan dikeluarkan.

  3. Keluarkan Instance Preemptible

    Setelah server API memvalidasi permintaan pengeluaran, pod dikeluarkan melalui langkah-langkah berikut:

    1. Pod memperbarui timestamp penghapusan sehingga server API dapat mengenali pod yang akan dihentikan. Pod juga dicap dengan periode grace yang Anda konfigurasikan.

    2. Kubelet node virtual tempat pod berjalan mengenali pod dan memulai penghentian yang mulus untuk pod.

    3. Saat kubelet menghentikan pod, bidang kontrol kluster memisahkan pod dari Endpoints dan Endpointslices yang relevan. Dalam hal ini, controller pod tidak lagi mengenali pod sebagai valid.

    4. Saat periode grace berakhir, kubelet secara paksa menghentikan pod.

    5. Kubelet memberi tahu server API untuk menghapus pod.

    6. Server API menghapus pod.

  4. Selaraskan Beban Kerja

    Jika pod dikelola oleh controller, seperti ReplicaSet atau StatefulSet, atau Job, SparkApplication, atau alur kerja yang dikonfigurasikan dengan pengaturan toleransi kesalahan, controller secara otomatis membuat pod baru setelah pod asli dikeluarkan.

Catatan

Jika PDB yang digunakan oleh pod dikonfigurasikan secara salah atau sejumlah besar pod tidak dalam status Ready saat node memanggil Eviction API, proses pengeluaran menjadi macet. Jika proses pengeluaran belum selesai saat instance preemptible kedaluwarsa, instance langsung dilepaskan.