ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~12 นาที· อัปเดตล่าสุด

Labels และ Selectors

ระบบป้ายกำกับที่ K8s ใช้เชื่อมทุกอย่างเข้าด้วยกัน

Label (ป้ายกำกับ): คือ คู่ของ Key และ Value ที่เราเอาไว้แปะกำกับบอกว่าสิ่งนี้คืออะไร Selector (ตัวเลือก): คือ วิธีการตั้งเงื่อนไขเพื่อดึงของที่มี Label ตรงกับที่เราต้องการ

ป้ายสติกเกอร์กับคำสั่งค้นหา

Label เหมือนป้ายสติกเกอร์ที่แปะบนของ (เช่น app: web, env: prod) · Selector เหมือนคำสั่งค้นหา ("เอาทุกอย่างที่ติดป้าย app=web มา") · K8s ไม่ได้ผูกของเข้าด้วยกันแบบตายตัว แต่ใช้ป้ายกับการค้นหานี่แหละเชื่อมทุกอย่าง

Labels คือคู่ key/value ที่แปะบน object ได้ทุกชนิด · Selectors คือเงื่อนไขเลือก object ตาม label · กลไกนี้คือ "กาว" ที่ทำให้ Deployment หา Pod เจอ และ (บทหน้า) ทำให้ Service ส่ง traffic ถึง Pod ที่ถูกต้อง

selector ค้นหา Pod ด้วย label ที่ตรงกัน

Deploymentselector: app=web
Serviceselector: app=web
เลือกที่ app=web
Pod #1🏷️ app=web
Pod #2🏷️ app=web
Pod #3🏷️ app=api (ไม่ถูกเลือก)

Pod #3 ติดป้าย app=api จึงไม่ถูก selector app=web เลือก

Pod ติด label · Deployment และ Service ใช้ selector ค้นหา Pod ที่ตรงกัน
kubectl get pods --show-labels           # ดู label ของทุก Pod
kubectl get pods -l app=web              # เอาเฉพาะที่ติด app=web
kubectl get pods -l 'env in (prod,staging)'  # เลือกหลายค่า
kubectl label pod my-pod tier=frontend   # แปะ label เพิ่ม
ใช้ label กรอง Pod ด้วย kubectl

สรุป Key Takeaways

  • Label = ป้าย key/value แปะบน object · Selector = เงื่อนไขค้นหาตาม label
  • กลไกนี้คือกาวที่เชื่อม Deployment→Pod และ Service→Pod
  • ตั้ง label เป็นระบบ (app/tier/env/version) ตั้งแต่แรก
  • Label ใช้ค้นหา · Annotation ใช้แนบข้อมูลเฉย ๆ (ค้นไม่ได้)

คำถามที่พบบ่อย

ควรตั้ง label อะไรบ้างเป็นมาตรฐาน

ชุดแนะนำของ K8s เอง: app.kubernetes.io/name, /instance, /version, /component, /part-of, /managed-by — อย่างน้อยให้มี name + version + environment แล้วทั้ง Service, NetworkPolicy, การ query ทุกอย่างจะอิง label ชุดนี้ — ตั้งดีตั้งแต่แรกถูกกว่ามาแก้ทีหลังทั้งระบบ

Label กับ annotation ต่างกันยังไง

Label = สำหรับ "เลือก/จัดกลุ่ม" (selector query ได้ จำกัดรูปแบบ) ส่วน annotation = สำหรับ "แปะข้อมูลประกอบ" (ยาวได้ query ไม่ได้ เช่น commit hash, คำอธิบาย, config ของ tool อื่น) — จำง่ายๆ: อะไรที่ selector ต้องใช้เป็น label ที่เหลือเป็น annotation

อ่านจบแล้วอย่าลืมทำเครื่องหมาย