Kubernetes Horizontal Pod Autoscaling

HPA介紹

Horizo​​ntal Pod Autoscaler基於觀察到的CPU利用率(或藉助自定義指標 支持,基於其餘一些應用程序提供的指標)自動縮放複製控制器,部署或副本集中的Pod數量 請注意,自動伸縮不適用於沒法縮放的對象,例如DaemonSets。php

Horizo​​ntal Pod Autoscaler被實現爲Kubernetes API資源和控制器。該資源肯定控制器的行爲。控制器會按期調整複製控制器或部署中副本的數量,以使觀察到的平均CPU利用率與用戶指定的目標相匹配。nginx

簡單的理解:自動水平伸縮,是指運行在k8s上的應用負載(POD),能夠根據資源使用率進行自動擴容、縮容;咱們知道應用的資源使用率一般都有高峯和低谷,因此k8s的HPA特性應運而生;它也是最能體現區別於傳統運維的優點之一,不只可以彈性伸縮,並且徹底自動化!git

工做原理圖

 

 下面咱們進行實驗:github

# 建立deploy和serviceapache

$ kubectl run php-apache --image=pilchard/hpa-example --requests=cpu=200m --expose --port=80

# 建立autoscaler
$ kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10

# 等待3~5分鐘查看hpa狀態
$ kubectl get hpa php-apache

# 增長負載 
$ kubectl run --rm -it load-generator --image=busybox /bin/sh 
$ while true; do wget -q -O- http://php-apache; done; 

# 等待約5分鐘查看hpa顯示負載增長,且副本數目增長
# 注意k8s爲了不頻繁增刪pod,對副本的增長速度有限制 # 實驗過程能夠看到副本數目從1到4到8到10,大概都須要4~5分鐘的緩衝期
$ kubectl get hpa php-apache -w

# 清除負載,CTRL+C 結束上述循環程序,稍後副本數目變回1 

 

 經過註解annotations添加自動伸縮例子:api

Deployment / StatefulSet:bash

 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   name: example
   labels:
   annotations:
     hpa.autoscaling.banzaicloud.io/minReplicas: "1"
     hpa.autoscaling.banzaicloud.io/maxReplicas: "3"
     cpu.hpa.autoscaling.banzaicloud.io/targetAverageUtilization: "70"

chart模板:https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-hpa.yamlapp

參考:運維

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/spa

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

相關文章
相關標籤/搜索