GoDasturchi
Horizontal Pod Autoscaling

Horizontal Pod Autoscaling

Pod'larni gorizontal avtomatik ko'paytirish

Call-markaz menejeri kuzatib turadi: har bir operator BIR VAQTDA ko'pi bilan 50 ta qo'ng'iroqqa xizmat qila oladi. Agar navbatda 220 ta qo'ng'iroq kutayotgan bo'lsa, kamida 5 ta operator kerak (220/50, yuqoriga yaxlitlab). Qo'ng'iroqlar kamaysa, ortiqcha operatorlarni bo'shatadi — lekin HAR DOIM kamida 2 tasini ISHDA qoldiradi (favqulodda holat uchun), va HECH QACHON 10 tadan OSHIRMAYDI (byudjet chegarasi). Kubernetes'dagi Horizontal Pod Autoscaler (HPA) — aynan shu menejer, faqat qo'ng'iroq o'rniga YUK (masalan, so'rovlar soni) asosida ishlaydi.

example.go
package main

import "fmt"

type HPA struct {
	MinReplicas  int
	MaxReplicas  int
	TargetPerPod int
}

// DesiredReplicas — joriy umumiy yukni TargetPerPod'ga bo'lib, kerakli nusxalar sonini hisoblaydi
func (h *HPA) DesiredReplicas(totalLoad int) int {
	desired := totalLoad / h.TargetPerPod
	if totalLoad%h.TargetPerPod != 0 {
		desired++
	}
	if desired < h.MinReplicas {
		desired = h.MinReplicas
	}
	if desired > h.MaxReplicas {
		desired = h.MaxReplicas
	}
	return desired
}

func main() {
	hpa := &HPA{MinReplicas: 2, MaxReplicas: 10, TargetPerPod: 50}

	fmt.Println(hpa.DesiredReplicas(30))
	fmt.Println(hpa.DesiredReplicas(220))
	fmt.Println(hpa.DesiredReplicas(1000))
}

DesiredReplicas uchta holatni ko'rsatadi: yuk 30 bo'lsa, hisob 1 nusxa yetarli deydi, lekin MinReplicas=2 uni 2 GA KO'TARADI (hech qachon 2 tadan kam bo'lmaydi). Yuk 220 bo'lsa — 5 nusxa kerak. Yuk 1000 bo'lsa — hisob 20 nusxa talab qiladi, lekin MaxReplicas=10 uni 10 GA CHEKLAYDI (byudjet/resurs chegarasi hech qachon buzilmaydi).

Bu — real Kubernetes HPA'sining AYNAN shu mantig'i (faqat u odatda CPU foizi yoki so'rov/soniya kabi METRIKALARni kuzatadi). Muhimi: HPA o'zi Pod YARATMAYDI — u faqat "nechta bo'lishi KERAK"ni hisoblab, ReplicaSet'ning Desired maydonini o'zgartiradi, qolgan ishni esa "ReplicaSet: Keeping N Copies Running" darsida yozgan Reconcile bajaradi.

>_ Exercise

Joriy va hisoblangan nusxa soni farq qilsa, bu FARQNI aniqlash imkonini qo'shing.

  • ShouldScale(current, desired int) bool metodini yozing: current != desired bo'lsa true qaytaring
  • Yuk 30 uchun DesiredReplicas'ni chop eting
  • ShouldScale(2, d1) va ShouldScale(5, d1) natijalarini chop eting (d1 — yuqorida hisoblangan qiymat)

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

HPA — joriy yukni har bir Pod uchun belgilangan maqsadga bo'lib, kerakli nusxalar sonini hisoblaydi, natijani Min/Max chegaralar bilan cheklaydi, va haqiqiy Pod yaratish/o'chirishni ReplicaSet'ning reconciliation tsikliga topshiradi.

NEXT UP

Namespaces: Isolating Resources

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Horizontal Pod Autoscaling

Pod'larni gorizontal avtomatik ko'paytirish

Call-markaz menejeri kuzatib turadi: har bir operator BIR VAQTDA ko'pi bilan 50 ta qo'ng'iroqqa xizmat qila oladi. Agar navbatda 220 ta qo'ng'iroq kutayotgan bo'lsa, kamida 5 ta operator kerak (220/50, yuqoriga yaxlitlab). Qo'ng'iroqlar kamaysa, ortiqcha operatorlarni bo'shatadi — lekin HAR DOIM kamida 2 tasini ISHDA qoldiradi (favqulodda holat uchun), va HECH QACHON 10 tadan OSHIRMAYDI (byudjet chegarasi). Kubernetes'dagi Horizontal Pod Autoscaler (HPA) — aynan shu menejer, faqat qo'ng'iroq o'rniga YUK (masalan, so'rovlar soni) asosida ishlaydi.

example.go
package main

import "fmt"

type HPA struct {
	MinReplicas  int
	MaxReplicas  int
	TargetPerPod int
}

// DesiredReplicas — joriy umumiy yukni TargetPerPod'ga bo'lib, kerakli nusxalar sonini hisoblaydi
func (h *HPA) DesiredReplicas(totalLoad int) int {
	desired := totalLoad / h.TargetPerPod
	if totalLoad%h.TargetPerPod != 0 {
		desired++
	}
	if desired < h.MinReplicas {
		desired = h.MinReplicas
	}
	if desired > h.MaxReplicas {
		desired = h.MaxReplicas
	}
	return desired
}

func main() {
	hpa := &HPA{MinReplicas: 2, MaxReplicas: 10, TargetPerPod: 50}

	fmt.Println(hpa.DesiredReplicas(30))
	fmt.Println(hpa.DesiredReplicas(220))
	fmt.Println(hpa.DesiredReplicas(1000))
}

DesiredReplicas uchta holatni ko'rsatadi: yuk 30 bo'lsa, hisob 1 nusxa yetarli deydi, lekin MinReplicas=2 uni 2 GA KO'TARADI (hech qachon 2 tadan kam bo'lmaydi). Yuk 220 bo'lsa — 5 nusxa kerak. Yuk 1000 bo'lsa — hisob 20 nusxa talab qiladi, lekin MaxReplicas=10 uni 10 GA CHEKLAYDI (byudjet/resurs chegarasi hech qachon buzilmaydi).

Bu — real Kubernetes HPA'sining AYNAN shu mantig'i (faqat u odatda CPU foizi yoki so'rov/soniya kabi METRIKALARni kuzatadi). Muhimi: HPA o'zi Pod YARATMAYDI — u faqat "nechta bo'lishi KERAK"ni hisoblab, ReplicaSet'ning Desired maydonini o'zgartiradi, qolgan ishni esa "ReplicaSet: Keeping N Copies Running" darsida yozgan Reconcile bajaradi.

>_ Exercise

Joriy va hisoblangan nusxa soni farq qilsa, bu FARQNI aniqlash imkonini qo'shing.

  • ShouldScale(current, desired int) bool metodini yozing: current != desired bo'lsa true qaytaring
  • Yuk 30 uchun DesiredReplicas'ni chop eting
  • ShouldScale(2, d1) va ShouldScale(5, d1) natijalarini chop eting (d1 — yuqorida hisoblangan qiymat)

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

HPA — joriy yukni har bir Pod uchun belgilangan maqsadga bo'lib, kerakli nusxalar sonini hisoblaydi, natijani Min/Max chegaralar bilan cheklaydi, va haqiqiy Pod yaratish/o'chirishni ReplicaSet'ning reconciliation tsikliga topshiradi.

NEXT UP

Namespaces: Isolating Resources