Kubernetes自動伸縮機(jī)制,為你降本增效
從技術(shù)上講,容器化應(yīng)用能該幫助組織更具有成本的優(yōu)勢,但Kubernetes到處布滿了成本陷阱,可能會使你超出預(yù)算。幸運(yùn)的是,有一些策略可以控制云成本,自動伸縮就是其中之一。Kubernetes帶有三個內(nèi)置的自動伸縮機(jī)制來幫助你做到這一點(diǎn)。它們配合得越好,運(yùn)行應(yīng)用程序的成本就越低。

1.Pod水平自動擴(kuò)縮(HPA)
Pod 水平自動擴(kuò)縮(HorizontalpodAutoscaler) 可以基于CPU利用率自動擴(kuò)縮 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的pod數(shù)量。除了CPU利用率,也可以基于其他應(yīng)程序提供的 自定義度量指標(biāo) 來執(zhí)行自動擴(kuò)縮。
生產(chǎn)環(huán)境中,許多應(yīng)用程序的使用情況會出現(xiàn)波動,這意味著實(shí)時添加或刪除pod副本會帶來更好的成本收益。這就是 HorizontalpodAutoscaler (HPA) 通過自動執(zhí)行此操作來提供幫助的地方。
何時使用 HPA?
它非常適合擴(kuò)展無狀態(tài)應(yīng)用程序,當(dāng)然也可以用于有狀態(tài)應(yīng)用。如果將 HPA 與Cluster Autoscaler(CA)結(jié)合使用,能夠?yàn)榻?jīng)常變化的工作負(fù)載獲得最大的成本節(jié)約。當(dāng)pod數(shù)量減少時,這將減少活動節(jié)點(diǎn)的數(shù)量。
HPA 是如何工作的?
HPA 監(jiān)控pod以了解pod副本的數(shù)量是否需要更改。為了確定這一點(diǎn),它采用每個pod指標(biāo)值的平均值,并檢查刪除或添加副本,是否會使該值更接近目標(biāo)。
例如,如果你部署的目標(biāo)CPU利用率為50%,而現(xiàn)在你有五個pod在那里運(yùn)行,則平均CPU利用率為 75%。為了使pod平均值更接近你的目標(biāo),HPA 控制器將增加三個副本。
HPA 最佳實(shí)踐
為 HPA 提供每個pod資源指標(biāo):需要在Kubernetes集群中安裝 metrics-server。
為每個容器配置值:HPA 根據(jù)觀察到的pod的CPU利用率值(來自單個pod的資源請求的百分比)做出擴(kuò)展決策。如果你沒有包含某些容器的值,則計算將不準(zhǔn)確并可能導(dǎo)致出現(xiàn)糟糕的擴(kuò)展決策。
使用自定義指標(biāo):HPA 擴(kuò)展決策的另一個來源是自定義指標(biāo)。HPA 支持兩種類型的自定義指標(biāo):pod 指標(biāo)和對象指標(biāo)。確保使用正確的目標(biāo)類型。你還可以使用來自第三方監(jiān)控系統(tǒng)的外部指標(biāo)。

