從技術(shù)上講,容器化應(yīng)用能該幫助組織更具有成本的優(yōu)勢(shì),但Kubernetes到處布滿了成本陷阱,可能會(huì)使你超出預(yù)算。幸運(yùn)的是,有一些策略可以控制云成本,自動(dòng)伸縮就是其中之一。Kubernetes帶有三個(gè)內(nèi)置的自動(dòng)伸縮機(jī)制來幫助你做到這一點(diǎn)。它們配合得越好,運(yùn)行應(yīng)用程序的成本就越低。
1.Pod水平自動(dòng)擴(kuò)縮(HPA)
Pod 水平自動(dòng)擴(kuò)縮(HorizontalpodAutoscaler) 可以基于CPU利用率自動(dòng)擴(kuò)縮 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的pod數(shù)量。除了CPU利用率,也可以基于其他應(yīng)程序提供的 自定義度量指標(biāo) 來執(zhí)行自動(dòng)擴(kuò)縮。
生產(chǎn)環(huán)境中,許多應(yīng)用程序的使用情況會(huì)出現(xiàn)波動(dòng),這意味著實(shí)時(shí)添加或刪除pod副本會(huì)帶來更好的成本收益。這就是 HorizontalpodAutoscaler (HPA) 通過自動(dòng)執(zhí)行此操作來提供幫助的地方。
何時(shí)使用 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ù)量減少時(shí),這將減少活動(dòng)節(jié)點(diǎn)的數(shù)量。
HPA 是如何工作的?
HPA 監(jiān)控pod以了解pod副本的數(shù)量是否需要更改。為了確定這一點(diǎn),它采用每個(gè)pod指標(biāo)值的平均值,并檢查刪除或添加副本,是否會(huì)使該值更接近目標(biāo)。
例如,如果你部署的目標(biāo)CPU利用率為50%,而現(xiàn)在你有五個(gè)pod在那里運(yùn)行,則平均CPU利用率為 75%。為了使pod平均值更接近你的目標(biāo),HPA 控制器將增加三個(gè)副本。
HPA 最佳實(shí)踐
為 HPA 提供每個(gè)pod資源指標(biāo):需要在Kubernetes集群中安裝 metrics-server。
為每個(gè)容器配置值:HPA 根據(jù)觀察到的pod的CPU利用率值(來自單個(gè)pod的資源請(qǐng)求的百分比)做出擴(kuò)展決策。如果你沒有包含某些容器的值,則計(jì)算將不準(zhǔn)確并可能導(dǎo)致出現(xiàn)糟糕的擴(kuò)展決策。
使用自定義指標(biāo):HPA 擴(kuò)展決策的另一個(gè)來源是自定義指標(biāo)。HPA 支持兩種類型的自定義指標(biāo):pod 指標(biāo)和對(duì)象指標(biāo)。確保使用正確的目標(biāo)類型。你還可以使用來自第三方監(jiān)控系統(tǒng)的外部指標(biāo)。
2. Pod垂直自動(dòng)擴(kuò)縮 (VPA)
Vertical Pod Autoscaler(VPA),即垂直 Pod 自動(dòng)擴(kuò)縮容,它根據(jù)容器資源使用率自動(dòng)設(shè)置 CPU 和 內(nèi)存 的requests,從而允許在節(jié)點(diǎn)上進(jìn)行適當(dāng)?shù)恼{(diào)度,以便為每個(gè) Pod 提供適當(dāng)?shù)馁Y源。它既可以縮小過度請(qǐng)求資源的容器,也可以根據(jù)其使用情況隨時(shí)提升資源不足的容量。
這種自動(dòng)縮放機(jī)制增加和減少了pod容器的CPU和內(nèi)存資源請(qǐng)求,以使分配的集群資源與實(shí)際使用情況保持一致。VPA 還需要訪問Kubernetes指標(biāo)服務(wù)器,因?yàn)樗鼉H替換由副本控制器管理(Replication Controller)的pod。
提示:
“如果你的 HPA 配置沒有使用CPU或內(nèi)存來設(shè)置其擴(kuò)展目標(biāo),請(qǐng)同時(shí)使用 VPA 和 HPA。
何時(shí)使用 VPA?
工作負(fù)載可能會(huì)在某個(gè)時(shí)候遇到高利用率,但不斷增加其請(qǐng)求限制,不是一個(gè)好辦法。你可能會(huì)浪費(fèi)CPU或內(nèi)存資源并限制運(yùn)行它們的節(jié)點(diǎn)。將工作負(fù)載分布到多個(gè)應(yīng)用程序?qū)嵗袝r(shí)候也是很棘手的,這就是 Vertical Pod Autoscaler 的幫助所在。
VPA 是如何工作的?
VPA 部署由三個(gè)組件組成:
Recommender : 監(jiān)控資源利用率并計(jì)算目標(biāo)值,也就是檢查歷史資源利用率和當(dāng)前使用的模式,并推薦一個(gè)理想的資源請(qǐng)求值
Updater : 檢查pods 資源限制是否需要更新
Admission Controller:在創(chuàng)建pod時(shí)覆蓋其資源請(qǐng)求
由于Kubernetes不允許更改正在運(yùn)行的pod的資源限制,因此 VPA 首先終止舊的pod,然后將更新的值注入新的pod規(guī)范。
VPA 最佳實(shí)踐
避免在Kubernetes的1.11版本之前使用。
使用updateMode:Off運(yùn)行 VPA,以了解你要自動(dòng)縮放的pod的資源使用情況。這將為你提供推薦的CPU和內(nèi)存請(qǐng)求,也是以后調(diào)整的重要基礎(chǔ)。
如果工作負(fù)載經(jīng)常出現(xiàn)高使用率和低使用率的峰值,則 VPA 可能會(huì)過于激進(jìn),因?yàn)樗赡軙?huì)不斷地一遍又一遍地替換pod。在這種情況下,使用HPA 效果更好。
3. Cluster Autoscaler(CA)
Cluster Autoscaler 在K8S集群中,通過增加/刪除其中的Node,達(dá)到集群擴(kuò)縮容的目的。由于 Cluster Autoscaler 控制器工作在基礎(chǔ)設(shè)施級(jí)別,因此它需要具備添加和刪除基礎(chǔ)設(shè)施的權(quán)限,你應(yīng)該安全地管理這些授權(quán)信息(例如,遵循最小權(quán)限原則)。
何時(shí)使用集群自動(dòng)擴(kuò)縮器?
如果你希望通過動(dòng)態(tài)擴(kuò)展節(jié)點(diǎn)數(shù)量,以最大化當(dāng)前集群利用率來優(yōu)化成本,則此自動(dòng)擴(kuò)展機(jī)制非常有效。對(duì)于旨在擴(kuò)展和滿足動(dòng)態(tài)需求的工作負(fù)載而言,它是一款出色的工具。
Cluster Autoscaler 如何工作?
它會(huì)檢查不可調(diào)度的pod,然后計(jì)算是否可以整合當(dāng)前部署的所有pod,以在較少數(shù)量的節(jié)點(diǎn)上運(yùn)行它們。如果 Cluster Autoscaler 識(shí)別出具有可以重新調(diào)度到集群中其他節(jié)點(diǎn)的pod的節(jié)點(diǎn),它會(huì)驅(qū)逐它們并刪除備用節(jié)點(diǎn)。
集群自動(dòng)擴(kuò)縮器最佳實(shí)踐
部署 Cluster Autoscaler 時(shí),要與之相匹配的Kubernetes版本一起使用。(兼容性列表)。
檢查集群節(jié)點(diǎn)是否具有相同的CPU和內(nèi)存容量:否則集群自動(dòng)縮放器將無法工作,因?yàn)樗僭O(shè)集群中的每個(gè)節(jié)點(diǎn)都具有相同的容量。
確保自動(dòng)縮放的pod都具有指定的資源請(qǐng)求。
總結(jié)
自動(dòng)縮放機(jī)制對(duì)于控制云成本非常有價(jià)值,但它們需要大量的手動(dòng)配置:
防止 HPA 和 VPA 沖突:你需要檢查你的 HPA 和 VPA 策略是否最終發(fā)生沖突。密切關(guān)注成本,以防止它們失控。
平衡三種機(jī)制:你需要平衡三種機(jī)制的組合,以確保工作負(fù)載支持峰值負(fù)載,并在負(fù)載較低時(shí)將成本保持在最低水平。
參考:https://www.kubernetes.org.cn/9443.html
編輯;jq
-
kubernetes
+關(guān)注
關(guān)注
0文章
225瀏覽量
8729
原文標(biāo)題:Kubernetes自動(dòng)伸縮機(jī)制,為你降本增效
文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論