GoDasturchi
The Scheduler: Placing Pods on Nodes

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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