溫馨提示×

centos k8s自動擴縮容方法

小樊
43
2025-10-11 09:24:30
欄目: 智能運維

一、前提條件:安裝Metrics Server
HPA(Horizontal Pod Autoscaler)依賴Metrics Server收集Pod的CPU、內存等資源使用數據。在CentOS上安裝Metrics Server的步驟如下:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

安裝后檢查Metrics Server狀態,確保其正常運行:

kubectl get pods -n kube-system | grep metrics-server

若未正常運行,可刪除對應Pod觸發重啟:

kubectl delete pod -n kube-system <metrics-server-pod-name>

二、配置HPA(Horizontal Pod Autoscaler)
HPA是Kubernetes實現Pod水平自動擴縮容的核心資源,以下是詳細配置步驟:

1. 創建帶資源限制的Deployment

HPA需根據Pod的資源請求(requests)計算利用率,因此必須在Deployment中定義容器的resources.requestsresources.limits。示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1  # 初始副本數,HPA會動態調整
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: nginx:latest
          ports:
            - containerPort: 80
          resources:
            requests:  # 調度依據,必須設置
              cpu: "100m"  # 0.1核
              memory: "64Mi"
            limits:  # 資源上限,防止Pod被OOM Kill
              cpu: "200m"  # 0.2核
              memory: "128Mi"

將上述內容保存為deployment.yaml,應用到集群:

kubectl apply -f deployment.yaml

2. 創建HPA資源

通過HPA配置自動擴縮容規則,以下是一個基于CPU利用率的示例(支持v2beta2及以上API版本):

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
spec:
  scaleTargetRef:  # 指定擴縮容目標(Deployment/ReplicaSet/StatefulSet)
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 1  # 最小副本數(避免縮容至0)
  maxReplicas: 10 # 最大副本數(集群資源上限)
  metrics:
    - type: Resource  # 資源指標(支持CPU、內存)
      resource:
        name: cpu     # 指標名稱(CPU/memory)
        target:
          type: Utilization  # 目標類型(Utilization/AverageValue)
          averageUtilization: 50  # 目標利用率(如50%)

將上述內容保存為hpa.yaml,應用到集群:

kubectl apply -f hpa.yaml

說明

  • scaleTargetRef:指定要擴縮容的對象(如Deployment),需與已有資源名稱一致;
  • minReplicas/maxReplicas:限制Pod數量范圍,避免過度擴縮容;
  • metrics:可配置多個指標(如CPU+內存),支持Utilization(利用率)或AverageValue(絕對值)。

3. 驗證HPA狀態

使用以下命令查看HPA的當前狀態(包括副本數、目標利用率、當前利用率):

kubectl get hpa

輸出示例:

NAME    REFERENCE           TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
my-hpa  Deployment/my-app   30%/50%       1         10        1          2m
  • TARGETS:顯示當前利用率/目標利用率(如30%表示當前CPU利用率為30%,目標為50%);
  • REPLICAS:當前Pod副本數。

查看詳細信息(包括擴縮容決策記錄):

kubectl describe hpa my-hpa

三、測試自動擴縮容
通過模擬負載觸發HPA自動調整Pod數量,常用工具如hey(快速HTTP壓測工具):

# 安裝hey(若未安裝)
wget https://github.com/rakyll/hey/releases/download/v0.0.0/hey_linux_amd64 -O hey
chmod +x hey
mv hey /usr/local/bin/

# 發起壓測(向my-app發送10個并發請求,持續30秒)
hey -c 10 -z 30s http://<my-app-service-ip>

隨著負載增加,HPA會根據CPU利用率自動增加Pod副本數(不超過maxReplicas);負載降低時,自動減少副本數(不低于minReplicas)。

四、可選:基于自定義指標的自動擴縮容
若需根據非資源指標(如QPS、隊列長度)擴縮容,需安裝Custom Metrics Adapter(如Prometheus Adapter),并配置HPA使用自定義指標。示例如下:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa-custom
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 1
  maxReplicas: 20
  metrics:
    - type: External  # 自定義指標
      external:
        metric:
          name: requests_per_second  # 自定義指標名稱(需與Prometheus Adapter配置一致)
        target:
          type: Value
          value: "100"  # 目標值(每秒100個請求)

需提前部署Prometheus Adapter并將自定義指標暴露給Kubernetes集群。

五、注意事項

  1. 資源請求必須設置:HPA依賴resources.requests計算利用率,未設置則無法正常工作;
  2. 避免頻繁擴縮容:設置合理的targetUtilization(如50%-80%),避免因閾值過低導致頻繁擴縮容(可能影響應用穩定性);
  3. 監控HPA行為:通過kubectl get hpa -w實時監控HPA狀態,或結合Prometheus+Granafa實現可視化;
  4. 集群資源充足:確保集群有足夠的節點資源容納最大副本數(maxReplicas),否則可能導致Pod處于Pending狀態。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女