GoDasturchi
Namespaces: Isolating Resources

Namespaces: Isolating Resources

Namespace'lar: resurslarni ajratish

Ko'p qavatli ofis binosini tasavvur qiling: 3-qavatda "101-xona" bor, 5-qavatda ham "101-xona" bor — ular ikkita MUTLAQO boshqa xona, garchi nomi bir xil bo'lsa ham, chunki ular boshqa QAVATDA. Har bir kompaniya odatda faqat O'Z qavatidagi xonalarni ko'radi. Kubernetes'dagi Namespace — aynan shu "qavat": bitta klaster ichida resurslarni (Pod, Service va h.k.) mantiqiy jihatdan AJRATIB turadi, shu bilan birga BIR XIL nomdagi resurslarni turli namespace'da BEMALOL saqlash imkonini beradi.

example.go
package main

import "fmt"

type Pod struct {
	Name      string
	Namespace string
}

type Cluster struct {
	pods []Pod
}

func (c *Cluster) Add(p Pod) {
	c.pods = append(c.pods, p)
}

// PodsIn — faqat berilgan namespace'dagi pod'larni qaytaradi
func (c *Cluster) PodsIn(namespace string) []Pod {
	var result []Pod
	for _, p := range c.pods {
		if p.Namespace == namespace {
			result = append(result, p)
		}
	}
	return result
}

func main() {
	c := &Cluster{}
	c.Add(Pod{Name: "web-1", Namespace: "production"})
	c.Add(Pod{Name: "web-1", Namespace: "staging"})
	c.Add(Pod{Name: "db-1", Namespace: "production"})

	fmt.Println(len(c.PodsIn("production")))
	fmt.Println(len(c.PodsIn("staging")))
}

E'tibor bering: web-1 nomli Pod IKKI marta qo'shilgan — bittasi productionda, bittasi stagingda — va bu MUTLAQO to'g'ri, chunki ular turli namespace'da. Agar Namespace maydoni bo'lmaganida, bu ikkinchi web-1ni qo'shish XATO (nom TAKRORLANISHI) hisoblanardi. PodsIn — "Labels & Selectors" darsida ko'rgan filtrlash naqshining, endi namespace bo'yicha ko'rinishi.

Amalda namespace'lar odatda MUHITLARNI (production, staging, dev) yoki JAMOALARNI (team-payments, team-search) ajratish uchun ishlatiladi. Bu, "Monolith vs Microservices" darsida (Introduction to Microservices kursida) ko'rgan g'oyaning tashkiliy ko'rinishi: har bir jamoa O'Z namespace'ida ERKIN ishlaydi, boshqalarning resurslariga (tasodifan) TA'SIR qilmasdan.

>_ Exercise

Nom VA namespace bo'yicha ANIQ Pod'ni topish imkonini qo'shing.

  • Find(name, namespace string) (Pod, bool) metodini yozing: ikkalasi HAM mos kelgan Pod'ni qaytaring
  • production va staging'dagi ikkita web-1 nomli Pod'ni Find orqali alohida-alohida toping
  • Ikkalasining Namespace maydonini bitta qatorda chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Namespace — bitta klaster ichida resurslarni mantiqiy "qavat"larga ajratadi: bir xil nomdagi resurslar turli namespace'da bemalol yashashi mumkin, chunki resursning haqiqiy identifikatori nom EMAS, balki (nom, namespace) juftligidir.

NEXT UP

Admission Validation: Gatekeeping Changes

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Namespaces: Isolating Resources

Namespace'lar: resurslarni ajratish

Ko'p qavatli ofis binosini tasavvur qiling: 3-qavatda "101-xona" bor, 5-qavatda ham "101-xona" bor — ular ikkita MUTLAQO boshqa xona, garchi nomi bir xil bo'lsa ham, chunki ular boshqa QAVATDA. Har bir kompaniya odatda faqat O'Z qavatidagi xonalarni ko'radi. Kubernetes'dagi Namespace — aynan shu "qavat": bitta klaster ichida resurslarni (Pod, Service va h.k.) mantiqiy jihatdan AJRATIB turadi, shu bilan birga BIR XIL nomdagi resurslarni turli namespace'da BEMALOL saqlash imkonini beradi.

example.go
package main

import "fmt"

type Pod struct {
	Name      string
	Namespace string
}

type Cluster struct {
	pods []Pod
}

func (c *Cluster) Add(p Pod) {
	c.pods = append(c.pods, p)
}

// PodsIn — faqat berilgan namespace'dagi pod'larni qaytaradi
func (c *Cluster) PodsIn(namespace string) []Pod {
	var result []Pod
	for _, p := range c.pods {
		if p.Namespace == namespace {
			result = append(result, p)
		}
	}
	return result
}

func main() {
	c := &Cluster{}
	c.Add(Pod{Name: "web-1", Namespace: "production"})
	c.Add(Pod{Name: "web-1", Namespace: "staging"})
	c.Add(Pod{Name: "db-1", Namespace: "production"})

	fmt.Println(len(c.PodsIn("production")))
	fmt.Println(len(c.PodsIn("staging")))
}

E'tibor bering: web-1 nomli Pod IKKI marta qo'shilgan — bittasi productionda, bittasi stagingda — va bu MUTLAQO to'g'ri, chunki ular turli namespace'da. Agar Namespace maydoni bo'lmaganida, bu ikkinchi web-1ni qo'shish XATO (nom TAKRORLANISHI) hisoblanardi. PodsIn — "Labels & Selectors" darsida ko'rgan filtrlash naqshining, endi namespace bo'yicha ko'rinishi.

Amalda namespace'lar odatda MUHITLARNI (production, staging, dev) yoki JAMOALARNI (team-payments, team-search) ajratish uchun ishlatiladi. Bu, "Monolith vs Microservices" darsida (Introduction to Microservices kursida) ko'rgan g'oyaning tashkiliy ko'rinishi: har bir jamoa O'Z namespace'ida ERKIN ishlaydi, boshqalarning resurslariga (tasodifan) TA'SIR qilmasdan.

>_ Exercise

Nom VA namespace bo'yicha ANIQ Pod'ni topish imkonini qo'shing.

  • Find(name, namespace string) (Pod, bool) metodini yozing: ikkalasi HAM mos kelgan Pod'ni qaytaring
  • production va staging'dagi ikkita web-1 nomli Pod'ni Find orqali alohida-alohida toping
  • Ikkalasining Namespace maydonini bitta qatorda chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Namespace — bitta klaster ichida resurslarni mantiqiy "qavat"larga ajratadi: bir xil nomdagi resurslar turli namespace'da bemalol yashashi mumkin, chunki resursning haqiqiy identifikatori nom EMAS, balki (nom, namespace) juftligidir.

NEXT UP

Admission Validation: Gatekeeping Changes