HPA — สเกล Pod อัตโนมัติตามโหลด
เพิ่ม/ลดจำนวน Pod เองตาม CPU หรือเมตริก
พื้นฐานที่ควรรู้: ปริมาณผู้ใช้งานเว็บไซต์มักไม่เท่ากันตลอดทั้งวัน หากตั้งเครื่องเซิร์ฟเวอร์ไว้เยอะตลอดเวลาก็จะเปลืองเงิน แต่ถ้ามีน้อยไปเว็บก็จะล่มเมื่อคนเข้าเยอะ การทำ Auto-scaling คือการปรับจำนวนเครื่องตามการใช้งานจริงโดยอัตโนมัติ
HPA เหมือนผู้จัดการร้านที่จ้องกล้องวงจรปิด — ลูกค้าเยอะขึ้นก็เรียกพนักงานเพิ่ม (scale out) พอคนบางลงก็ให้กลับบ้าน (scale in) โดยอัตโนมัติ ไม่ต้องมีคนคอยสั่ง
จากบท Workloads เราสเกลด้วยมือ (kubectl scale) · HorizontalPodAutoscaler (HPA) ทำให้อัตโนมัติ: เฝ้าดูเมตริก (เช่น CPU เฉลี่ย) แล้วปรับ replicas ของ Deployment ให้อยู่ในช่วง min–max ที่ตั้งไว้
HPA อ่านเมตริก → เทียบเป้า → ปรับ replicas
โหลดขึ้น → เพิ่ม Pod · โหลดลง → ลด Pod (ในช่วง min–max)
kubectl autoscale deployment/web \
--cpu-percent=50 --min=2 --max=10
kubectl get hpa # ดู TARGETS (ปัจจุบัน/เป้า) และ REPLICASkubectl get hpa
kubectl describe hpa <hpa-name>สรุป Key Takeaways
- HPA = สเกลจำนวน Pod อัตโนมัติตามเมตริก (เช่น CPU) ในช่วง min–max
- ต้องมี metrics-server + ตั้ง resources.requests ไม่งั้นคำนวณ % ไม่ได้
- HPA(Pod แนวนอน) / VPA(ขนาด Pod) / Cluster Autoscaler(จำนวน node) คนละชั้น
คำถามที่พบบ่อย
HPA ต้องมีอะไรก่อนถึงทำงานได้
สองเงื่อนไขที่มือใหม่พลาด: (1) ต้องติดตั้ง metrics-server ใน cluster (kind/minikube ไม่มีมาให้) (2) pod ต้องตั้ง resource requests เพราะ HPA คิดเปอร์เซ็นต์จาก requests — ถ้า HPA ขึ้น <unknown> ให้เช็คสองข้อนี้ก่อนเลย
HPA กับ VPA กับ Cluster Autoscaler ต่างกันยังไง
สามแกน: HPA = เพิ่ม "จำนวน pod" ตามโหลด · VPA = ปรับ "ขนาด (requests)" ของ pod ให้พอดี · Cluster Autoscaler/Karpenter = เพิ่ม "จำนวนเครื่อง" เมื่อ pod ไม่มีที่ลง — ใช้ร่วมกันได้โดย HPA ขยาย pod แล้ว CA ขยายเครื่องรองรับ (แต่อย่าให้ HPA กับ VPA คุม metric เดียวกันพร้อมกัน)

