容器水平伸縮
容器云服務引擎CCSE支持在控制臺界面上快速創建支持HPA的應用,實現容器資源的彈性伸縮。您也可通過定義HPA(Horizontal Pod Autoscaling)的YAML來進行配置。
背景信息
從v1.18開始,K8s v2beta2 API允許通過HPA的behavior字段配置擴縮行為。 在behavior字段中的scaleUp和scaleDown分別指定擴容和縮容行為。當您在使用HPA時,希望只進行擴容或者只進行縮容的Pod伸縮,則可以通過開啟指標伸縮,單擊禁止縮容或者禁止擴容來實現。默認值:均不禁止。禁止擴容:selectPolicy的值Disabled會關閉給定方向的擴容。因此使用以下策略,將會阻止擴容。
| behavior: scaleUp: selectPolicy:Disabled |
|---|
禁用縮容:selectPolicy的值Disabled會關閉給定方向的縮容。因此使用以下策略,將會阻止縮容。
| behavior: scaleDown: selectPolicy:Disabled |
|---|
通過容器服務控制臺創建HPA應用
天翼云容器云服務引擎已經集成了HPA,您可以簡便地通過容器服務控制臺進行創建。您可以在創建應用的時候創建HPA,也可以在已有應用的基礎上開啟HPA。
方式一:在創建應用過程中,開啟HPA
登錄容器云服務引擎CCSE管理控制臺。
在控制臺左側導航欄中,單擊集群。
在集群列表頁面中,單擊目標集群名稱。
在集群管理頁左側導航欄中,選擇工作負載 > 無狀態。
點擊左上角的新增按鈕。
填寫基本信息,在實例數量中選擇自動伸縮,設置伸縮的條件和配置。
Resource規則,支持CPU和內存,支持百分比和平均值等計值方式。
Pod規則,支持Pod指標對象,支持平均值的計值方式,支持指定指標。
Object規則,支持Service指標對象,支持閾值的計值方式,支持指定指標。
單擊左下角的提交,一個支持HPA的Deployment就已經創建完畢。
結果驗證:單擊工作負載 > 無狀態中單擊應用名稱,您可在部署的詳情中查看伸縮組信息。在實際使用環境中,應用會根據CPU負載進行伸縮。您也可在測試環境中驗證彈性伸縮,通過給Pod進行CPU壓測,可以發現Pod即可完成水平的擴展。
方式二:為已有應用開啟HPA
登錄容器云服務引擎CCSE管理控制臺。
在控制臺左側導航欄中,單擊集群。
在集群列表頁面中,單擊目標集群名稱。
在集群管理頁左側導航欄中,選擇工作負載 > 無狀態。
在應用列表頁面中,選擇目標應用,點擊更多按鈕。
設置伸縮的條件和配置。
Resource規則,支持CPU和內存,支持百分比和平均值等計值方式。
Pod規則,支持Pod指標對象,支持平均值的計值方式,支持指定指標。
Object規則,支持Service指標對象,支持閾值的計值方式,支持指定指標。
單擊確認,Deployment的HPA設置完畢。
通過kubectl命令創建HPA應用
您也可通過YAML來手動創建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 exactlyimages_name:tags ports: -containerPort:80 resources: requests: ##必須設置,不然HPA無法運行。 cpu:500m |
|---|
執行以下命令,創建Nginx應用。
| kubectlcreate-f nginx.yml |
|---|
創建HPA。
| 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 |
|---|
執行以下命令,創建Nginx HPA。
| kubectlcreate-f nginx-pha.yml |
|---|
創建好HPA后,再次執行kubectl describe hpa <HPA的名稱>命令。可以看到以下信息,則表示HPA已經正常運行。
| Normal SuccessfulRescale 30s horizontal-pod-autoscaler New size: 1; reason: All metrics below target |
|---|
此時當Nginx的Pod的利用率超過本例中設置的50%利用率時,則會進行水平擴容,低于50%的時候會進行縮容。