GoDasturchi
Pod: The Smallest Unit

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.

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

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

Hints (0/3)

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