全部產品
Search
文件中心

Container Compute Service:容器水平伸縮(HPA)

更新時間:Dec 11, 2024

阿里雲容器計算服務ACS支援通過控制台介面和kubectl的方式快速建立支援HPA(Horizontal Pod Autoscaling)的應用,實現容器資源的Auto Scaling。本文介紹如何在ACS叢集中建立支援HPA的應用並驗證HPA的伸縮效果。

前提條件

建立HPA應用

通過控制台建立

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集

  2. 叢集頁面,單擊目的地組群ID,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面,單擊使用鏡像建立

  4. 應用基本資料頁填寫應用的名稱等資訊,然後單擊下一步

    配置項

    描述

    命名空間

    在頁面頂部設定應用部署所處的命名空間,預設使用default命名空間。

    應用程式名稱

    設定應用的名稱。

    副本數量

    即應用程式套件含的Pod數量,預設數量為2。

    工作負載

    定義資來源物件的類型,可選擇無狀態有狀態任務定時任務

    標籤

    為該應用添加一個標籤,標識該應用。

    註解

    為該應用添加一個註解(Annotation)。

    執行個體類型

    Pod的執行個體類型,可選擇通用型BestEffort效能型

  5. 容器配置頁進行容器設定,選擇鏡像,並設定所需的資源。然後單擊下一步。詳情請參見容器配置

    說明

    您必須為Deployment設定所需資源,否則無法進行容器自動調整。

  6. 進階設定頁的訪問設定地區,單擊服務的建立,設定服務的相關資訊,詳情請參見進階配置

  7. 進階設定頁選中指標伸縮開啟,設定伸縮的條件和配置。

    • 指標:支援CPU和記憶體,需要和設定的所需資源類型相同。

    • 觸發條件:資源使用率的百分比,超過該使用量,容器開始擴容。有關Pod水平自動擴縮的演算法,請參見演算法細節

    • 最大副本數:該Deployment可擴容的容器數量上限。

    • 最小副本數:該Deployment可縮容的容器數量下限。

  8. 單擊右下角的建立,一個支援HPA的Deployment就已經建立完畢。

通過kubectl命令建立

您也可通過編排模板來手動建立HPA,並將其綁定到要伸縮的Deployment對象上,通過kubectl命令實現容器自動調整配置。

下面針對一個Nginx應用進行舉例。

  1. 建立並複製以下內容到nginx.yaml中。

    Deployment的編排模板如下。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx  
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/nginx:1.7.9 # replace it with your exactly <image_name:tags>
            ports:
            - containerPort: 80
            resources:
              requests:                         ##必須設定,不然HPA無法運行。
                cpu: 500m
  2. 執行以下命令,建立Nginx應用。

    kubectl apply -f nginx.yaml
  3. 建立並複製以下內容到hpa.yaml中,用於建立HPA。

    通過scaleTargetRef設定當前HPA綁定的對象,在本例中綁定名為nginx的Deployment。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # Deployment可縮容的容器數量下限,需設定為大於等於1的整數。
      maxReplicas: 10 # 該Deployment可擴容的容器數量上限,需大於minReplicas。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # 目標資源的平均使用率,即資源使用量的平均值與其請求量之間的比例。
                   
  4. 執行以下命令,建立HPA。

    kubectl apply -f hpa.yaml
  5. 等待HPA建立後,再次執行kubectl describe hpa <HPA的名稱>命令。

    可以看到以下資訊,則表示HPA已經正常運行。

     Type    Reason             Age    From                       Message
      ----    ------             ----   ----                       -------
      Normal  SuccessfulRescale  4m53s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

相關文檔

容器定時伸縮請參見容器定時伸縮(CronHPA)