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.
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.
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
$ go run main.go
Kodingizni ishga tushiring