ยินดีต้อนรับสู่ วันที่ 3: การจัดการ Namespaces และการแยกขอบเขตทรัพยากร (Resource Scoping)!
สำหรับวันนี้ เราจะมาเรียนรู้วิธีการจัดกลุ่มและแบ่งแยกขอบเขตทรัพยากรใน Kubernetes ด้วย Namespaces รวมถึงการใช้ตัวกรองขอบเขตทรัพยากรบน Headlamp UI เพื่อจัดการคลัสเตอร์หลายทีมได้อย่างเป็นระเบียบ
ช่วงที่ 1: สรุปแนวคิดสถาปัตยกรรม
เข้าใจบทบาทของ Logical Partitioning และการทำงานของแถบ Namespace Scoping บนหน้าจอ Headlamp
ช่วงที่ 2: การลงมือปฏิบัติจริง (5 ขั้นตอน)
สร้าง Namespace แยกทีม ปรับใช้แอปชื่อเดียวกันแต่คนละเนมสเปซ สลับ Filter บน UI และเทียบผลลัพธ์กับ CLI
สรุปแนวคิดและสถาปัตยกรรม (5–10 นาที)
Namespaces: Logical Partitioning
Namespaces เป็นการแบ่งคลัสเตอร์ออกเป็นสัดส่วนทางตรรกะ เพื่อแยกสภาพแวดล้อมออกจากกัน เช่น dev-team, staging-team หรือ production ทำให้เราสามารถตั้งชื่อ Workload ซ้ำกันได้ (เช่น app-v1) โดยไม่เกิดการชนกัน
Namespace Scoping บน Headlamp UI
Headlamp มีแถบ Namespace Selector อยู่บริเวณแถบด้านบนของหน้าจอ ช่วยให้เรากรองดูเฉพาะทรัพยากรในเนมสเปซที่ต้องการทำงานด้วย หรือเลือกดูภาพรวมทั้งหมดผ่านมุมมอง All Namespaces ได้ในคลิกเดียวโดยไม่ต้องพิมพ์คำสั่งยาวๆ
ขั้นตอนลงมือปฏิบัติจริง (15–20 นาที)
เปิด Terminal แล้วสร้าง Namespace ใหม่ 2 ตัวเพื่อจำลองการแยกทีมพัฒนาและทดสอบระบบ:
kubectl create namespace dev-team
kubectl create namespace staging-team
namespace/dev-team created และ namespace/staging-team created
สร้าง Deployment โดยตั้งชื่อแอปพลิเคชันเป็น app-v1 เหมือนกันทั้งคู่ แต่ส่งไปรันคนละ Namespace ด้วยพารามิเตอร์ -n:
kubectl create deployment app-v1 --image=redis:alpine -n dev-team
kubectl create deployment app-v1 --image=memcached:alpine -n staging-team
app-v1 ซ้ำกันได้โดยไม่ขัดแย้งกัน เพราะถูกกักเขตด้วย Namespace คนละตัว
เปิดหน้าต่าง Headlamp ขึ้นมาเพื่อทดลองใช้แถบตัวกรองเนมสเปซแบบ Graphic:
- เปิด Headlamp UI ขึ้นมา (ผ่าน http://localhost:8080 หรือเปิดแอป Headlamp Desktop)
- สังเกตแถบ Namespace Selector (ดรอปดาวน์เลือกเนมสเปซ) ที่บริเวณแถบเมนูด้านบน
- คลิกเปิดดรอปดาวน์แล้วเลือกเฉพาะ dev-team
dev-team เท่านั้น
สำรวจดูว่าตัวกรองของ Headlamp คัดแยกเวิร์กโหลดออกจากกันอย่างถูกต้องหรือไม่:
- ไปที่เมนูด้านซ้าย เลือก Workloads > Deployments หรือ Pods
- ตรวจสอบว่าในรายการแสดงเฉพาะเวิร์กโหลดของ Redis (dev-team) และ ไม่แสดง Memcached ของ staging-team
- ลองคลิกดรอปดาวน์ด้านบนเพื่อสลับตัวกรองไปที่ staging-team
- สังเกตว่าตารางจะรีเฟรชเปลี่ยนมาแสดงเฉพาะเวิร์กโหลดของ Memcached ทันที
สลับตัวกรองใน Headlamp ไปที่ All Namespaces แล้วเปรียบเทียบกับคำสั่งรันดู Pods ทั้งหมดใน Cluster ผ่าน Terminal:
kubectl get pods -A
คุณจะเห็นรายชื่อ Pods จากทุก Namespace ในคลัสเตอร์พร้อมๆ กัน รวมถึง kube-system, headlamp, dev-team, และ staging-team ซึ่งสอดคล้องกับมุมมองแบบ All Namespaces ในหน้าต่าง Headlamp พอดี
ลองสร้าง Namespaces และทดสอบสลับตัวกรองบน Headlamp UI ดูนะครับ หากเรียบร้อยแล้วแจ้งได้เลยครับว่าระบบแยกแอปพลิเคชันทั้งสองทีมถูกต้องหรือไม่ เพื่อไปต่อใน วันที่ 4: การจัดการ Manifests แบบ Declarative YAML และการใช้ Headlamp Inline Editor!