容器服務ACK支持在控制臺界面上快速創建支持HPA的應用,實現容器資源的彈性伸縮。您也可通過定義HPA(Horizontal Pod Autoscaling)的YAML來進行配置。
前提條件
通過容器服務控制臺創建HPA應用
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在無狀態頁面單擊使用鏡像創建。
在應用基本信息頁填寫應用的名稱等信息,然后單擊下一步。
配置項
描述
命名空間
在頁面頂部設置應用部署所處的命名空間,默認使用default命名空間。
應用名稱
設置應用的名稱。
副本數量
即應用包含的Pod數量,默認數量為2。
類型
定義資源對象的類型,可選擇無狀態、有狀態、任務、定時任務、守護進程集。
標簽
為該應用添加一個標簽,標識該應用。
注解
為該應用添加一個注解(annotation)。
時區同步
僅ACK集群支持配置此參數,ACK Serverless集群不支持。表示容器與節點是否使用相同的時區。
在容器配置頁進行容器設置,選擇鏡像,并設置所需的資源。然后單擊下一步。詳情請參見配置容器。
說明您必須為Deployment設置所需資源,否則無法進行容器自動伸縮。
在高級設置頁的訪問設置區域,單擊服務的創建,設置服務的相關信息,詳情請參見高級設置。
在高級設置頁選中指標伸縮的開啟,設置伸縮的條件和配置。
指標:支持CPU和內存,需要和設置的所需資源類型相同。
觸發條件:資源使用率的百分比,超過該使用量,容器開始擴容。有關Pod水平自動擴縮的算法,請參見算法細節。
最大副本數:該Deployment可擴容的容器數量上限。
最小副本數:該Deployment可縮容的容器數量下限。
單擊右下角的創建,一個支持HPA的Deployment就已經創建完畢。
結果驗證
單擊查看應用詳情或者在
中單擊應用名稱或操作列的詳情,單擊容器伸縮,您可在部署的詳情中查看伸縮組信息。在實際使用環境中,應用會根據CPU負載進行伸縮。您也可在測試環境中驗證彈性伸縮,通過給Pod進行CPU壓測,可以發現Pod在半分鐘內即可完成水平的擴展。
通過kubectl命令創建HPA應用
您也可通過編排模板來手動創建HPA,并將其綁定到要伸縮的Deployment對象上,通過kubectl命令實現容器自動伸縮配置。
下面針對一個Nginx應用進行舉例。
創建并復制以下內容到nginx.yml中。
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: nginx:1.7.9 # replace it with your exactly <image_name:tags> ports: - containerPort: 80 resources: requests: ##必須設置,不然HPA無法運行。 cpu: 500m
執行以下命令,創建Nginx應用。
kubectl create -f nginx.yml
創建HPA。
通過scaleTargetRef設置當前HPA綁定的對象,在本例中綁定名叫nginx的Deployment。
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
說明HPA需要給Pod設置request資源,如果沒有request資源,HPA不會運行。
執行
kubectl describe hpa <HPA的名稱>
會發現有類似以下的警告信息。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 <HPA的名稱>
命令。可以看到以下信息,則表示HPA已經正常運行。
Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
此時當Nginx的Pod的利用率超過本例中設置的50%利用率時,則會進行水平擴容,低于50%的時候會進行縮容。