容器水平伸縮(HPA)
容器服務(wù)ACK支持在控制臺(tái)界面上快速創(chuàng)建支持HPA的應(yīng)用,實(shí)現(xiàn)容器資源的彈性伸縮。您也可通過定義HPA(Horizontal Pod Autoscaling)的YAML來進(jìn)行配置。
前提條件
通過容器服務(wù)控制臺(tái)創(chuàng)建HPA應(yīng)用
在控制臺(tái)左側(cè)導(dǎo)航欄,單擊集群。
在集群列表頁面,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在無狀態(tài)頁面單擊使用鏡像創(chuàng)建。
在應(yīng)用基本信息頁填寫應(yīng)用的名稱等信息,然后單擊下一步。
配置項(xiàng)
描述
命名空間
在頁面頂部設(shè)置應(yīng)用部署所處的命名空間,默認(rèn)使用default命名空間。
應(yīng)用名稱
設(shè)置應(yīng)用的名稱。
副本數(shù)量
即應(yīng)用包含的Pod數(shù)量,默認(rèn)數(shù)量為2。
類型
定義資源對象的類型,可選擇無狀態(tài)、有狀態(tài)、任務(wù)、定時(shí)任務(wù)、守護(hù)進(jìn)程集。
標(biāo)簽
為該應(yīng)用添加一個(gè)標(biāo)簽,標(biāo)識(shí)該應(yīng)用。
注解
為該應(yīng)用添加一個(gè)注解(annotation)。
時(shí)區(qū)同步
僅ACK集群支持配置此參數(shù),ACK Serverless集群不支持。表示容器與節(jié)點(diǎn)是否使用相同的時(shí)區(qū)。
在容器配置頁進(jìn)行容器設(shè)置,選擇鏡像,并設(shè)置所需的資源。然后單擊下一步。詳情請參見配置容器。
說明您必須為Deployment設(shè)置所需資源,否則無法進(jìn)行容器自動(dòng)伸縮。
在高級設(shè)置頁的訪問設(shè)置區(qū)域,單擊服務(wù)的創(chuàng)建,設(shè)置服務(wù)的相關(guān)信息,詳情請參見高級設(shè)置。
在高級設(shè)置頁選中指標(biāo)伸縮的開啟,設(shè)置伸縮的條件和配置。
指標(biāo):支持CPU和內(nèi)存,需要和設(shè)置的所需資源類型相同。
觸發(fā)條件:資源使用率的百分比,超過該使用量,容器開始擴(kuò)容。有關(guān)Pod水平自動(dòng)擴(kuò)縮的算法,請參見算法細(xì)節(jié)。
最大副本數(shù):該Deployment可擴(kuò)容的容器數(shù)量上限。
最小副本數(shù):該Deployment可縮容的容器數(shù)量下限。
單擊右下角的創(chuàng)建,一個(gè)支持HPA的Deployment就已經(jīng)創(chuàng)建完畢。
結(jié)果驗(yàn)證
單擊查看應(yīng)用詳情或者在
中單擊應(yīng)用名稱或操作列的詳情,單擊容器伸縮,您可在部署的詳情中查看伸縮組信息。在實(shí)際使用環(huán)境中,應(yīng)用會(huì)根據(jù)CPU負(fù)載進(jìn)行伸縮。您也可在測試環(huán)境中驗(yàn)證彈性伸縮,通過給Pod進(jìn)行CPU壓測,可以發(fā)現(xiàn)Pod在半分鐘內(nèi)即可完成水平的擴(kuò)展。
通過kubectl命令創(chuàng)建HPA應(yīng)用
您也可通過編排模板來手動(dòng)創(chuàng)建HPA,并將其綁定到要伸縮的Deployment對象上,通過kubectl命令實(shí)現(xiàn)容器自動(dòng)伸縮配置。
下面針對一個(gè)Nginx應(yīng)用進(jìn)行舉例。
創(chuàng)建并復(fù)制以下內(nèi)容到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: ##必須設(shè)置,不然HPA無法運(yùn)行。 cpu: 500m
執(zhí)行以下命令,創(chuàng)建Nginx應(yīng)用。
kubectl create -f nginx.yml
創(chuàng)建HPA。
通過scaleTargetRef設(shè)置當(dāng)前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設(shè)置request資源,如果沒有request資源,HPA不會(huì)運(yùn)行。
執(zhí)行
kubectl describe hpa <HPA的名稱>
會(huì)發(fā)現(xiàn)有類似以下的警告信息。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
創(chuàng)建好HPA后,再次執(zhí)行
kubectl describe hpa <HPA的名稱>
命令。可以看到以下信息,則表示HPA已經(jīng)正常運(yùn)行。
Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
此時(shí)當(dāng)Nginx的Pod的利用率超過本例中設(shè)置的50%利用率時(shí),則會(huì)進(jìn)行水平擴(kuò)容,低于50%的時(shí)候會(huì)進(jìn)行縮容。