All Products
Search
Document Center

Container Service for Kubernetes:Gunakan spot instance di Knative

Last Updated:Mar 25, 2026

Jika aplikasi Anda melibatkan layanan berdurasi pendek, seperti permintaan web, dan dapat mentolerir gangguan, Anda dapat mengonfigurasi Knative Service untuk menggunakan spot instance. Instans ini segera dilepas setelah digunakan dan jauh lebih hemat biaya dibandingkan instans sesuai permintaan (on-demand). Dengan menggabungkan Knative dan spot instance, Anda dapat mengoptimalkan biaya sumber daya cloud serta membangun arsitektur Serverless yang sangat hemat biaya sekaligus mempertahankan elastisitas dan responsivitas layanan.

Prasyarat

Konsep utama

  • spot instance

    Spot instance adalah instans komputasi preemptible yang hemat biaya. Anda dapat menawar kapasitas komputasi idle dari Alibaba Cloud untuk menjalankan kontainer Anda. Instans tersebut berjalan hingga penawaran Anda turun di bawah harga pasar saat ini atau sumber daya ditarik kembali karena stok tidak mencukupi. Untuk informasi selengkapnya tentang spot instance, lihat Apa itu spot instance?

  • Knative

    Knative bertujuan untuk menetapkan standar orkestrasi aplikasi serverless cloud-native lintas platform. Fitur utamanya mencakup autoscaling berbasis permintaan, penskalaan hingga nol (scale-to-zero), manajemen multi-versi, rilis canary berbasis trafik, penerapan fungsi (function deployment), dan arsitektur berbasis event. Untuk informasi selengkapnya tentang Knative, lihat Ikhtisar ACK Knative dan Ikhtisar ACK Serverless Knative.

Cara kerja

Di Knative, beban kerja Serverless dikelola terutama melalui Knative Services, yang secara otomatis menskalakan Pod berdasarkan permintaan masuk. Untuk menggunakan spot instance, Anda hanya perlu mengonfigurasi anotasi Pod tertentu. Node virtual secara otomatis menyediakan spesifikasi sumber daya Elastic Container Instance (ECI) yang sesuai berdasarkan anotasi Pod tersebut. Node virtual juga menyediakan penggantian otomatis untuk spot instance, yang semakin mengotomatiskan penggunaannya.

image

Keuntungan menggunakan Knative dengan spot instance meliputi:

  • Ideal untuk skenario Serverless: Sangat cocok untuk permintaan web berdurasi pendek dan tugas lain yang menggunakan sumber daya sesuai kebutuhan lalu melepasnya setelah selesai, sehingga menghindari alokasi sumber daya jangka panjang.

  • Selaras dengan shutdown yang mulus (graceful shutdown): Proses ini mengharuskan aplikasi mendukung graceful shutdown, yang difasilitasi Knative dengan menyisipkan kontainer sidecar queue-proxy ke setiap Pod. Saat sebuah Pod dihentikan, kontainer queue-proxy terlebih dahulu menunggu semua permintaan aktif selesai sebelum kontainer aplikasi dimatikan.

  • Hemat biaya: Bagi pengguna Knative yang peka terhadap biaya, penggunaan spot instance memberikan penghematan signifikan.

Konfigurasi dan contoh

Konfigurasi spot instance

Penting

Anotasi berikut hanya berlaku saat Anda membuat Pod ECI. Menambahkan atau mengubah anotasi ini pada Pod ECI yang sudah ada tidak akan berpengaruh.

Tambahkan anotasi berikut ke templat Pod Knative Service Anda untuk mengonfigurasi spot instance.

Anotasi

Nilai contoh

Wajib

Deskripsi

k8s.aliyun.com/eci-spot-strategy

SpotAsPriceGo

Ya

Strategi penawaran untuk spot instance. Nilai yang valid:

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

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

    Penting

    Jika Anda menggunakan strategi SpotAsPriceGo saat sumber daya tipe instans yang ditentukan sedang dalam permintaan tinggi di zona yang dipilih, harganya dapat mencapai harga instans sesuai permintaan.

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

"0.5"

Tidak

Harga maksimum per jam untuk spot instance. Nilainya dapat memiliki hingga tiga tempat desimal.

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

k8s.aliyun.com/eci-spot-duration

"1"

Tidak

Periode perlindungan untuk spot instance, dalam satuan jam. Nilai default-nya adalah 1. Nilai 0 menonaktifkan periode perlindungan.

k8s.aliyun.com/eci-spot-fallback

"true"

Tidak

Menentukan apakah akan secara otomatis membuat instans sesuai permintaan jika stok spot tidak tersedia. Ini membantu memastikan pembuatan instans berhasil. Nilai default-nya adalah false.

Contoh 1: Gunakan strategi SpotWithPriceLimit

