GoDasturchi
Labels & Selectors

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.

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

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

Hints (0/3)

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