ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~14 นาที

ประกอบร่างการจัดสรร (+ Lab)

ตั้ง resources + probes แล้วดูพฤติกรรม scheduler

เปรียบเทียบให้เห็นภาพ

บทนี้รวมทุกอย่างในโมดูล: ตั้ง request/limit ให้พอดี, ใส่ probe ให้ K8s รู้สุขภาพ, และเข้าใจว่าทำไม Pod บางตัวขึ้นสถานะ Pending

🧪 Lab: ทำไม Pod ขึ้น Pending

# ตั้ง requests.memory สูงเวอร์ (เช่น 100Gi) ใน Deployment แล้ว apply
kubectl apply -f big-request.yaml

kubectl get pods            # จะเห็นสถานะ Pending
kubectl describe pod <ชื่อ> # ดู Events ท้าย ๆ: "Insufficient memory"
จงใจขอทรัพยากรเกินที่มี แล้วดูผล

K8s Scheduler & Self-Healing

ตั้งจำนวน Pod ที่อยากได้ (desired) แล้วดู Scheduler วางลง node ที่ว่าง · ลองปิด node เพื่อดู Pod ถูกย้ายไปที่อื่นให้ครบเสมอ

Desired replicas:
4
(แต่ละ node รับได้ 4 Pod)
node-1
Pod
Pod
Pod
Pod
node-2
Pod
Pod
Pod
Pod
node-3
Pod
Pod
Pod
Pod
4
Desired
4
Running
0
Pending

✅ Scheduler กระจาย 4 Pod ลง node ที่ว่างอย่างสมดุล — ลองกด "ปิด node" ดูว่า Pod ถูกย้ายไปที่อื่นทันที

ทบทวนด้วย simulation: เพิ่ม desired เกินความจุ node จะเห็น Pod ค้างสถานะ Pending (เหมือน Insufficient resources จริง)

สรุป Key Takeaways

  • Pod Pending = scheduler หา node ที่เหมาะไม่ได้ — อ่าน Events จาก describe
  • สาเหตุหลัก: ทรัพยากรไม่พอ / ไม่ตรง affinity / ติด taint
  • Cluster Autoscaler/Karpenter เพิ่ม node อัตโนมัติ (ต่างจาก HPA ที่เพิ่ม Pod)
อ่านจบแล้วอย่าลืมทำเครื่องหมาย