Skip to main content

Kubernetes Scaling Applications

Introduction

Kubernetes Scaling Applications เป็นฟีเจอร์ที่ช่วยให้คุณสามารถปรับขนาดการทำงานของแอปพลิเคชันใน Kubernetes โดยอัตโนมัติหรือด้วยมือ โดยใช้การควบคุมจำนวน Pod ใน Deployment หรือ ReplicaSet การสเกลช่วยให้แอปพลิเคชันสามารถรองรับการโหลดที่เพิ่มขึ้นหรือลดลงได้ตามความต้องการ

Kubernetes รองรับการสเกลทั้งในรูปแบบของ Horizontal Scaling (การเพิ่มหรือลดจำนวน Pod) และ Vertical Scaling (การปรับขนาดของ Pod) เพื่อให้สามารถปรับเปลี่ยนการทำงานของแอปพลิเคชันให้เหมาะสมกับทรัพยากรที่มีอยู่

Key Concepts

  1. Horizontal Pod Autoscaling (HPA):

    • HPA คือฟีเจอร์ที่ช่วยให้ Kubernetes สามารถเพิ่มหรือลดจำนวน Pod โดยอัตโนมัติตามโหลดหรือการใช้งานของแอปพลิเคชัน เช่น การใช้ CPU หรือ Memory ที่ Pod ใช้
    • HPA จะสเกล Pod ขึ้นหรือลงตามการตั้งค่าของคุณ
  2. ReplicaSet:

    • ReplicaSet เป็นทรัพยากรที่ใช้ในการรักษาจำนวน Pod ที่ต้องการในระบบ
    • หากจำนวน Pod ลดลงจากจำนวนที่กำหนด, ReplicaSet จะสร้าง Pod ใหม่ขึ้นมาเพื่อให้จำนวน Pod เป็นไปตามที่กำหนด
  3. Deployment:

    • Deployment ใช้ในการควบคุม ReplicaSet และช่วยให้การปรับขนาดแอปพลิเคชันทำได้ง่ายขึ้น
    • เมื่อปรับขนาด Deployment, จำนวน Pod ที่รองรับแอปพลิเคชันจะถูกปรับอัตโนมัติตามที่กำหนด
  4. Vertical Pod Autoscaling (VPA):

    • VPA ช่วยให้สามารถปรับขนาดของทรัพยากรภายใน Pod (CPU, Memory) ตามความต้องการ
    • ใช้สำหรับปรับขนาดของ Pod ให้เหมาะสมกับการใช้งานทรัพยากรที่ไม่สามารถทำได้ใน Horizontal Scaling

Horizontal Scaling (HPA)

Creating a Horizontal Pod Autoscaler

คุณสามารถสร้าง HPA โดยใช้คำสั่ง kubectl หรือไฟล์ YAML โดยการตั้งค่าข้อกำหนดเช่น CPU หรือ Memory ที่ต้องการให้ Kubernetes สเกล Pod ขึ้นหรือลง

kubectl autoscale deployment myapp --cpu-percent=50 --min=1 --max=10

ในตัวอย่างนี้:

  • cpu-percent=50: กำหนดให้ Kubernetes จะเพิ่มหรือลดจำนวน Pod เมื่อ CPU ใช้งานถึง 50%
  • min=1: จำนวน Pod ขั้นต่ำที่ต้องการ
  • max=10: จำนวน Pod สูงสุดที่สามารถรองรับได้

Example of HPA with YAML

สามารถสร้าง HPA ด้วยไฟล์ YAML ดังนี้:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50

ในตัวอย่างนี้:

  • scaleTargetRef: ระบุชื่อของ Deployment ที่ต้องการสเกล
  • minReplicas: จำนวน Pod ขั้นต่ำ
  • maxReplicas: จำนวน Pod สูงสุด
  • metrics: กำหนดให้การสเกลจะขึ้นอยู่กับการใช้งาน CPU ที่เกิน 50%

Checking the Status of HPA

คุณสามารถตรวจสอบสถานะของ HPA ได้ด้วยคำสั่ง:

kubectl get hpa

Vertical Scaling (VPA)

Creating a Vertical Pod Autoscaler

Vertical Pod Autoscaler (VPA) ช่วยปรับขนาดของทรัพยากรใน Pod โดยอัตโนมัติตามการใช้งาน

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: myapp-vpa
namespace: default
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
updatePolicy:
updateMode: "Auto"

ในตัวอย่างนี้, VPA จะปรับขนาดของ Pod ให้เหมาะสมโดยอัตโนมัติเมื่อมีการใช้งานทรัพยากรเพิ่มขึ้นหรือลดลง

Checking the Status of VPA

หลังจากตั้งค่า VPA แล้ว, คุณสามารถตรวจสอบสถานะได้ด้วยคำสั่ง:

kubectl describe vpa myapp-vpa

Manual Scaling

นอกจากการใช้ HPA และ VPA สำหรับการสเกลแบบอัตโนมัติ, Kubernetes ยังรองรับการสเกลแบบด้วยมือ โดยใช้คำสั่ง kubectl scale เพื่อเพิ่มหรือลดจำนวน Pod ที่อยู่ใน Deployment

Scale Deployment Manually

kubectl scale deployment myapp --replicas=5

คำสั่งนี้จะปรับจำนวน Pod ใน Deployment myapp เป็น 5 Pod

Best Practices for Scaling

  1. Monitoring and Metrics:

    • ควรติดตามการใช้ทรัพยากรอย่างสม่ำเสมอ โดยการใช้เครื่องมือเช่น Prometheus เพื่อเก็บข้อมูลการใช้งานและปรับแต่งการตั้งค่า HPA/VPA ให้เหมาะสม
  2. Set Appropriate Resource Requests and Limits:

    • การตั้งค่า requests และ limits สำหรับ CPU และ Memory ใน Pods ช่วยให้ Kubernetes สามารถจัดสรรทรัพยากรได้อย่างมีประสิทธิภาพ
  3. Test Scaling Policies:

    • ทดสอบนโยบายการสเกลทั้งแบบ Horizontal และ Vertical เพื่อดูว่าการปรับขนาดทำงานได้ดีในสถานการณ์ต่างๆ หรือไม่
  4. Use Resource Quotas:

    • ใช้ Resource Quotas เพื่อตรวจสอบไม่ให้ทรัพยากรถูกใช้อย่างมากเกินไปในแต่ละ Namespace

Conclusion

Kubernetes Scaling Applications ช่วยให้แอปพลิเคชันของคุณสามารถปรับตัวตามโหลดที่เพิ่มขึ้นหรือลดลงได้อย่างยืดหยุ่น ทั้งในรูปแบบของ Horizontal Pod Autoscaling (HPA) และ Vertical Pod Autoscaling (VPA) การใช้เครื่องมือเหล่านี้จะช่วยให้คุณสามารถจัดการทรัพยากรได้อย่างมีประสิทธิภาพและตอบสนองต่อการเปลี่ยนแปลงของการโหลดได้อย่างรวดเร็ว