Kubernetes平臺上應用的自動化橫着擴展(水平自動伸縮)是通過HPA(Horizontal Pod Autoscaler)來實現的,基於觀測CPU使用率(v1版本,v2beta版本也支持memory或者其他自定義性能屬性),當業務負載上升超過HPA設定值,創建新的POD保障業務對資源的需求,當負載下載後可以通過銷燬POD是否資源來提高利用率。
HPA控制器的工作流程(V1版本)
流程
創建HPA資源對象,關聯對應資源例如Deployment,設定目標CPU使用率閾值,最大,最小replica數量。
前提:pod一定要設置資源限制,參數request,HPA纔會工作。
HPA控制器每隔15秒鐘(可以通過設置controller manager的–horizontal-pod-autoscaler-sync-period參數設定,默認15s)通過觀測metrics值獲取資源使用信息
HPA控制器將獲取資源使用信息與HPA設定值進行對比,計算出需要調整的副本數量
根據計算結果調整副本數量,使得單個POD的CPU使用率儘量逼近期望值,但不能照顧設定的最大,最小值。
以上2,3,4週期循環
週期
HPA控制器觀測資源使用率並作出決策是有周期的,執行是需要時間的,在執行自動伸縮過程中metrics不是靜止不變的,可能降低或者升高,如果執行太頻繁可能導致資源的使用快速抖動,因此控制器每次決策後的一段時間內不再進行新的決策。對於擴容這個時間是3分鐘,縮容則是5分鐘,對應調整參數
--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水平自動伸縮
鏈接https://www.cnblogs.com/luoahong/p/10303077.html
參考阿里雲容器HPA設置鏈接https://help.aliyun.com/document_detail/86554.html