Mengonfigurasi beberapa kumpulan simpul menggunakan kumpulan simpul spot AKS dengan penskala otomatis kluster
Azure menyediakan instans Komputer Virtual Azure yang menawarkan skalabilitas sekaligus mengurangi biaya dan ideal untuk beban kerja yang dapat terganggu. Namun, komputer virtual (VM) ini mengakses kapasitas komputasi Azure yang tidak digunakan dengan harga lebih rendah, tetapi masih mendukung skenario komputasi performa tinggi.
Solusi pelacakan drone perusahaan Anda disebarkan pada Azure Kubernetes Service (AKS) sebagai banyak aplikasi dan layanan dalam kontainer. Salah satu layanan ini adalah layanan pemprosesan batch yang menjadwalkan jalur penerbangan drone. Dengan pertumbuhan mendadak di basis pelanggan Anda, layanan pemrosesan batch kebanjiran permintaan dan membangun backlog pengiriman. Situasi ini menyebabkan keterlambatan dan frustrasi pelanggan.
Secara otomatis menskalakan jumlah replika layanan pemrosesan batch yang disediakan untuk pemrosesan pesanan tepat waktu. Namun, ini juga mengharuskan Anda untuk menyebarkan lebih banyak simpul untuk memenuhi kebutuhan sumber daya komputasi. Dengan menganalisis tren penggunaan di Azure Monitor, Anda melihat bahwa simpul ini hanya digunakan pada waktu tertentu dan tidak dengan cara yang hemat biaya. Layanan pemrosesan batch stateless dan tidak menyimpan data sesi klien apa pun. Anda menyadari bahwa Anda dapat menghemat uang dengan:
- Menggunakan instans simpul berbiaya lebih rendah.
- Secara otomatis menskalakan jumlah simpul di kumpulan simpul yang dikonfigurasi guna pemrosesan batch.
Mari kita lihat infrastruktur yang mendasari solusi hemat biaya di AKS ini.
Apa yang dimaksud dengan komputer virtual spot (VM spot) di Azure?
Komputer virtual spot adalah VM yang memberi Anda akses ke kapasitas komputasi Azure yang tidak digunakan dengan diskon besar. VM spot menggantikan VM prioritas rendah yang ada di Azure. Anda dapat menggunakan VM spot untuk menjalankan beban kerja yang meliputi:
Skenario komputasi performa tinggi, pemrosesan batch, atau aplikasi rendering visual.
Aplikasi stateless berskala besar.
Lingkungan pengembang/pengujian, termasuk beban kerja integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD).
Ketersediaan VM spot
Ketersediaan VM spot bergantung pada faktor-faktor seperti kapasitas, ukuran, wilayah, dan waktu. Azure mengalokasikan VM hanya jika kapasitas tersedia. Akibatnya, tidak ada perjanjian tingkat layanan (SLA) untuk jenis VM ini, dan mereka tidak menawarkan jaminan ketersediaan tinggi.
Kebijakan pengeluaran VM spot
Kebijakan pengeluaran default untuk VM spot adalah Batalkan alokasi. Azure mengeluarkan VM spot dengan pemberitahuan 30 detik ketika kapasitas di suatu wilayah menjadi terbatas. VM yang diatur dengan kebijakan Batalkan Alokasi akan berpindah ke status dihentikan-alokasinya saat dikeluarkan. Anda dapat menerapkan ulang VM yang dikeluarkan saat kapasitas spot tersedia lagi. VM yang dibatalkan alokasinya masih dihitung dalam kuota CPU virtual spot (vCPU) dan biaya untuk disk yang dialokasikan pokoknya masih berlaku.
Apa yang dimaksud dengan set skala komputer virtual spot?
Set skala komputer virtual spot adalah set skala komputer virtual yang mendukung VM spot Azure. VM ini berperilaku sama seperti VM spot normal, tetapi dengan satu perbedaan: saat Anda menggunakan dukungan set skala komputer virtual untuk VM spot di Azure, Anda memilih di antara dua kebijakan pengeluaran:
Batalkan Alokasi: Kebijakan Batalkan Alokasi berfungsi persis seperti yang dijelaskan sebelumnya.
Hapus: Kebijakan Hapus memungkinkan Anda menghindari biaya disk dan mencapai batas kuota. Dengan kebijakan Hapus pengeluaran, VM yang dikeluarkan akan dihapus bersama dengan disk yang mendasarinya. Fitur penskalaan otomatis set skala sekarang dapat secara otomatis mencoba mengkompensasi pengeluaran VM dengan membuat VM baru. Meskipun pembuatan VM tidak dijamin, VM yang dikeluarkan tidak mengurangi kuota vCPU Anda atau menimbulkan biaya untuk disk yang mendasarinya.
Praktik terbaik adalah menggunakan fitur penskalaan otomatis hanya jika Anda mengatur kebijakan pengeluaran ke Hapus pada set skala.
Apa yang dimaksud dengan kumpulan simpul spot di Azure Kubernetes Service (AKS)?
Kumpulan simpul spot adalah kumpulan simpul pengguna yang menggunakan set skala komputer virtual spot. AKS mendukung VM spot saat Anda:
- Perlu membuat kumpulan simpul pengguna.
- Ingin mendapatkan manfaat biaya yang ditawarkan oleh dukungan set skala komputer virtual untuk VM spot Azure.
Gunakan kumpulan simpul spot untuk:
- Memanfaatkan kapasitas yang tidak terpakai di Azure.
- Menggunakan fitur set skala dengan kebijakan Hapus pengeluaran.
- Menentukan harga maksimum yang ingin Anda bayarkan per jam.
- Mengaktifkan penskala otomatis kluster AKS Kubernetes yang direkomendasikan saat menggunakan kumpulan simpul spot.
Misalnya, untuk mendukung layanan pemrosesan batch aplikasi pelacakan drone, Anda dapat membuat kumpulan simpul pengguna spot dan mengaktifkan autoscaler kluster. Anda kemudian dapat mengonfigurasi scaler pod horizontal untuk menyebarkan lebih banyak layanan pemrosesan batch untuk mencocokkan permintaan sumber daya.
Ketika permintaan simpul meningkat, penskala otomatis kluster dapat menaikkan dan menurunkan jumlah simpul di kumpulan simpul spot. Jika pengeluaran node terjadi, autoscaler kluster terus mencoba meningkatkan jumlah simpul jika simpul tambahan masih diperlukan.
Batasan kumpulan simpul spot
Sebelum Anda memutuskan untuk menambahkan kumpulan simpul pengguna spot ke kluster AKS, pertimbangkan batasan berikut:
- Set skala spot yang mendasari disebarkan hanya ke satu domain kesalahan dan tidak menawarkan jaminan ketersediaan tinggi.
- Kluster AKS membutuhkan dukungan beberapa kumpulan simpul untuk diaktifkan.
- Anda dapat menggunakan kumpulan simpul spot hanya sebagai kumpulan simpul pengguna.
- Anda tidak dapat meningkatkan kumpulan simpul spot.
- Pembuatan VM spot tidak dijamin. Pembuatan simpul spot bergantung pada kapasitas dan ketersediaan kuota di wilayah Azure yang disebarkan di kluster.
Ingat bahwa kumpulan simpul spot harus digunakan hanya untuk beban kerja yang dapat terganggu.
Penting
Di beberapa langganan, seperti langganan sponsor, kemampuan untuk membuat VM spot dan kumpulan simpul spot terbatas. Anda mungkin tidak dapat membuat kumpulan simpul spot untuk kluster Anda.
Menambahkan kumpulan simpul spot ke kluster AKS
Kumpulan simpul spot tidak dapat menjadi kumpulan simpul sistem untuk kluster AKS. Pertama, Anda perlu membuat kluster lalu menggunakan az aks nodepool add
perintah untuk menambahkan kumpulan simpul pengguna baru.
Anda menetapkan beberapa parameter untuk kumpulan simpul baru untuk mengonfigurasinya sebagai kumpulan simpul spot.
Prioritas
Parameter --priority
ditetapkan ke Regular
secara default untuk kumpulan simpul baru. Atur nilai ke Spot
untuk menunjukkan bahwa kumpulan baru yang Anda buat adalah kumpulan simpul spot. Nilai ini tidak dapat diubah setelah dibuat.
Kebijakan pengeluaran
Kumpulan simpul spot harus menggunakan set skala komputer virtual. Ingat dari sebelumnya bahwa kumpulan simpul spot menggunakan set skala spot. Atur --eviction-policy
ke Delete
untuk memungkinkan set skala untuk menghapus simpul dan disk yang mendasar, yang dialokasikan yang digunakan simpul. Anda tidak dapat mengubah nilai ini setelah pembuatan.
Anda dapat mengatur kebijakan pengeluaran ke Deallocate
, tetapi ketika simpul ini dikeluarkan, simpul ini masih dihitung terhadap kuota komputasi Anda terhadap penskalaan atau peningkatan kluster.
Harga maksimum untuk simpul spot
Kumpulan simpul spot mengoptimalkan biaya dengan membatasi jumlah maksimum yang ingin Anda bayar per simpul spot per jam. Untuk mengatur jumlah aman Anda, gunakan parameter --spot-max-price
. Simpul spot yang baru dibuat akan dikeluarkan saat nilai ini tercapai.
Anda dapat mengatur nilai ini ke jumlah positif hingga lima tempat desimal, atau mengaturnya ke -1
. --spot-max-price
Mengatur nilai untuk -1
memengaruhi kumpulan simpul Anda dengan cara berikut:
- Simpul tidak dikeluarkan berdasarkan harga simpul.
- Biaya untuk simpul baru didasarkan pada harga saat ini untuk simpul spot, atau harga untuk node standar, menggunakan mana pun yang lebih rendah.
Misalnya, jika Anda menetapkan nilai ke 0,98765, harga maksimum untuk node dalam USD adalah 0,98765 per jam. Jika konsumsi simpul melebihi jumlah ini, simpul tersebut akan dikeluarkan.
Mengaktifkan penskala otomatis kluster
Sebaiknya Anda mengaktifkan penskala otomatis kluster dengan menggunakan parameter --enable-cluster-autoscaler
. Jika Anda tidak menggunakan penskala otomatis kluster, Anda berisiko jumlah simpul turun ke nol di kumpulan simpul karena simpul dikeluarkan akibat kendala kapasitas Azure.
Jumlah simpul minimum
Atur jumlah simpul minimum ke nilai antara 1 dan 100 dengan menggunakan parameter --min-count
. Jumlah simpul minimum diperlukan saat Anda mengaktifkan penskala otomatis kluster.
Jumlah simpul maksimum
Atur jumlah simpul maksimum ke nilai antara 1 dan 100 dengan menggunakan parameter --max-count
. Jumlah simpul maksimum diperlukan saat Anda mengaktifkan penskala otomatis kluster.
Konfigurasi Sampel
Berikut adalah contoh az aks nodepool add
perintah yang menambahkan kumpulan simpul spot dengan jumlah maksimum 3 dan jumlah min 1. Perhatikan penggunaan --enable-cluster-autoscaler
untuk mengaktifkan fitur simpul spot.
az aks nodepool add \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name spotpool01 \
--enable-cluster-autoscaler \
--max-count 3 \
--min-count 1 \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--no-wait
Menyebarkan pod untuk kumpulan simpul spot
Saat menyebarkan beban kerja di Kubernetes, Anda dapat memberikan informasi kepada penjadwal untuk menentukan simpul mana yang beban kerja dapat atau tidak dapat jalankan. Anda mengontrol penjadwalan beban kerja dengan mengonfigurasi taint, toleransi, atau afinitas simpul. Simpul spot dikonfigurasi dengan label dan taint tertentu.
Apa yang dimaksud dengan taint?
Taint diterapkan ke sebuah simpul untuk menunjukkan bahwa hanya pod tertentu yang dapat dijadwalkan di sana. Simpul spot dikonfigurasi dengan label yang diatur ke kubernetes.azure.com/scalesetpriority:spot
.
Apa yang dimaksud dengan toleransi?
Toleransi adalah spesifikasi yang diterapkan pada pod untuk mengizinkan, tetapi tidak mengharuskan, pod agar dijadwalkan pada node dengan taint yang sesuai. Simpul spot dikonfigurasi dengan taint simpul yang diatur ke kubernetes.azure.com/scalesetpriority=spot:NoSchedule
.
Catatan
Taint dan toleransi tidak menjamin pod akan ditempatkan pada node tertentu. Misalnya, jika node tidak memiliki taint, ada kemungkinan pod dengan toleransi mungkin dijadwalkan pada node yang tidak ternoda. Menentukan afinitas dengan taint dan toleransi dapat mengatasi masalah ini.
Apa yang dimaksud dengan afinitas simpul?
Anda menggunakan afinitas simpul untuk mendeskripsikan pod mana yang dijadwalkan pada simpul. Afinitas ditentukan dengan menggunakan label yang ditentukan pada simpul. Misalnya, di AKS, pod sistem dikonfigurasi dengan anti-afinitas terhadap simpul spot untuk mencegah pod dijadwalkan pada simpul ini.
Menentukan toleransi dalam file manifes pod
Anda menentukan toleransi node-taint dengan membuat tolerations
entri kamus dalam file manifes beban kerja Anda. Dalam kamus ini, Anda mengatur properti berikut untuk setiap taint simpul beban kerja yang harus ditoleransi di bagian ini:
Properti | Deskripsi |
---|---|
key |
Mengidentifikasi pasangan kunci-nilai taint simpul yang ditentukan pada simpul. Misalnya, pada kumpulan simpul spot, pasangan kunci-nilainya adalah kubernetes.azure.com/scalesetpriority:spot . Kuncinya adalah kubernetes.azure.com/scalesetpriority . |
operator |
Memungkinkan toleransi untuk mencocokkan taint. Operator default-nya adalah Equal . Anda juga dapat menentukan Exists untuk mencocokkan toleransi. Namun, saat Anda menggunakan Exists , Anda tidak menentukan properti berikut (value ). |
value |
Mewakili bagian nilai dari pasangan nilai kunci taint simpul yang ditentukan pada simpul. Misalnya, pada kumpulan simpul spot dengan pasangan kunci-nilai kubernetes.azure.com/scalesetpriority:spot , nilainya adalah spot . |
effect |
Menunjukkan bagaimana penjadwalan pod ditangani dalam sistem. Ada tiga opsi: NoSchedule , PreferNoSchedule , dan NoExecute . NoSchedule memastikan bahwa sistem tidak dapat menjadwalkan pod. PreferNoSchedule memungkinkan sistem mencoba untuk tidak menjadwalkan pod. NoExecute mengeluarkan pod yang sudah berjalan pada simpul yang rusak atau tidak menjadwalkan pod sama sekali. |
Tentukan afinitas node dalam file manifes pod
Anda menentukan afinitas dengan membuat entri affinity
dalam file manifes beban kerja. Dalam entri ini, Anda menetapkan properti berikut untuk setiap label node yang harus cocok dengan beban kerja:
Properti | Deskripsi |
---|---|
nodeAffinity |
Menjelaskan aturan penjadwalan afinitas node untuk pod. |
requiredDuringSchedulingIgnoredDuringExecution |
Jika persyaratan afinitas yang ditentukan oleh bidang ini tidak terpenuhi pada waktu penjadwalan, pod tidak dapat dijadwalkan ke simpul. Jika persyaratan afinitas yang ditentukan oleh bidang ini berhenti terpenuhi pada beberapa titik selama eksekusi pod (misalnya, karena pembaruan), sistem dapat memilih untuk mencoba mengeluarkan pod dari simpulnya. |
nodeSelectorTerms |
Daftar istilah pemilih node. Istilah yang dikembalikan cocok dengan salah satu filter, bukan semua filter. |
matchExpressions |
Daftar persyaratan pemilih node berdasarkan label node. |
key |
Kunci label tempat pemilih diterapkan. Kuncinya adalah kubernetes.azure.com/scalesetpriority |
operator |
Mewakili hubungan kunci dengan serangkaian nilai. Operator yang valid adalah In , NotIn , Exists , DoesNotExist Gt , dan Lt |
values |
Mewakili bagian nilai dari pasangan kunci-nilai label node yang ditentukan pada node. Pada kumpulan node spot dengan pasangan kunci-nilai kubernetes.azure.com/scalesetpriority:spot , nilai adalah spot . |
Berikut adalah contoh beban kerja yang memiliki toleransi dan afinitas yang ditambahkan untuk kumpulan node spot.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "kubernetes.azure.com/scalesetpriority"
operator: "Equal"
value: "spot"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.azure.com/scalesetpriority"
operator: In
values:
- "spot"