Kubernetes平臺上應用的自動化橫着擴展(水平自動伸縮)是經過HPA(Horizontal Pod Autoscaler)來實現的,基於觀測CPU使用率(v1版本,v2beta版本也支持memory或者其餘自定義性能屬性),當業務負載上升超過HPA設定值,建立新的POD保障業務對資源的需求,當負載下載後能夠經過銷燬POD是否資源來提升利用率。php
流程html
建立HPA資源對象,關聯對應資源例如Deployment,設定目標CPU使用率閾值,最大,最小replica數量。apache
前提:pod必定要設置資源限制,參數request,HPA纔會工做。api
HPA控制器每隔15秒鐘(能夠經過設置controller manager的–horizontal-pod-autoscaler-sync-period參數設定,默認15s)經過觀測metrics值獲取資源使用信息app
HPA控制器將獲取資源使用信息與HPA設定值進行對比,計算出須要調整的副本數量ide
根據計算結果調整副本數量,使得單個POD的CPU使用率儘可能逼近指望值,但不能照顧設定的最大,最小值。post
以上2,3,4週期循環性能
週期阿里雲
HPA控制器觀測資源使用率並做出決策是有周期的,執行是須要時間的,在執行自動伸縮過程當中metrics不是靜止不變的,可能下降或者升高,若是執行太頻繁可能致使資源的使用快速抖動,所以控制器每次決策後的一段時間內再也不進行新的決策。對於擴容這個時間是3分鐘,縮容則是5分鐘,對應調整參數spa
--horizontal-pod-autoscaler-downscale-delay
--horizontal-pod-autoscaler-upscale-delay
1
2
自動伸縮不是一次到位的,而是逐漸逼近計算值,每次調整不超過當前副本數量的2倍或者1/2
經過kubectl api-versions能夠查看到存在3個版本。v1版本只支持CPU,v2beta2版本支持多metrics(CPU,memory)以及自定義metrics。基於autoscaling/v2beta2的hpa yaml文件寫法
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache-hpa
labels:
app: hpa-test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
原文連接:https://blog.csdn.net/oyym_mv/article/details/87189199
參考kubernetes雲平臺管理實戰:HPA水平自動伸縮
連接http://www.javashuo.com/article/p-zyedlmof-ey.html
參考阿里雲容器HPA設置連接https://help.aliyun.com/document_detail/86554.html