Kubernetes Scaling Applications
Introduction
Kubernetes Scaling Applications เป็นฟีเจอร์ที่ช่วยให้คุณสามารถปรับขนาดการทำงานของแอปพลิเคชันใน Kubernetes โดยอัตโนมัติหรือด้วยมือ โดยใช้การควบคุมจำนวน Pod ใน Deployment หรือ ReplicaSet การสเกลช่วยให้แอปพลิเคชันสามารถรองรับการโหลดที่เพิ่มขึ้นหรือลดลงได้ตามความต้องการ
Kubernetes รองรับการสเกลทั้งในรูปแบบของ Horizontal Scaling (การเพิ่มหรือลดจำนวน Pod) และ Vertical Scaling (การปรับขนาดของ Pod) เพื่อให้สามารถปรับเปลี่ยนการทำงานของแอปพลิเคชันให้เหมาะสมกับทรัพยากรที่มีอยู่
Key Concepts
-
Horizontal Pod Autoscaling (HPA):
- HPA คือฟีเจอร์ที่ช่วยให้ Kubernetes สามารถเพิ่มหรือลดจำนวน Pod โดยอัตโนมัติตามโหลดหรือการใช้งานของแอปพลิเคชัน เช่น การใช้ CPU หรือ Memory ที่ Pod ใช้
- HPA จะสเกล Pod ขึ้นหรือลงตามการตั้งค่าของคุณ
-
ReplicaSet:
- ReplicaSet เป็นทรัพยากรที่ใช้ในการรักษาจำนวน Pod ที่ต้องการในระบบ
- หากจำนวน Pod ลดลงจากจำนวนที่กำหนด, ReplicaSet จะสร้าง Pod ใหม่ขึ้นมาเพื่อให้จำนวน Pod เป็นไปตามที่กำหนด
-
Deployment:
- Deployment ใช้ในการควบคุม ReplicaSet และช่วยให้การปรับขนาดแอปพลิเคชันทำได้ง่ายขึ้น
- เมื่อปรับขนาด Deployment, จำนวน Pod ที่รองรับแอปพลิเคชันจะถูกปรับอัตโนมัติตามที่กำหนด
-
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
-
Monitoring and Metrics:
- ควรติดตามการใช้ทรัพยากรอย่างสม่ำเสมอ โดยการใช้เครื่องมือเช่น Prometheus เพื่อเก็บข้อมูลการใช้งานและปรับแต่งการตั้งค่า HPA/VPA ให้เหมาะสม
-
Set Appropriate Resource Requests and Limits:
- การตั้งค่า
requestsและlimitsสำหรับ CPU และ Memory ใน Pods ช่วยให้ Kubernetes สามารถจัดสรรทรัพยากรได้อย่างมีประสิทธิภาพ
- การตั้งค่า
-
Test Scaling Policies:
- ทดสอบนโยบายการสเกลทั้งแบบ Horizontal และ Vertical เพื่อดูว่าการปรับขนาดทำงานได้ดีในสถานการณ์ต่างๆ หรือไม่
-
Use Resource Quotas:
- ใช้ Resource Quotas เพื่อตรวจสอบไม่ให้ทรัพยากรถูกใช้อย่างมากเกินไปในแต่ละ Namespace
Conclusion
Kubernetes Scaling Applications ช่วยให้แอปพลิเคชันของคุณสามารถปรับตัวตามโหลดที่เพิ่มขึ้นหรือลดลงได้อย่างยืดหยุ่น ทั้งในรูปแบบของ Horizontal Pod Autoscaling (HPA) และ Vertical Pod Autoscaling (VPA) การใช้เครื่องมือเหล่านี้จะช่วยให้คุณสามารถจัดการทรัพยากรได้อย่างมีประสิทธิภาพและตอบสนองต่อการเปลี่ยนแปลงของการโหลดได้อย่างรวดเร็ว