Kubernetes cluster-autoscaler 解析
阿新 • • 發佈:2019-01-10
一、什麼是cluster-autoscaler
CA( cluster-autoscaler)是用來彈性伸縮kubernetes叢集的。我們在使用kubernetes叢集經常問到的一個問題是,我應該保持多大的節點規模來滿足應用需求呢? cluster-autoscaler的出現解決了這個問題,它可以自動的根據部署的應用所請求的資源量來動態的伸縮叢集。
二、CA架構
CA由以下幾個模組組成:
- autoscaler:核心模組,負責整體擴縮容功能
- Estimator:負責評估計算擴容節點
- Simulator:負責模擬排程,計算縮容節點
- CA Cloud-Provider:與雲互動進行節點的增刪操作。社群目前僅支援AWS和GCE,其他雲廠商需要自己實現CloudProvider和NodeGroup相關介面。
CA的架構如下圖所示:
三、其他細節
3.1 什麼時候CA改變叢集大小
擴容: 由於資源不足,pod排程失敗,即有pod一直處於Pending狀態。
縮容:node的資源利用率較低時,且此node上存在的pod都能被重新排程到其他node上執行。
3.2 什麼樣的節點不會被CA刪除
- 節點上有pod被PodDisruptionBudget控制器限制。
- 節點上有名稱空間是kube-system的pods。
- 節點上的pod不是被控制器建立,例如不是被deployment, replica set, job, stateful set建立。
- 節點上有pod使用了本地儲存
- 節點上pod驅逐後無處可去,即沒有其他node能排程這個pod
- 節點有註解:”cluster-autoscaler.kubernetes.io/scale-down-disabled”: “true”
3.3 如何防止節點被CA刪除
可以通過給節點打上特定註解保證節點不給CA刪除:
kubectl annotate node <nodename> cluster-autoscaler.kubernetes.io/scale-down-disabled=true
3.4 CA如何與HPA協同工作
HPA(Horizontal Pod Autoscaling)是k8s中pod的水平自動擴充套件,HPA的操作物件是RC、RS或Deployment對應的Pod,根據觀察到的CPU等實際使用量與使用者的期望值進行比對,做出是否需要增減例項數量的決策。
當CPU負載增加,HPA擴容pod,如果此pod因為資源不足無法被排程,則此時CA出馬擴容節點。
當CPU負載減小,HPA減少pod,CA發現有節點資源利用率低甚至已經是空時,CA就會刪除此節點。
四、部署使用CA
直接在叢集中部署即可,簡化的yaml如下所示,啟動引數按需新增,其中{{MIN}}是最小節點數,{{MAX}}是最大節點數
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cluster-autoscaler
labels:
k8s-app: cluster-autoscaler
spec:
replicas: 1
selector:
matchLabels:
k8s-app: cluster-autoscaler
template:
metadata:
labels:
k8s-app: cluster-autoscaler
spec:
containers:
- image: cluster-autoscaler:latest
name: cluster-autoscaler
command:
- ./cluster-autoscaler
- --nodes={{MIN}}:{{MAX}}:k8s-worker-asg-1