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.
CatatanInstance 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.
CatatanEvent 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.
DescribeSpotPriceHistory: menanyakan harga historis instance preemptible.
DescribeSpotAdvice: menanyakan informasi seperti laju rilis rata-rata dan laju diskon rata-rata instance preemptible.
PentingSaat 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:
|
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. |
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
Contoh 2: Tentukan jumlah vCPU dan ukuran memori dan gunakan kebijakan penawaran SpotAsPriceGo
Contoh 3: Atur tidak ada periode perlindungan
Contoh 4: Secara otomatis buat instance pay-as-you-go jika sumber daya inventaris yang memenuhi persyaratan untuk spesifikasi instance tidak mencukupi
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.
PentingElastic 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 describeuntuk 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 menitJalankan perintah
kukubectl get eventsuntuk 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 poduntuk 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 3h5mJalankan perintah
kubectl describeuntuk 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.
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:
Buat Panggilan API
Saat node virtual menerima notifikasi tentang event SpotToBeReleased, node memanggil Eviction API.
Periksa PDB
Server API memeriksa PDB yang dikonfigurasikan untuk pod yang akan dikeluarkan.
Keluarkan Instance Preemptible
Setelah server API memvalidasi permintaan pengeluaran, pod dikeluarkan melalui langkah-langkah berikut:
Pod memperbarui timestamp penghapusan sehingga server API dapat mengenali pod yang akan dihentikan. Pod juga dicap dengan periode grace yang Anda konfigurasikan.
Kubelet node virtual tempat pod berjalan mengenali pod dan memulai penghentian yang mulus untuk pod.
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.
Saat periode grace berakhir, kubelet secara paksa menghentikan pod.
Kubelet memberi tahu server API untuk menghapus pod.
Server API menghapus pod.
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.
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.
