Labels & Selectors
Yorliqlar va tanlagichlar
Aeroportda har bir yukka "teg" (tag) yopishtiriladi: rang:qizil, egasi:aziz, yo'nalish:toshkent. Aeroport xodimi keyin "faqat rang:qizil VA yo'nalish:toshkent bo'lgan barcha yuklarni ushbu lentaga yo'nalting" deb, teglar bo'yicha FILTRLAYDI — yukning nomini yoki qayerda ekanini bilishi shart emas. Kubernetes'da Label (yorliq) — Pod'ga yopishtirilgan shunday kalit:qiymat juftligi, Selector (tanlagich) esa aynan shu "faqat mos keluvchilarni tanla" so'rovi.
package main
import "fmt"
type Pod struct {
Name string
Labels map[string]string
}
type Selector map[string]string
func (s Selector) Matches(labels map[string]string) bool {
for key, value := range s {
if labels[key] != value {
return false
}
}
return true
}
func main() {
pods := []Pod{
{Name: "web-1", Labels: map[string]string{"app": "web", "env": "prod"}},
{Name: "web-2", Labels: map[string]string{"app": "web", "env": "staging"}},
{Name: "worker-1", Labels: map[string]string{"app": "worker", "env": "prod"}},
}
selector := Selector{"app": "web", "env": "prod"}
count := 0
for _, pod := range pods {
if selector.Matches(pod.Labels) {
count++
}
}
fmt.Println(count)
}Selector — o'zi ham map[string]string ("Type Definitions" darsini eslang: mavjud turga yangi ism va METOD qo'shish). Matches — selector'dagi HAR BIR kalit-qiymat juftligi, berilgan labelsda AYNAN mos kelishini tekshiradi ("AND" mantig'i): agar bironta mos kelmasa, darhol false.
Bu — Kubernetes'ning eng kuchli g'oyalaridan biri: ReplicaSet, Service, Deployment — bularning HAMMASI, keyingi darslarda ko'rasiz, Pod'larni ID yoki nomi orqali emas, balki AYNAN shu Selector orqali "topadi". Bu Pod'larni ERKIN yaratish, o'chirish, almashtirish imkonini beradi — muhimi, ular TO'G'RI yorliqlarga ega bo'lsin.
>_ Exercise
Selector'ga mos keluvchi barcha Pod nomlarini olish imkonini qo'shing.
- •FilterPods(pods []Pod, s Selector) []string funksiyasini yozing: mos keluvchi barcha pod nomlarini qaytaring
- •Faqat app=web selector bilan filtrlab, natijani chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Label — Pod'ga yopishtirilgan kalit-qiymat yorlig'i, Selector esa shu yorliqlar orqali mos Pod'larni topish so'rovi; Kubernetes'dagi deyarli barcha resurs (ReplicaSet, Service, Deployment) Pod'larni aynan shu mexanizm orqali "topadi".
NEXT UP
ReplicaSet: Keeping N Copies Running
$ go run main.go
Kodingizni ishga tushiring