Dalam kluster Kubernetes, komponen penjadwalan bernama kube-scheduler menjadwalkan pod ke node berdasarkan alokasi sumber daya untuk memastikan ketersediaan tinggi aplikasi dan meningkatkan pemanfaatan sumber daya kluster. Container Service for Kubernetes (ACK) menyediakan berbagai kebijakan penjadwalan fleksibel untuk berbagai beban kerja, termasuk penjadwalan pekerjaan, penjadwalan sadar topologi, penjadwalan sadar QoS (quality of service), dan penjadwalan ulang.
Sebelum Anda mulai
Topik ini menjelaskan solusi penjadwalan kluster untuk insinyur O&M kluster (termasuk administrator sumber daya kluster) dan pengembang aplikasi. Anda dapat memilih kebijakan penjadwalan berdasarkan skenario bisnis dan peran bisnis Anda.
Insinyur O&M fokus pada biaya kluster dan harus memaksimalkan pemanfaatan sumber daya kluster untuk menghindari pemborosan. Mereka juga perlu memastikan ketersediaan tinggi kluster, load balancing di antara node, serta menghindari titik kegagalan tunggal (SPOF).
Pengembang aplikasi ingin menerapkan dan mengelola aplikasi secara sederhana. Aplikasi dapat memperoleh sumber daya yang diperlukan, seperti CPU, GPU, dan memori, sesuai dengan persyaratan performanya.
Untuk lebih memahami kebijakan penjadwalan yang disediakan oleh ACK, kami menyarankan Anda mempelajari istilah terkait penjadwalan. Untuk informasi lebih lanjut, lihat Kubernetes Scheduler, Label Node, Node-pressure Eviction, dan Batasan Penyebaran Topologi Pod.
Kebijakan penjadwalan default dari ACK scheduler sama dengan kebijakan penjadwalan default dari Kubernetes scheduler open source. Kebijakan penjadwalan default mencakup plugin Filter dan Score.
Kebijakan penjadwalan asli Kubernetes
Kebijakan penjadwalan asli Kubernetes dapat diklasifikasikan menjadi kebijakan penjadwalan node dan kebijakan penjadwalan antar-pod.
Kebijakan penjadwalan node: Fokus pada karakteristik dan kondisi sumber daya node untuk memastikan bahwa pod dijadwalkan ke node yang sesuai dengan kebutuhannya.
Kebijakan penjadwalan antar-pod: Fokus pada mengontrol distribusi pod untuk mengoptimalkan keseluruhan penyebaran pod dan memastikan ketersediaan tinggi aplikasi.
Kebijakan | Deskripsi | Skenario |
Anda dapat memberi label pada node dengan menambahkan pasangan key-value dan menggunakan nodeSelector untuk menjadwalkan pod ke node dengan label tertentu. Contohnya, Anda dapat menggunakan nodeSelector untuk menjadwalkan pod ke node tertentu atau menjadwalkan pod ke pool node tertentu. | Ini adalah fitur pemilihan node dasar yang tidak mendukung fitur penjadwalan kompleks, seperti aturan anti-afinitas. | |
Kebijakan penjadwalan ini lebih fleksibel dan rinci dibandingkan dengan kebijakan penjadwalan yang menggunakan NodeSelector. Contohnya, aturan afinitas | Jadwalkan pod ke node dengan karakteristik tertentu, seperti wilayah, jenis perangkat, dan konfigurasi perangkat keras. Aturan anti-afinitas digunakan untuk menyebarkan pod di seluruh node. | |
Taint terdiri dari key, value, dan effect. Efek umum meliputi |
| |
Label pod digunakan untuk menentukan apakah pod akan dijadwalkan ke node tertentu. Aturan afinitas |
|
Kebijakan penjadwalan yang disediakan oleh ACK
Jika kebijakan penjadwalan asli Kubernetes tidak dapat memenuhi persyaratan bisnis Anda, seperti penskalaan bertahap dan penskalaan balik berbagai sumber daya instance, penjadwalan berbasis beban berdasarkan penggunaan sumber daya aktual node, Anda dapat merujuk ke kebijakan penjadwalan berikut yang disediakan oleh ACK.
Konfigurasikan penjadwalan sumber daya berbasis prioritas
Peran yang Ditujukan: Insinyur O&M kluster.
Deskripsi: Jika kluster ACK Anda berisi berbagai jenis sumber daya instance, seperti Instance ECS dan instance kontainer elastis, dengan metode penagihan yang berbeda, seperti langganan, bayar sesuai pemakaian, dan instance preemptible, kami menyarankan Anda mengonfigurasi penjadwalan sumber daya berbasis prioritas. Ini memungkinkan Anda menentukan urutan pemilihan berbagai jenis sumber daya node selama penjadwalan pod dan melakukan aktivitas penskalaan balik dalam urutan terbalik.
Kebijakan | Deskripsi | Skenario | Referensi |
Penjadwalan sumber daya berbasis prioritas kustom | Anda dapat menentukan nilai kustom untuk parameter Aplikasi dapat diskalakan balik dalam urutan terbalik. Sebagai contoh, kluster memprioritaskan penghapusan pod pada instance kontainer elastis, lalu menghapus pod pada instance ECS bayar sesuai pemakaian, dan terakhir menghapus pod pada instance ECS berlangganan. |
|
Penjadwalan pekerjaan
Peran yang Ditujukan: Insinyur O&M kluster.
Deskripsi: Scheduler dapat memutuskan node mana yang akan menjalankan pod berdasarkan aturan yang telah ditentukan. Namun, scheduler tidak cocok untuk menjadwalkan pod pekerjaan batch. ACK mendukung penjadwalan gang dan penjadwalan kapasitas untuk pekerjaan batch.
Kebijakan | Deskripsi | Skenario | Referensi |
Gang Scheduling | Semua pod terkait dijadwalkan atau tidak ada pod yang dijadwalkan, yang mencegah proses abnormal tertentu memblokir seluruh grup proses terkait. |
| |
Capacity Scheduling | Cadangkan jumlah sumber daya tertentu untuk namespace atau grup pengguna tertentu, dan tingkatkan pemanfaatan sumber daya secara keseluruhan dengan menerapkan berbagi sumber daya ketika sumber daya kluster hampir mencukupi. | Dalam skenario multi-tenant, tenant yang berbeda memiliki siklus hidup sumber daya yang berbeda dan menggunakan sumber daya dengan cara yang berbeda. Akibatnya, pemanfaatan sumber daya kluster rendah. Berbagi dan pengambilan kembali sumber daya berdasarkan jumlah sumber daya tetap diperlukan untuk meningkatkan pemanfaatan sumber daya. |
Penjadwalan sadar topologi
Peran yang Ditujukan: Insinyur O&M kluster.
Deskripsi: Dalam beban kerja pembelajaran mesin dan analitik data besar, pod sering kali memerlukan komunikasi jaringan intensif antar-pod. Secara default, scheduler mendistribusikan pod di seluruh kluster secara seimbang, yang akhirnya memperpanjang waktu penyelesaian pekerjaan. Mekanisme afinitas node atau pod yang ada tidak dapat melakukan upaya penjadwalan multi-domain topologi. Node hanya memiliki label spesifik zona.
Deskripsi | Skenario | Referensi |
Scheduler menambahkan label penjadwalan gang ke pekerjaan untuk memastikan bahwa permintaan sumber daya semua pod dipenuhi pada saat yang sama. Anda juga dapat menggunakan penjadwalan sadar topologi untuk memungkinkan scheduler melalui daftar domain topologi sampai menemukan domain topologi yang memenuhi persyaratan semua pod. Anda dapat mengaitkan pool node dengan set penyebaran untuk menjadwalkan pod ke instance ECS dalam set penyebaran latensi rendah yang sama untuk meningkatkan performa pekerjaan. | Dalam pekerjaan pembelajaran mesin atau analisis data besar, pod perlu berkomunikasi secara sering. Scheduler perlu melalui daftar domain topologi sampai menemukan domain topologi yang memenuhi persyaratan semua pod. Dengan cara ini, jumlah waktu yang diperlukan untuk menyelesaikan pekerjaan dikurangi. |
Penjadwalan sadar beban
Peran yang Ditujukan: Insinyur O&M kluster dan pengembang aplikasi.
Deskripsi: Berdasarkan kebijakan penjadwalan asli, scheduler menjadwalkan pod berdasarkan alokasi sumber daya. Scheduler memeriksa permintaan sumber daya pod dan sumber daya yang dapat dialokasikan pada node untuk menentukan penjadwalan pod. Namun, penggunaan sumber daya node berubah secara dinamis seiring waktu atau berdasarkan lingkungan kluster, lalu lintas, atau permintaan beban kerja. Scheduler asli tidak dapat mendeteksi beban sumber daya aktual pada node.
Deskripsi | Skenario | Referensi |
Dengan meninjau statistik historis beban node dan memperkirakan penggunaan sumber daya pod yang baru dijadwalkan, scheduler ACK dapat memantau beban node dan menjadwalkan pod ke node dengan beban lebih rendah untuk menerapkan load balancing. Ini mencegah crash aplikasi atau node yang disebabkan oleh satu node yang kelebihan beban. | Aplikasi yang sensitif terhadap beban atau latensi akses atau memiliki persyaratan pada kelas QoS sumber daya. |
Kami menyarankan Anda bekerja dengan penjadwalan ulang hotspot sadar beban untuk mencegah distribusi beban tidak seimbang di antara node.
Penjadwalan sadar QoS
Peran yang Berlaku: Insinyur O&M kluster dan pengembang aplikasi.
Deskripsi: Konfigurasikan kelas QoS untuk pod, termasuk Guaranteed, Burstable, dan BestEffort. Ketika sumber daya node tidak mencukupi, kubelet memutuskan pod mana yang akan dikeluarkan dari node berdasarkan kelas QoS. ACK menyediakan fitur penjadwalan sumber daya sadar SLO (service level objective) untuk meningkatkan performa dan kualitas layanan aplikasi sensitif latensi dan memastikan penggunaan sumber daya untuk pekerjaan prioritas rendah.
Kebijakan | Deskripsi | Skenario | Referensi |
CPU Burst | Karena batasan CPU, sistem operasi membatasi penggunaan sumber daya dalam satu siklus, yang dapat menyebabkan kontainer mengalami throttling sumber daya (CPU throttling). CPU Burst memungkinkan kontainer mengumpulkan time slice CPU ketika kontainer sedang idle. Kontainer dapat menggunakan time slice CPU yang terakumulasi untuk melebihi batas CPU ketika permintaan sumber daya meningkat tajam. Ini meningkatkan performa kontainer, mengurangi latensi, dan meningkatkan kualitas layanan. |
| |
Penjadwalan CPU Sadar Topologi | Tetapkan pod beban kerja sensitif CPU ke core CPU pada node. Ini menyelesaikan masalah penurunan performa aplikasi yang disebabkan oleh seringnya pergantian konteks CPU dan akses memori lintas node NUMA. |
| |
Penjadwalan GPU Sadar Topologi | Ketika beberapa GPU diterapkan dalam kluster dan beberapa pod intensif GPU berjalan pada saat yang sama, pod mungkin bersaing untuk sumber daya GPU dan sering beralih antara GPU atau node NUMA yang berbeda. Ini memengaruhi performa aplikasi. Penjadwalan GPU sadar topologi dapat menjadwalkan beban kerja ke GPU yang berbeda, mengurangi akses memori lintas node NUMA, dan meningkatkan performa aplikasi serta kecepatan respons. |
| |
Komitmen Sumber Daya Dinamis | Kuantifikasi sumber daya yang dialokasikan ke pod tetapi tidak digunakan dan jadwalkan sumber daya tersebut ke pekerjaan prioritas rendah untuk mencapai komitmen sumber daya berlebih. Kebijakan QoS node tunggal berikut ini harus digunakan bersama-sama agar aplikasi tidak saling memengaruhi:
| Tingkatkan pemanfaatan sumber daya kluster dengan menggunakan colocation. Skenario colocation tipikal adalah pelatihan model pembelajaran mesin dan inferensi, pemrosesan batch data besar dan analisis data, layanan online, dan layanan cadangan offline. | |
Ubah Parameter Sumber Daya Pod secara Dinamis | Jika Anda ingin mengubah parameter kontainer untuk pod dalam kluster yang menjalankan Kubernetes 1.27 atau lebih awal, Anda harus mengubah parameter PodSpec dan mengirimkan perubahan. Kemudian, pod akan dihapus dan dibuat ulang. ACK memungkinkan Anda mengubah parameter CPU, parameter memori, dan batas IOPS disk dari pod tanpa perlu me-restart pod. | Fitur ini cocok untuk skenario di mana Anda ingin menyesuaikan sementara sumber daya CPU dan memori. |
Penjadwalan ulang
Peran yang Ditujukan: Insinyur O&M kluster dan pengembang aplikasi.
Deskripsi: Status kluster terus berubah. Dalam beberapa skenario, Anda mungkin perlu memigrasikan pod yang sedang berjalan ke node lain, yang berarti Anda harus menjadwalkan ulang pod ke node yang berbeda.
Kebijakan | Deskripsi | Skenario | Referensi |
Penjadwalan ulang | Dalam skenario di mana node hotspot ada karena sumber daya kluster pada node yang berbeda tidak digunakan secara merata atau pod gagal dijadwalkan berdasarkan kebijakan yang telah ditentukan karena perubahan atribut node, Anda dapat menjadwalkan pod yang tidak dijadwalkan dengan benar pada suatu node ke node lain untuk memastikan bahwa pod berjalan pada node optimal. Ini memastikan ketersediaan tinggi dan efisiensi beban kerja dalam kluster Anda. |
| |
Bekerja dengan penjadwalan ulang hotspot sadar beban | Anda dapat menggunakan kombinasi penjadwalan sadar beban dan penjadwalan ulang hotspot untuk memantau perubahan beban node dan secara otomatis mengoptimalkan node yang melebihi ambang beban untuk mencegah kelebihan beban node. |
Tagihan
Ketika Anda menggunakan fitur penjadwalan ACK, Anda akan dikenakan biaya untuk manajemen kluster dan sumber daya cloud berdasarkan aturan tagihan. Selain itu, Anda akan dikenakan biaya berikut untuk komponen penjadwalan:
ACK scheduler default yang disediakan oleh kube-scheduler adalah komponen bidang kontrol yang dapat Anda instal dan gunakan secara gratis.
Optimasi penjadwalan sumber daya dan fitur penjadwalan ulang ACK diimplementasikan berdasarkan ack-koordinator. Instalasi dan penggunaan ack-koordinator gratis, tetapi biaya tambahan mungkin timbul dalam skenario tertentu. Untuk informasi lebih lanjut, lihat ack-koordinator (ack-slo-manager).
FAQ
Jika Anda mengalami masalah apa pun saat menggunakan fitur penjadwalan, lihat FAQ Penjadwalan untuk pemecahan masalah.
Referensi
Untuk informasi lebih lanjut tentang pengenalan dan catatan rilis untuk kube-scheduler dan ack-koordinator, lihat kube-scheduler dan ack-koordinator (FKA ack-slo-manager).
Untuk informasi lebih lanjut tentang cara menyesuaikan perilaku kube-scheduler, lihat Parameter Kustom kube-scheduler.
Untuk informasi lebih lanjut tentang praktik terbaik dalam skenario penjadwalan, seperti praktik terbaik dalam arsitektur colocation, lihat Praktik Terbaik untuk Penjadwalan Sumber Daya.
Anda dapat mengaktifkan wawasan biaya untuk mendapatkan penggunaan dan alokasi biaya sumber daya dalam kluster ACK. Wawasan biaya juga memberikan saran penghematan biaya untuk meningkatkan pemanfaatan sumber daya secara keseluruhan. Untuk informasi lebih lanjut, lihat Wawasan Biaya.
Untuk informasi lebih lanjut tentang cara mengimplementasikan penjadwalan GPU dan isolasi memori, lihat Berbagi GPU.
Untuk informasi lebih lanjut tentang solusi penjadwalan untuk node virtual, lihat Jadwalkan Pod ke Node Virtual.