2. Pod垂直自動擴(kuò)縮 (VPA)
Vertical Pod Autoscaler(VPA),即垂直 Pod 自動擴(kuò)縮容,它根據(jù)容器資源使用率自動設(shè)置 CPU 和 內(nèi)存 的requests,從而允許在節(jié)點(diǎn)上進(jìn)行適當(dāng)?shù)恼{(diào)度,以便為每個 Pod 提供適當(dāng)?shù)馁Y源。它既可以縮小過度請求資源的容器,也可以根據(jù)其使用情況隨時提升資源不足的容量。
這種自動縮放機(jī)制增加和減少了pod容器的CPU和內(nèi)存資源請求,以使分配的集群資源與實(shí)際使用情況保持一致。VPA 還需要訪問Kubernetes指標(biāo)服務(wù)器,因?yàn)樗鼉H替換由副本控制器管理(Replication Controller)的pod。
提示:
“如果你的 HPA 配置沒有使用CPU或內(nèi)存來設(shè)置其擴(kuò)展目標(biāo),請同時使用 VPA 和 HPA。
何時使用 VPA?
工作負(fù)載可能會在某個時候遇到高利用率,但不斷增加其請求限制,不是一個好辦法。你可能會浪費(fèi)CPU或內(nèi)存資源并限制運(yùn)行它們的節(jié)點(diǎn)。將工作負(fù)載分布到多個應(yīng)用程序?qū)嵗袝r候也是很棘手的,這就是 Vertical Pod Autoscaler 的幫助所在。
VPA 是如何工作的?
VPA 部署由三個組件組成:
Recommender : 監(jiān)控資源利用率并計算目標(biāo)值,也就是檢查歷史資源利用率和當(dāng)前使用的模式,并推薦一個理想的資源請求值
Updater : 檢查pods 資源限制是否需要更新
Admission Controller:在創(chuàng)建pod時覆蓋其資源請求
由于Kubernetes不允許更改正在運(yùn)行的pod的資源限制,因此 VPA 首先終止舊的pod,然后將更新的值注入新的pod規(guī)范。
VPA 最佳實(shí)踐
避免在Kubernetes的1.11版本之前使用。
使用updateMode:Off運(yùn)行 VPA,以了解你要自動縮放的pod的資源使用情況。這將為你提供推薦的CPU和內(nèi)存請求,也是以后調(diào)整的重要基礎(chǔ)。
如果工作負(fù)載經(jīng)常出現(xiàn)高使用率和低使用率的峰值,則 VPA 可能會過于激進(jìn),因?yàn)樗赡軙粩嗟匾槐橛忠槐榈靥鎿Qpod。在這種情況下,使用HPA 效果更好。
3. Cluster Autoscaler(CA)
Cluster Autoscaler 在K8S集群中,通過增加/刪除其中的Node,達(dá)到集群擴(kuò)縮容的目的。由于 Cluster Autoscaler 控制器工作在基礎(chǔ)設(shè)施級別,因此它需要具備添加和刪除基礎(chǔ)設(shè)施的權(quán)限,你應(yīng)該安全地管理這些授權(quán)信息(例如,遵循最小權(quán)限原則)。
何時使用集群自動擴(kuò)縮器?
如果你希望通過動態(tài)擴(kuò)展節(jié)點(diǎn)數(shù)量,以最大化當(dāng)前集群利用率來優(yōu)化成本,則此自動擴(kuò)展機(jī)制非常有效。對于旨在擴(kuò)展和滿足動態(tài)需求的工作負(fù)載而言,它是一款出色的工具。
Cluster Autoscaler 如何工作?
它會檢查不可調(diào)度的pod,然后計算是否可以整合當(dāng)前部署的所有pod,以在較少數(shù)量的節(jié)點(diǎn)上運(yùn)行它們。如果 Cluster Autoscaler 識別出具有可以重新調(diào)度到集群中其他節(jié)點(diǎn)的pod的節(jié)點(diǎn),它會驅(qū)逐它們并刪除備用節(jié)點(diǎn)。
集群自動擴(kuò)縮器最佳實(shí)踐
部署 Cluster Autoscaler 時,要與之相匹配的Kubernetes版本一起使用。(兼容性列表)。
檢查集群節(jié)點(diǎn)是否具有相同的CPU和內(nèi)存容量:否則集群自動縮放器將無法工作,因?yàn)樗僭O(shè)集群中的每個節(jié)點(diǎn)都具有相同的容量。
確保自動縮放的pod都具有指定的資源請求。
總結(jié)
自動縮放機(jī)制對于控制云成本非常有價值,但它們需要大量的手動配置:
防止 HPA 和 VPA 沖突:你需要檢查你的 HPA 和 VPA 策略是否最終發(fā)生沖突。密切關(guān)注成本,以防止它們失控。
平衡三種機(jī)制:你需要平衡三種機(jī)制的組合,以確保工作負(fù)載支持峰值負(fù)載,并在負(fù)載較低時將成本保持在最低水平。
參考:https://www.kubernetes.org.cn/9443.html
文章轉(zhuǎn)載:K8S中文社區(qū)
