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: myappBước 3: Áp dụng các file manifest:
            
            
              bash
              
              
              
            
          
          kubectl apply -f . --kubeconfig=./kubernetes-configBước 4: Kiểm tra trạng thái service:
            
            
              bash
              
              
              
            
          
          kubectl get svc --kubeconfig=./kubernetes-configKhi 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 ở đâySau đó á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-configTheo 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 --watchVớ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