1. 程式人生 > >Kubernetes cluster-autoscaler 解析

Kubernetes cluster-autoscaler 解析

一、什麼是cluster-autoscaler

CA( cluster-autoscaler)是用來彈性伸縮kubernetes叢集的。我們在使用kubernetes叢集經常問到的一個問題是,我應該保持多大的節點規模來滿足應用需求呢? cluster-autoscaler的出現解決了這個問題,它可以自動的根據部署的應用所請求的資源量來動態的伸縮叢集。

二、CA架構

CA由以下幾個模組組成:

  • autoscaler:核心模組,負責整體擴縮容功能
  • Estimator:負責評估計算擴容節點
  • Simulator:負責模擬排程,計算縮容節點
  • CA Cloud-Provider:與雲互動進行節點的增刪操作。社群目前僅支援AWS和GCE,其他雲廠商需要自己實現CloudProvider和NodeGroup相關介面。
    CA的架構如下圖所示:
    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

五、Ref