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

Namespaces — แบ่งคลัสเตอร์เป็นห้อง ๆ

จัดกลุ่มทรัพยากร แยกทีม/สภาพแวดล้อม และจำกัดโควตา

พื้นฐานที่ควรรู้: คลัสเตอร์ Kubernetes หนึ่งคลัสเตอร์สามารถมีแอปพลิเคชันทำงานอยู่หลายร้อยตัว ถ้ากองรวมกันหมดจะจัดการยาก เราจึงต้องมีการจัดกลุ่มหรือแบ่งโซน เพื่อแยกแอปของทีมต่างๆ หรือแยกสภาพแวดล้อม (เช่น Dev กับ Prod) ออกจากกัน

การกั้นห้องในออฟฟิศ

Namespace เหมือนการกั้นห้องในออฟฟิศเปิดโล่ง — ทีม A ทีม B อยู่คนละห้อง ตั้งชื่อของซ้ำกันได้ (เช่นมี Service ชื่อ web ได้ทั้งสองห้อง) และคุมงบ/สิทธิ์แยกห้องได้

Namespace คือการแบ่งคลัสเตอร์เดียวเป็นพื้นที่เสมือนหลายส่วน · ใช้แยก environment (dev/staging/prod), แยกทีม, หรือแยกลูกค้า พร้อมกำหนดโควตาและสิทธิ์ต่อ namespace

คลัสเตอร์เดียว แบ่งเป็นหลายห้อง (namespace)

ns: dev
web
api
ns: staging
web
api
ns: prod
web
api

ชื่อ web/api ซ้ำข้ามห้องได้ · คุมงบ/สิทธิ์แยกแต่ละห้อง

คลัสเตอร์เดียวแบ่งเป็นหลาย namespace · ชื่อ resource ซ้ำข้าม namespace ได้ · ResourceQuota คุมงบต่อห้อง
kubectl create namespace staging
kubectl get pods -n staging          # ดู Pod ใน namespace staging
kubectl get pods -A                  # ทุก namespace
kubectl config set-context --current --namespace=staging  # ตั้งค่าเริ่มต้น
ทำงานกับ namespace

สรุป 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

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