Pod Lifecycle & Status
Pod hayot tsikli va holati
Restoranga buyurtma berganingizda, u bir necha aniq bosqichdan o'tadi: "qabul qilindi" (hali pishirilmagan), "tayyorlanmoqda", va nihoyat "tayyor" yoki (kamdan-kam) "bekor qilindi". Buyurtma bir vaqtning o'zida ikkita bosqichda bo'la olmaydi, va "tayyor"dan to'g'ridan-to'g'ri "qabul qilindi"ga qaytа olmaydi. Kubernetes'dagi Pod ham xuddi shunday, ANIQ belgilangan bosqichlar (Phase) orqali o'tadi.
package main
import "fmt"
type PodPhase string
const (
PodPending PodPhase = "Pending"
PodRunning PodPhase = "Running"
PodSucceeded PodPhase = "Succeeded"
PodFailed PodPhase = "Failed"
)
type Pod struct {
Name string
Phase PodPhase
}
func NewPod(name string) *Pod {
return &Pod{Name: name, Phase: PodPending}
}
func (p *Pod) Start() error {
if p.Phase != PodPending {
return fmt.Errorf("%s: Pending holatidan boshqa holatdan Start bo'lmaydi", p.Name)
}
p.Phase = PodRunning
return nil
}
func (p *Pod) Finish(success bool) error {
if p.Phase != PodRunning {
return fmt.Errorf("%s: Running holatida bo'lmagan pod tugatilmaydi", p.Name)
}
if success {
p.Phase = PodSucceeded
} else {
p.Phase = PodFailed
}
return nil
}
func main() {
pod := NewPod("job-1")
pod.Start()
pod.Finish(true)
fmt.Println(pod.Phase)
err := pod.Start()
fmt.Println(err)
}To'rtta holat: Pending (Pod yaratildi, lekin hali ishga tushmagan — masalan, image hali yuklab olinmoqda), Running (kamida bitta konteyner ishlab turibdi), Succeeded (barcha konteyner MUVAFFAQIYATLI tugadi — odatda bir martalik Job uchun) va Failed (kamida bitta konteyner xato bilan tugadi).
Start va Finish metodlaridagi tekshiruvlar — "Pod Lifecycle" darsining eng muhim g'oyasi: HAR bir o'tish faqat MA'LUM holatdan boshlanishi mumkin (Succeededdan Runningga o'tib bo'lmaydi). Bu xuddi "State Machines" darsida ko'rgan g'oya — noto'g'ri o'tishni ONALARINING o'zida, xato qaytarish orqali OLDINI olish.
>_ Exercise
Muvaffaqiyatsiz Pod'ni qaytadan ishga tushirish imkonini qo'shing.
- •Restart() error metodini yozing: faqat Failed holatidan chaqirilsa Phase'ni Pending'ga qaytaring, aks holda xato qaytaring
- •Pod yarating, uni Start qiling, Finish(false) bilan Failed holatiga o'tkazing, Phase'ni chop eting
- •Restart() ni chaqiring va Phase'ni yana chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Pod hayot tsikli — Pending, Running, Succeeded, Failed kabi ANIQ belgilangan bosqichlardan iborat, va har bir o'tish faqat ma'lum boshlang'ich holatdan RUXSAT etilgan — bu noto'g'ri holat almashinuvlarining oldini oladi.
NEXT UP
Labels & Selectors
$ go run main.go
Kodingizni ishga tushiring