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 ที่ตรงกัน
Pod #3 ติดป้าย app=api จึงไม่ถูก selector app=web เลือก
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 เพิ่มสรุป 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

