Kubernetes
  • 序言
  • 基礎入門
    • Kubernetes 簡介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架構原理
    • 設計理念
    • 核心組件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 資源對象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安裝
    • 單機部署
    • 特性開關
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加組件
      • Addon-manager
      • DNS
      • Dashboard
      • 監控
      • 日誌
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 準備部署環境
      • 安裝必要工具
      • 創建計算資源
      • 配置創建證書
      • 配置生成配置
      • 配置生成密鑰
      • 部署 Etcd 群集
      • 部署控制節點
      • 部署計算節點
      • 配置 Kubectl
      • 配置網絡路由
      • 部署 DNS 擴展
      • 煙霧測試
      • 刪除集群
  • 插件擴展
    • API 擴展
      • Aggregation
      • CustomResourceDefinition
    • 訪問控制
      • 認證
      • RBAC 授權
      • 准入控制
    • Scheduler 擴展
    • 網絡插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 運行時插件 CRI
      • CRI-tools
      • Frakti
    • 存儲插件
      • 容器存儲接口 CSI
      • FlexVolume
      • glusterfs
    • 網絡策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 擴展
    • Device 插件
  • 服務治理
    • 服務治理
      • 一般準則
      • 滾動升級
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安裝
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排錯
      • 社區
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 實踐案例
    • 實踐概覽
    • 資源控制
    • 集群高可用
    • 應用高可用
    • 調試
    • 端口映射
    • 端口轉發
    • 用戶管理
    • GPU
    • HugePage
    • 安全
    • 審計
    • 備份恢復
    • 證書輪換
    • 大規模集群
    • 大數據與機器學習
      • Spark
      • Tensorflow
    • Serverless
  • 排錯指南
    • 排錯概覽
    • 集群排錯
    • Pod 排錯
    • 網絡排錯
    • PV 排錯
      • AzureDisk
      • AzureFile
    • Windows 排錯
    • 雲平臺排錯
      • Azure
    • 排錯工具
  • 社區貢獻
    • 開發指南
    • 單元測試和集成測試
    • 社區貢獻
  • 附錄
    • 生態圈
    • 學習資源
    • 國內鏡像
    • 如何貢獻
    • 參考文檔
Powered by GitBook
On this page
  • 部署
  • 工作原理
  • 最佳實踐
  • 參考文檔
  1. 部署配置
  2. 附加組件

Cluster Autoscaler

PreviousGPUNextip-masq-agent

Last updated 1 year ago

Cluster AutoScaler 是一個自動擴展和收縮 Kubernetes 集群 Node 的擴展。當集群容量不足時,它會自動去 Cloud Provider (支持 GCE、GKE、Azure、AKS、AWS 等)創建新的 Node,而在 Node 長時間(超過 10 分鐘)資源利用率很低時(低於 50%)自動將其刪除以節省開支。

Cluster AutoScaler 獨立於 Kubernetes 主代碼庫,維護在 。

部署

Cluster AutoScaler v1.0+ 可以基於 Docker 鏡像 gcr.io/google_containers/cluster-autoscaler:v1.3.0 來部署,詳細的部署步驟可以參考

  • GCE:

  • GKE:

  • AWS:

  • Azure:

注意,在開啓 RBAC 的集群中創建 。

工作原理

Cluster AutoScaler 定期(默認間隔 10s)檢測是否有充足的資源來調度新創建的 Pod,當資源不足時會調用 Cloud Provider 創建新的 Node。

爲了自動創建和初始化 Node,Cluster Autoscaler 要求 Node 必須屬於某個 Node Group,比如

  • GCE/GKE 中的 Managed instance groups(MIG)

  • AWS 中的 Autoscaling Groups

  • Azure 中的 Scale Sets 和 Availability Sets

當集群中有多個 Node Group 時,可以通過 --expander=<option> 選項配置選擇 Node Group 的策咯,支持如下四種方式

  • random:隨機選擇

  • most-pods:選擇容量最大(可以創建最多 Pod)的 Node Group

  • least-waste:以最小浪費原則選擇,即選擇有最少可用資源的 Node Group

  • price:選擇最便宜的 Node Group(僅支持 GCE 和 GKE)

目前,Cluster Autoscaler 可以保證

  • 小集群(小於 100 個 Node)可以在不超過 30 秒內完成擴展(平均 5 秒)

  • 大集群(100-1000 個 Node)可以在不超過 60 秒內完成擴展(平均 15 秒)

Cluster AutoScaler 也會定期(默認間隔 10s)自動監測 Node 的資源使用情況,當一個 Node 長時間(超過 10 分鐘其期間沒有執行任何擴展操作)資源利用率都很低時(低於 50%)自動將其所在虛擬機從雲服務商中刪除(注意刪除時會有 1 分鐘的 graceful termination 時間)。此時,原來的 Pod 會自動調度到其他 Node 上面(通過 Deployment、StatefulSet 等控制器)。

注意,Cluster Autoscaler 僅根據 Pod 的調度情況和 Node 的整體資源使用清空來增刪 Node,跟 Pod 或 Node 的資源度量(metrics)沒有直接關係。

用戶在啓動 Cluster AutoScaler 時可以配置 Node 數量的範圍(包括最大 Node 數和最小 Node 數)。

在使用 Cluster AutoScaler 時需要注意:

  • 由於在刪除 Node 時會發生 Pod 重新調度的情況,所以應用必須可以容忍重新調度和短時的中斷(比如使用多副本的 Deployment)

    • Pod 配置了 PodDisruptionBudget (PDB)

    • kube-system Pod 默認不在 Node 上運行或者未配置 PDB

    • Pod 不是通過 deployment, replica set, job, stateful set 等控制器創建的

    • Pod 使用了本地存儲

    • 其他原因導致的 Pod 無法重新調度,如資源不足,其他 Node 無法滿足 NodeSelector 或 Affinity 等

最佳實踐

  • Cluster AutoScaler 可以和 Horizontal Pod Autoscaler(HPA)配合使用

  • 不要手動修改 Node 配置,保證集群內的所有 Node 有相同的配置並屬於同一個 Node 組

  • 運行 Pod 時指定資源請求

  • 必要時使用 PodDisruptionBudgets 阻止 Pod 被誤刪除

  • 確保雲服務商的配額充足

  • Cluster AutoScaler 與雲服務商提供的 Node 自動擴展功能以及基於 CPU 利用率的 Node 自動擴展機制衝突,不要同時啓用

參考文檔

當 Node 上面的 時,Node 不會刪除

Pods 滿足下面的條件之一
Kubernetes Autoscaler
Kubernetes Cluster AutoScaler Support
https://github.com/kubernetes/autoscaler
https://kubernetes.io/docs/concepts/cluster-administration/cluster-management/
https://cloud.google.com/container-engine/docs/cluster-autoscaler
https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md
https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/azure
cluster-autoscaler ClusterRole
image-20190316184848223