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.
CatatanInstans 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:
-
DescribeSpotPriceHistory: mengkueri riwayat harga instans.
-
DescribeSpotAdvice: mengkueri informasi seperti laju rilis rata-rata dan tingkat diskon rata-rata instans.
PentingTentukan 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:
|
|
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-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. |
-
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
Contoh 2: Tentukan vCPU dan memori serta gunakan SpotAsPriceGo
Contoh 3: Atur tanpa periode perlindungan
Contoh 4: Kembali ke instans pay-as-you-go
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
SpotToBeReleaseddihasilkan.PentingECI 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 describeuntuk melihat informasi detail pod. Anda dapat melihat event pra-pelepasan di bagianEventsoutput. 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 eventsuntuk 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 adalahBidFailed.-
Jalankan perintah
kubectl get poduntuk 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 describeuntuk 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.
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:
-
Permintaan API
Virtual node menerima event
SpotToBeReleaseddan memanggil Eviction API. -
Pemeriksaan PDB
Server API memvalidasi PodDisruptionBudget yang terkait dengan pod target.
-
Eksekusi pengeluaran
Jika server API mengizinkan pengeluaran, pod dihapus sebagai berikut:
-
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.
-
Kubelet di node tempat pod berjalan memperhatikan bahwa sumber daya pod ditandai untuk terminasi dan mulai mematikan pod lokal secara elegan.
-
Saat kubelet mematikan pod, lapisan kontrol menghapus pod dari objek Endpoint dan EndpointSlice. Akibatnya, pengontrol tidak lagi menganggap pod sebagai objek yang valid.
-
Setelah periode tenggang pod berakhir, kubelet secara paksa menghentikan pod lokal.
-
Kubelet memberi tahu server API untuk menghapus sumber daya pod.
-
Server API menghapus sumber daya pod.
-
-
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.
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.