Contoh YAML berikut membuat spot instance dengan tipe instans ecs.c6.

  • Saat pembuatan, jika tidak tersedia stok yang memenuhi tipe instans dan batas harga yang ditentukan, pembuatan gagal.

  • Setelah dibuat, instans berjalan selama periode perlindungan 1 jam yang dijamin. Setelah periode ini, spot instance akan ditarik kembali jika harga pasar melebihi penawaran Anda atau jika stok untuk tipe instans yang ditentukan tidak mencukupi.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      labels:
        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 yang menetapkan batas harga kustom.
        k8s.aliyun.com/eci-spot-price-limit: "0.25"            # Tetapkan harga maksimum per jam.
    spec:         
      containers:
      - env:
        - name: TARGET
          value: "Knative"
        image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56

Contoh 2: Aktifkan fallback otomatis ke instans sesuai permintaan

Contoh YAML berikut membuat spot instance dengan tipe instans ecs.c6.

  • Saat pembuatan, jika tersedia stok yang memenuhi tipe instans dan batas harga yang ditentukan, spot instance dibuat. Instans berjalan selama periode perlindungan 1 jam yang dijamin. Setelah periode ini, spot instance akan ditarik kembali jika harga pasar melebihi penawaran Anda atau jika stok untuk tipe instans yang ditentukan tidak mencukupi.

  • Saat pembuatan, jika tidak tersedia stok yang memenuhi tipe instans dan batas harga yang ditentukan, instans sesuai permintaan dibuat sebagai gantinya. Instans ini tidak akan ditarik kembali secara otomatis oleh sistem. Setelah instans dibuat, Anda dapat menjalankan perintah kubectl describe pod untuk memeriksa Events Pod tersebut. Jika Anda melihat Event SpotDegraded, artinya Pod tersebut telah diturunkan ke instans sesuai permintaan.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      labels:
        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 yang menetapkan 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 fallback ke instans sesuai permintaan jika stok spot tidak tersedia.
    spec:         
      containers:
      - env:
        - name: TARGET
          value: "Knative"
        image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56

Langkah 1: Konfigurasi spot instance

Untuk meminimalkan biaya sumber daya komputasi, Anda dapat menambahkan anotasi k8s.aliyun.com/eci-spot-strategy ke Knative Service Anda. Konfigurasi ini memprioritaskan penggunaan instans ECI Spot, yang ditawarkan dengan harga lebih rendah dibandingkan instans sesuai permintaan.

Namun, spot instance dapat ditarik kembali saat harga pasar melebihi penawaran Anda atau saat stok tidak mencukupi, yang dapat menyebabkan gangguan layanan. Untuk menjaga kelangsungan bisnis, Anda juga dapat menambahkan anotasi k8s.aliyun.com/eci-spot-fallback: "true". Dengan pengaturan ini, jika spot instance tidak tersedia karena kekurangan sumber daya, Knative Service secara otomatis fallback ke penggunaan instans sesuai permintaan, sehingga memastikan stabilitas dan keandalan layanan. Pendekatan ini menyeimbangkan penghematan biaya dengan ketersediaan tinggi.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Applications > Knative.

  3. Pada halaman Knative, klik tab Services. Pilih default dari daftar drop-down Namespace lalu klik Buat dengan Template. Di daftar drop-down Sampel Template, pilih custom. Tempel kode contoh berikut ke editor lalu klik Create untuk membuat Knative Service bernama helloworld-go.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        metadata:
          labels:
            alibabacloud.com/eci: "true" 
          annotations:
            k8s.aliyun.com/eci-use-specs : "ecs.c6.large"           # Tentukan tipe instans ECS.
            k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"       # Gunakan strategi yang mengikuti harga pasar.
            k8s.aliyun.com/eci-spot-duration: "1"                   # Tetapkan periode perlindungan. Default-nya 1 jam. Anda dapat menentukan durasi berbeda saat membuat instans.
            k8s.aliyun.com/eci-spot-fallback: "true"                # Secara otomatis fallback ke instans sesuai permintaan jika stok spot tidak tersedia.
        spec:         
          containers:
          - env:
            - name: TARGET
              value: "Knative"
            image: registry-vpc.{REGION-ID}.aliyuncs.com/knative-samples/helloworld-go:160e4dc8 # Ganti {REGION-ID} dengan ID wilayah tempat kluster Anda ditempatkan, misalnya cn-hangzhou.

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

    • Saat pembuatan, jika stok spot untuk tipe instans yang ditentukan tidak tersedia, instans sesuai permintaan dibuat sebagai gantinya.

    • Setelah dibuat, instans berjalan selama periode perlindungan 1 jam yang dijamin. Selama periode ini, instans tidak akan ditarik kembali meskipun harga pasar melebihi penawaran Anda. Setelah periode perlindungan berakhir, spot instance dapat ditarik kembali secara otomatis oleh Alibaba Cloud jika harga pasar melebihi penawaran Anda atau karena stok tidak mencukupi. Saat controller mengganti Pod yang ditarik kembali, pengaturan k8s.aliyun.com/eci-spot-fallback: "true" memastikan bahwa instans sesuai permintaan baru dibuat jika stok spot tidak tersedia, sehingga menjaga ketersediaan layanan.

