Giới Thiệu
Chào các bạn, mình lại trở lại với series Kubernetes. Trong bài viết này, chúng ta sẽ khám phá cách cấu hình Horizontal Pod Autoscaling (HPA) trong K8S để tự động mở rộng ứng dụng và cải thiện khả năng chịu tải.
Mục Tiêu
Chúng ta sẽ triển khai một ứng dụng tính số Fibonacci và thực hiện một bài kiểm tra fake DDoS lên server. Nhờ có HPA, chúng ta có thể tự động mở rộng số lượng Pod khi lượng truy cập tăng cao, từ đó giữ cho ứng dụng hoạt động mượt mà.
Cấu Hình Môi Trường
Trước tiên, bạn cần truy cập vào cluster K8S của mình thông qua đường link sau: learnk8s.jamesisme.com.
Triển Khai Ứng Dụng
Bước 1: Tạo folder chứa mã nguồn và tạo file deployment.yml
với nội dung như sau:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app.kubernetes.io/name: viblo-k8s-hpa
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: maitrungduc1410/viblo-k8s-hpa:latest
ports:
- containerPort: 3000
name: pod-http
resources:
requests:
memory: "128Mi"
cpu: "64m"
limits:
memory: "512Mi"
cpu: "250m"
Bước 2: Tiếp theo, tạo file svc.yml
:
yaml
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
type: LoadBalancer
ports:
- name: svc-http
protocol: TCP
port: 80
targetPort: pod-http
selector:
app: myapp
Bước 3: Áp dụng các file manifest:
bash
kubectl apply -f . --kubeconfig=./kubernetes-config
Bước 4: Kiểm tra trạng thái service:
bash
kubectl get svc --kubeconfig=./kubernetes-config
Khi bạn thấy EXTERNAL-IP
đã sẵn sàng, bạn có thể mở trình duyệt và truy cập vào địa chỉ IP đó.
Kiểm Tra Tải Lượng
Sau khi triển khai, để tạo tải lượng lên server, chúng ta sẽ chạy một script fake DDoS:
bash
docker run -it --rm --name load-generator busybox:1.28 sh -c "while sleep 0.01; do wget -q -O- http://<EXTERNAL-IP>/api/hello?iterations=3000; done"
Scale Thủ Công Để Cứu Ứng Dụng
Khi ứng dụng bắt đầu gặp khó khăn với tải lượng cao, bạn có thể tăng số lượng replicas từ 1 lên 2 hoặc nhiều hơn trong file deployment.yml
như sau:
yaml
spec:
replicas: 2 # ---> sửa ở đây
Sau đó áp dụng lại file manifest như trước để giúp ứng dụng chịu tải tốt hơn.
Tự Động Scale Với HPA
HPA tự động điều chỉnh số lượng Pod dựa trên chỉ số CPU/RAM. Để cấu hình HPA, hãy tạo file hpa.yml
. Mẫu nội dung như sau:
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 6
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Áp dụng HPA:
bash
kubectl apply -f hpa.yml --kubeconfig=./kubernetes-config
Theo Dõi HPA
Bạn có thể theo dõi sự thay đổi của HPA và kiểm tra hiệu suất của ứng dụng qua lệnh:
bash
kubectl get hpa --kubeconfig=./kubernetes-config --watch
Với những bước này, bạn sẽ thấu hiểu rõ hơn về cách HPA hoạt động và làm tăng khả năng chịu tải của ứng dụng Kubernetes. Cảm ơn bạn đã theo dõi bài viết và hẹn gặp lại trong những bài viết tiếp theo!
source: viblo