ประกอบร่างการจัดสรร (+ Lab)
ตั้ง resources + probes แล้วดูพฤติกรรม scheduler
พื้นฐานที่ควรรู้: ในระบบจริง หลายๆ สิ่งจะทำงานร่วมกัน การที่เราเข้าใจว่าตั้ง Resource ให้เหมาะสมยังไง และกำหนดเงื่อนไขการจัดวางบน Node แบบไหน จะช่วยแก้ปัญหาที่มือใหม่เจอบ่อยๆ ได้อย่างมีประสิทธิภาพ
บทนี้รวมทุกอย่างในโมดูล: ตั้ง 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 ถูกย้ายไปที่อื่นให้ครบเสมอ
✅ Scheduler กระจาย 4 Pod ลง node ที่ว่างอย่างสมดุล — ลองกด "ปิด node" ดูว่า Pod ถูกย้ายไปที่อื่นทันที
สรุป Key Takeaways
- Pod Pending = scheduler หา node ที่เหมาะไม่ได้ — อ่าน Events จาก describe
- สาเหตุหลัก: ทรัพยากรไม่พอ / ไม่ตรง affinity / ติด taint
- Cluster Autoscaler/Karpenter เพิ่ม node อัตโนมัติ (ต่างจาก HPA ที่เพิ่ม Pod)
คำถามที่พบบ่อย
Pod ค้าง Pending เพราะ scheduling ไล่ดูยังไง
kubectl describe pod แล้วอ่าน Events ท้ายสุด — ข้อความบอกตรงๆ ว่าติดอะไร: Insufficient cpu/memory (requests สูงเกิน — ลดหรือเพิ่มเครื่อง), didn't match node selector/affinity (label เครื่องไม่ตรง), had untolerated taint (ติด taint) — อ่าน event เป็น = แก้ปัญหา scheduling ได้ทุกเคส
ตั้ง requests เท่าไหร่ดีถ้ายังไม่รู้การใช้จริง
เริ่มจากวัด: รันใน dev แล้วดู kubectl top pods หรือ metrics จริงสักพัก แล้วตั้ง requests ราวค่าใช้เฉลี่ย+เผื่อ ~20-30% — อย่าตั้งเผื่อแบบกลัวๆ ทีละ 4 เท่า เพราะ requests คือการจองที่นับพื้นที่เครื่องจริง ตั้งเว่อร์ = cluster เต็มทั้งที่ CPU ว่าง

