Namespaces — แบ่งคลัสเตอร์เป็นห้อง ๆ
จัดกลุ่มทรัพยากร แยกทีม/สภาพแวดล้อม และจำกัดโควตา
พื้นฐานที่ควรรู้: คลัสเตอร์ Kubernetes หนึ่งคลัสเตอร์สามารถมีแอปพลิเคชันทำงานอยู่หลายร้อยตัว ถ้ากองรวมกันหมดจะจัดการยาก เราจึงต้องมีการจัดกลุ่มหรือแบ่งโซน เพื่อแยกแอปของทีมต่างๆ หรือแยกสภาพแวดล้อม (เช่น Dev กับ Prod) ออกจากกัน
Namespace เหมือนการกั้นห้องในออฟฟิศเปิดโล่ง — ทีม A ทีม B อยู่คนละห้อง ตั้งชื่อของซ้ำกันได้ (เช่นมี Service ชื่อ web ได้ทั้งสองห้อง) และคุมงบ/สิทธิ์แยกห้องได้
Namespace คือการแบ่งคลัสเตอร์เดียวเป็นพื้นที่เสมือนหลายส่วน · ใช้แยก environment (dev/staging/prod), แยกทีม, หรือแยกลูกค้า พร้อมกำหนดโควตาและสิทธิ์ต่อ namespace
คลัสเตอร์เดียว แบ่งเป็นหลายห้อง (namespace)
ชื่อ web/api ซ้ำข้ามห้องได้ · คุมงบ/สิทธิ์แยกแต่ละห้อง
kubectl create namespace staging
kubectl get pods -n staging # ดู Pod ใน namespace staging
kubectl get pods -A # ทุก namespace
kubectl config set-context --current --namespace=staging # ตั้งค่าเริ่มต้นสรุป Key Takeaways
- Namespace = แบ่งคลัสเตอร์เดียวเป็นพื้นที่เสมือน (แยกทีม/env/ลูกค้า)
- ชื่อ resource ซ้ำข้าม namespace ได้ · เรียกข้าม namespace ต้องเติม .<ns>
- คุมงบด้วย ResourceQuota และตั้ง default ด้วย LimitRange
คำถามที่พบบ่อย
ควรแบ่ง namespace ตามอะไร
แนวที่ใช้กันจริง: แบ่งตามทีมหรือตามแอป/service group และแยก environment ด้วย namespace (dev/staging) ได้ใน cluster ทดลอง — แต่ production ควรแยก "cluster" ไปเลยเพื่อ isolation จริง — namespace ให้การแบ่งเชิง logical ไม่ใช่กำแพงความปลอดภัยสมบูรณ์
Namespace แยกอะไรให้บ้าง ไม่แยกอะไร
แยก: ชื่อ resource, RBAC scope, ResourceQuota/LimitRange — ไม่แยก: เครือข่าย! pod ข้าม namespace คุยกันได้อิสระโดย default ถ้าต้องการกั้นจริงต้องเขียน NetworkPolicy — จุดนี้คือความเข้าใจผิดอันดับหนึ่งเรื่อง namespace

