阿里雲Container Service支援在控制台介面上快速建立支援HPA的應用,實現容器資源的Auto Scaling。您也可通過定義HPA(Horizontal Pod Autoscaling)的yaml配置來進行配置。

前提條件

  • 您已成功建立一個Kubernetes叢集,參見建立Kubernetes叢集
  • 您已成功串連到Kubernetes叢集的Master節點。

方法1 通過Container Service控制台建立HPA應用

在阿里雲Container Service中,已經整合了HPA,開發人員可以非常簡單地通過Container Service控制台進行建立。

  1. 登入 Container Service管理主控台
  2. 在Kubernetes菜單下,單擊左側導覽列中的應用 > 部署,單擊右上方的使用鏡像建立


  3. 填寫應用的名稱,設定應用部署叢集和命名空間,單擊下一步
  4. 首先進行應用設定,設定副本數量,然後勾選開啟自動調整,設定伸縮的條件和配置。
    • 指標:支援CPU和記憶體,需要和設定的所需資源類型相同。
    • 觸發條件:資源使用率的百分比,超過該使用量,容器開始擴容。
    • 最大容器數量:該Deployment可擴容的容器數量上限。
    • 最小容器數量:該Deployment可縮容的容器數量下限。


  5. 進行容器設定,選擇鏡像,並設定所需的資源。然後單擊下一步
    说明 您必須為Deployment設定所需資源,否則無法進行容器自動調整。


  6. 進入訪問設定頁面,本例中不進行訪問設定,單擊建立

    此時一個支援HPA的Deployment就已經建立完畢,您可在部署的詳情中查看伸縮組資訊。



  7. 在實際使用環境中,應用會根據CPU負載進行伸縮。您也可在測試環境中驗證Auto Scaling,通過給Pod進行CPU壓測,可以發現Pod在半分鐘內即可完成水平的擴充。


方法2 通過kubectl命令進行使用

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

下面針對一個Nginx應用進行舉例,Deployment的編排模板如下,執行kubectl create -f xxx.yml命令進行建立。

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
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: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80
        resources:
          requests:                         ##必須設定,不然HPA無法運行
            cpu: 500m

然後建立HPA,通過scaleTargetRef設定當前HPA綁定的對象,在本例中綁定是名叫nginx的Deployment。

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:                             ##綁定名為nginx的Deployment
    apiVersion: apps/v1beta2
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
说明 HPA需要給Pod設定request資源,如果沒有request資源,HPA不會運行。
執行 kubectl describe hpa [name]會發現有類似如下的warnning。
Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

建立好HPA後,再次執行kubectl describe hpa [name]命令,可以看到如下資訊,則表示HPA已經正常運行。

Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target

此時當Nginx的Pod的利用率超過本例中設定的50%利用率時,則會進行水平擴容,低於50%的時候會進行縮容。