Pod: The Smallest Unit
Pod: eng kichik birlik
"Docker for Go Developers" kursida konteynerni sayohat qiladigan lunch-box'ga o'xshatgan edik. Endi tasavvur qiling: ba'zan asosiy taomning yonida DOIM birga yuriladigan kichik yordamchi idish ham bo'ladi (masalan, sous solingan alohida bankachа) — ular ikkalasi ham BITTA sumkaga solinib, BIRGA olib boriladi va BIRGA yetkaziladi. Kubernetes'da Pod — aynan shu "bitta sumka": bir yoki bir nechta konteynerni o'z ichiga oladigan, birga joylashtiriladigan va birga boshqariladigan ENG KICHIK birlik.
package main
import "fmt"
type Container struct {
Name string
Image string
}
type Pod struct {
Name string
Labels map[string]string
Containers []Container
}
func NewPod(name string, containers ...Container) *Pod {
return &Pod{
Name: name,
Labels: make(map[string]string),
Containers: containers,
}
}
func (p *Pod) AddLabel(key, value string) {
p.Labels[key] = value
}
func main() {
pod := NewPod("web-1", Container{Name: "app", Image: "myapp:v1"})
pod.AddLabel("app", "web")
fmt.Println(pod.Name, len(pod.Containers), pod.Labels["app"])
}Docker'da siz bitta konteynerni ishga tushirasiz. Kubernetes'da esa hech qachon "yolg'iz konteyner" haqida gapirmaysiz — har doim Pod haqida gapirasiz, garchi ko'pchilik Pod'da faqat BITTA konteyner bo'lsa ham. Nega? Chunki ba'zan asosiy konteyner (app) yoniga yordamchi "sidecar" konteyner (masalan, loglarni yig'ib turuvchi) qo'shish kerak bo'ladi — ular tarmoq va diskni BAHAM ko'radi, va Kubernetes ularni DOIM birga, bitta Node'ga joylashtiradi, birga o'chiradi.
Containers ...Container — "Variadic Functions" darsida ko'rgan naqsh: NewPod bitta ham, bir nechta ham konteyner qabul qila oladi. Labels map[string]string — Pod'ga "yorliq" yopishtirish imkonini beradi (masalan app: web) — bu "Labels & Selectors" darsida ko'radigan, Kubernetes'da Pod'larni GURUHLASH uchun ishlatiladigan asosiy mexanizm.
>_ Exercise
Pod'ga ma'lum nomdagi konteyner mavjudligini tekshirish imkonini qo'shing.
- •HasContainer(name string) bool metodini yozing: p.Containers bo'ylab yurib, mos nom topilsa true qaytaring
- •Ikkita konteyner (app va sidecar) bilan pod yarating
- •pod.Name, len(pod.Containers), pod.HasContainer("sidecar") va pod.HasContainer("db") ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Pod — Kubernetes'dagi eng kichik joylashtirish birligi: bir yoki bir nechta konteynerni, ularning yorliqlarini (labels) birlashtirib, BIRGA joylashtiriladigan va boshqariladigan qilib saqlaydi.
NEXT UP
Pod Lifecycle & Status
$ go run main.go
Kodingizni ishga tushiring