The Scheduler: Placing Pods on Nodes
Scheduler: Pod'larni Node'larga joylashtirish
Ombor menejeri yangi qutini qabul qilganda, uni qaysi TOKchaga qo'yishni hal qilishi kerak — albatta, qutining o'lchamiga YETARLI bo'sh joyi bor tokchaga. Agar birinchi tokchada joy yetmasa, keyingisini tekshiradi, va hokazo. Kubernetes'dagi Scheduler — aynan shu menejer: u har bir yangi Pod uchun, uning talab qilgan resursiga (CPU, xotira) YETARLI bo'sh joyi bor Node'ni (server) tanlaydi.
package main
import "fmt"
type Node struct {
Name string
CPUFree int
}
type Pod struct {
Name string
CPURequest int
}
type Scheduler struct {
Nodes []*Node
}
// Schedule — CPURequest'ga YETARLI joyi bor BIRINCHI node'ni tanlaydi (first-fit)
func (s *Scheduler) Schedule(pod Pod) (*Node, error) {
for _, node := range s.Nodes {
if node.CPUFree >= pod.CPURequest {
node.CPUFree -= pod.CPURequest
return node, nil
}
}
return nil, fmt.Errorf("%s uchun yetarli resursli node topilmadi", pod.Name)
}
func main() {
scheduler := &Scheduler{Nodes: []*Node{
{Name: "node-1", CPUFree: 4},
{Name: "node-2", CPUFree: 8},
}}
node, err := scheduler.Schedule(Pod{Name: "web-1", CPURequest: 6})
if err != nil {
fmt.Println(err)
return
}
fmt.Println(node.Name, node.CPUFree)
}Bu strategiya first-fit deb ataladi: node-1 (4 CPU) yetarli bo'lmagani uchun (pod 6 CPU so'raydi) o'tkazib yuboriladi, node-2 (8 CPU) esa YETARLI bo'lgani uchun TANLANADI, va uning bo'sh joyi darhol KAMAYTIRILADI (node.CPUFree -= pod.CPURequest) — bu KEYINGI pod'lar uchun joyni to'g'ri hisoblash imkonini beradi.
Diqqat qiling: Schedule faqat MOS keluvchi BIRINCHI Node'ni tanlaydi, ENG YAXSHISINI emas — agar node-2 100 CPU bo'sh bo'lsa ham, Pod baribir birinchi mos kelgan Node'ga tushadi. Bu — eng SODDA yondashuv; "Scheduling: Filtering & Scoring" darsida buni yaxshilab, bir nechta MOS Node orasidan ENG YAXSHISINI tanlashni o'rganasiz.
>_ Exercise
Barcha Node'larda umumiy qolgan bo'sh CPU miqdorini hisoblash imkonini qo'shing.
- •TotalFree() int metodini yozing: s.Nodes bo'ylab yurib, CPUFree'larni yig'ing
- •Bitta Pod'ni schedule qilib, so'ng TotalFree() natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Scheduler — har bir Pod'ning resurs talabiga (masalan CPU) YETARLI bo'sh joyi bor Node'ni tanlab, uni o'sha Node'ga BIRIKTIRADI; eng sodda strategiya — mos kelgan BIRINCHI Node'ni tanlash (first-fit).
NEXT UP
Scheduling: Filtering & Scoring
$ go run main.go
Kodingizni ishga tushiring