(Opsional) Langkah 2: Konfigurasi graceful shutdown untuk spot instance

Batasan

Untuk mengaktifkan notifikasi gangguan instans preemptible menggunakan kondisi pod dan mengeluarkan instans preemptible menggunakan Eviction API, Anda harus memperbarui ack-virtual-node ke versi 2.11.0 atau lebih baru. Untuk informasi selengkapnya tentang ack-virtual-node, lihat ack-virtual-node.

Notifikasi gangguan instans preemptible

Alibaba Cloud memberi tahu Anda 3 menit sebelum gangguan instans preemptible dengan mengirimkan event SpotToBeReleased dan mengubah nilai ContainerInstanceExpired dalam kondisi pod menjadi true.

Gambar berikut adalah contoh notifikasi tersebut.图片 1.png

Konfigurasi penanganan mulus untuk spot instance yang akan kedaluwarsa

Untuk meminimalkan gangguan bisnis akibat penarikan kembali instans ECI Spot, node virtual menyediakan fitur graceful shutdown yang dapat dikonfigurasi. Anda dapat menambahkan anotasi k8s.aliyun.com/eci-spot-release-strategy: api-evict ke Pod spot Anda. Saat node virtual menerima event SpotToBeReleased, node tersebut akan memanggil Eviction API untuk mengeluarkan instans spot tersebut. Pengeluaran yang diinisiasi API menghormati pengaturan PodDisruptionBudgets dan terminationGracePeriodSeconds Anda. Membuat objek Eviction melalui API mirip dengan melakukan operasi DELETE yang dikontrol kebijakan pada Pod.

  1. Lakukan panggilan API: Saat node virtual menerima event SpotToBeReleased, node tersebut memanggil Eviction API.

  2. Periksa PDB: Server API memeriksa PDB yang dikonfigurasi untuk pod yang akan dikeluarkan.

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

    1. Pod memperbarui timestamp penghapusannya agar server API dapat mengenali pod yang akan dihentikan. Pod juga diberi cap periode tenggang yang Anda konfigurasi.

    2. kubelet dari node virtual tempat pod berjalan mengenali pod tersebut dan memulai proses graceful shutdown untuk pod tersebut.

    3. Saat kubelet menghentikan pod, lapisan kontrol kluster memutuskan asosiasi pod dari Endpoints dan EndpointSlices terkait. Dalam hal ini, controller pod tidak lagi mengenali pod tersebut sebagai valid.

    4. Saat periode tenggang berakhir, kubelet secara paksa menghentikan pod tersebut.

    5. kubelet memberi tahu sistem untuk menghapus pod tersebut.

    6. Server API menghapus pod tersebut.

  4. Dalam lingkungan Knative, setiap Pod yang dikelola oleh Knative Service mencakup kontainer sidecar queue-proxy. Saat sebuah Pod dihapus, queue-proxy menunggu semua permintaan yang sedang berjalan selesai sebelum kontainer aplikasi dihentikan. Proses ini memungkinkan skala turun atau pembaruan yang mulus.

Pelepasan instans preemptible

Setelah instans preemptible dibuat, instans tersebut dapat berjalan normal selama periode perlindungan. Setelah periode perlindungan berakhir, instans preemptible dilepas jika harga pasar lebih tinggi daripada harga penawaran Anda atau sumber daya stok tidak mencukupi. Anda dapat memahami status pelepasan instans preemptible dengan melakukan operasi berikut:

  • Event SpotToBeReleased

    Event SpotToBeReleased dihasilkan sekitar 3 menit sebelum instans preemptible dilepas.

    Penting

    Elastic Container Instance mengirimkan event tersebut ke daftar event Kubernetes. Selama periode tiga menit tersebut, Anda dapat mengambil langkah-langkah untuk memastikan bisnis Anda tidak terganggu oleh pelepasan instans preemptible. Untuk informasi selengkapnya, lihat Graceful termination.

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

      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. Event SpotToBeReleased ditampilkan pada output perintah. Contoh:

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

    Setelah instans preemptible dilepas, informasi instans tersebut tetap disimpan. Status instans berubah menjadi Failed dan penyebab kegagalannya adalah BidFailed.

    • Jalankan perintah kubectl get pod untuk melihat informasi instans. Status instans yang ditampilkan pada 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 instans preemptible. Lalu, lihat detail status instans pada output perintah. Contoh:

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

Dokumen terkait

Jika aplikasi Anda sensitif terhadap latensi cold-start, pertimbangkan untuk menggunakan fitur instans terjadwal. Fitur ini memungkinkan Anda mempertahankan instans berperforma burstable dengan spesifikasi rendah untuk menyeimbangkan biaya dan waktu startup. Untuk informasi selengkapnya, lihat Konfigurasi instans terjadwal.