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

ประกอบร่างการจัดสรร (+ 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 ถูกย้ายไปที่อื่นให้ครบเสมอ

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)

คำถามที่พบบ่อย

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 ว่าง

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