溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

K8s中HPA的原理及分析是怎樣的

發(fā)布時間:2021-12-16 09:23:18 來源:億速云 閱讀:419 作者:柒染 欄目:云計算

今天就跟大家聊聊有關(guān)K8s中HPA的原理及分析是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

一、介紹

HPA的全稱為(Horizontal Pod Autoscaling)它可以根據(jù)當(dāng)前pod資源的使用率(如CPU、磁盤、內(nèi)存等),進行副本數(shù)的動態(tài)的擴容與縮容,以便減輕各個pod的壓力。
當(dāng)pod負(fù)載達(dá)到一定的閾值后,會根據(jù)擴縮容的策略生成更多新的pod來分擔(dān)壓力,當(dāng)pod的使用比較空閑時,在穩(wěn)定空閑一段時間后,還會自動減少pod的副本數(shù)量。

二、HPA的工作原理

k8s中的某個Metrics Server(Heapster或自定義Metrics Server)持續(xù)采集所有Pod副本的指標(biāo)數(shù)據(jù)。

HPA控制器通過Metrics Server的API(Heapster的API或聚合API)獲取這些數(shù)據(jù),基于用戶定義的擴縮容規(guī)則進行計算,得到目標(biāo)Pod副本數(shù)量。

當(dāng)目標(biāo)Pod副本數(shù)量與當(dāng)前副本數(shù)量不同時,HPA控制器就訪問Pod的副本控制器(Deployment 、RC或者ReplicaSet)發(fā)起scale操作,調(diào)整Pod的副本數(shù)量,完成擴縮容操作。

K8s中HPA的原理及分析是怎樣的

三、指標(biāo)的類型

       Master的kube-controller-manager服務(wù)持續(xù)監(jiān)測目標(biāo)Pod的某種性能指標(biāo),以計算是否需要調(diào)整副本數(shù)量。目前k8s支持的指標(biāo)類型如下。

◎ Pod資源使用率:Pod級別的性能指標(biāo),通常是一個比率值,例如CPU使用率。
◎ Pod自定義指標(biāo):Pod級別的性能指標(biāo),通常是一個數(shù)值,例如接收的請求數(shù)量。
◎ Object自定義指標(biāo)或外部自定義指標(biāo):通常是一個數(shù)值,需要容器應(yīng)用以某種方式提供,例如通過HTTP URL“/metrics”提供,或者使用外部服務(wù)提供的指標(biāo)采集URL。

       k8s從1.11版本開始,棄用基于Heapster組件完成Pod的CPU使用率采集的機制,全面轉(zhuǎn)向基于Metrics Server完成數(shù)據(jù)采集。Metrics Server將采集到的Pod性能指標(biāo)數(shù)據(jù)通過聚合API(Aggregated API)如metrics.k8s.io、custom.metrics.k8s.io和external.metrics.k8s.io提供給HPA控制器進行查詢。關(guān)于聚合API和聚合器(API Aggregator)的概念我們后面詳細(xì)講解。

四、擴縮容策略

通過伸縮系數(shù)判斷是否要進行擴容或縮容。

HPA會根據(jù)獲得的指標(biāo)數(shù)值,應(yīng)用相應(yīng)的算法算出一個伸縮系數(shù),此系數(shù)是指標(biāo)的期望值與目前值的比值,如果大于1表示擴容,小于1表示縮容。

容忍度

--horizontal-pod-autoscaler-tolerance:容忍度

它允許一定范圍內(nèi)的使用量的不穩(wěn)定,現(xiàn)在默認(rèn)為0.1,這也是出于維護系統(tǒng)穩(wěn)定性的考慮。

例如,設(shè)定HPA調(diào)度策略為cpu使用率高于50%觸發(fā)擴容,那么只有當(dāng)使用率大于55%或者小于45%才會觸發(fā)伸縮活動,HPA會盡力把Pod的使用率控制在這個范圍之間。

算法

具體的每次擴容或者縮容的多少Pod的算法為: 期望副本數(shù) = ceil[當(dāng)前副本數(shù) * ( 當(dāng)前指標(biāo) / 期望指標(biāo) )]

舉個栗子

  • 當(dāng)前metric值是200m,期望值是100m,那么pod副本數(shù)將會翻一倍,因為 比率為 200.0 / 100.0 = 2.0;

  • 如果當(dāng)前值是50m,我們會將pod副本數(shù)減半,因為50.0 / 100.0 == 0.5

  • 如果比率接近1.0,如0.9或1.1(即容忍度是0.1),將不會進行縮放(取決于內(nèi)置的全局參數(shù)容忍度,–horizontal-pod-autoscaler-tolerance,默認(rèn)值為0.1)。

此外,存在幾種Pod異常的情況,如下所述。

◎  Pod正在被刪除(設(shè)置了刪除時間戳):將不會計入目標(biāo)Pod副本數(shù)量。

◎ Pod的當(dāng)前指標(biāo)值無法獲得:本次探測不會將這個Pod納入目標(biāo)Pod副本數(shù)量,后續(xù)的探測會被重新納入計算范圍。

◎ 如果指標(biāo)類型是CPU使用率,則對于正在啟動但是還未達(dá)到Ready狀態(tài)的Pod,也暫時不會納入目標(biāo)副本數(shù)量范圍??梢酝ㄟ^kube-controller-manager服務(wù)的啟動參數(shù)--horizontal-pod-autoscaler-initial-readiness-delay設(shè)置首次探測Pod是否Ready的延時時間,默認(rèn)值為30s。另一個啟動參數(shù)--horizontal-pod-autoscaler-cpuinitialization-period設(shè)置首次采集Pod的CPU使用率的延時時間。

注意:

  • 每次最大擴容pod數(shù)量不會超過當(dāng)前副本數(shù)量的2倍

  • 如果某些pod的容器沒有需要的的資源metrics,自動伸縮將不會根據(jù)這些metrics進行伸縮。

  • 如果指定了targetAverageValue 或者 targetAverageUtilization,currentMetricValue是所有目標(biāo)pod的metric取均值。在檢查容忍度和確定最終值之前,會結(jié)合參考pod是否就緒、是否丟失metrics。

  • 設(shè)置了刪除時間戳的所有Pod(即處于關(guān)閉狀態(tài)的Pod)和所有失敗的Pod將被丟棄。

冷卻和延遲機制

使用HPA管理一組副本時,有可能因為metrics動態(tài)變化而導(dǎo)致副本數(shù)頻繁波動,這種現(xiàn)象叫做 “顛簸”。

想象一種場景:

當(dāng)pod所需要的CPU負(fù)荷過大,從而在創(chuàng)建一個新pod的過程中,系統(tǒng)的CPU使用量可能會同樣在有一個攀升的過程。所以,在每一次作出決策后的一段時間內(nèi),將不再進行擴展決策。對于擴容而言,這個時間段為3分鐘,縮容為5分鐘

  • --horizontal-pod-autoscaler-downscale-delay:這個參數(shù)用于告訴autoscaler做完縮容操作后需要等多久才能進行下一次縮容,默認(rèn)值是5分鐘。

  • --horizontal-pod-autoscaler-upscale-delay:這個參數(shù)用于告訴autoscaler做完擴容操作后需要等多久才能進行下一次擴容,默認(rèn)值是3分鐘。

注意:使用者需要知道調(diào)整這個參數(shù)可能造成的影響。設(shè)置得太長,HPA對負(fù)載變化的響應(yīng)也會變長;太短又會導(dǎo)致自動伸縮“顛簸”。

Pod延遲探測機制

如果指標(biāo)類型是CPU使用率,則對于正在啟動但是還未達(dá)到Ready狀態(tài)的Pod,也暫時不會納入目標(biāo)副本數(shù)量范圍。

  • 可以通過kube-controller-manager服務(wù)的啟動參數(shù)--horizontal-pod-autoscaler-initial-readiness-delay設(shè)置首次探測Pod是否Ready的延時時間,默認(rèn)值為30s。

  • 另一個啟動參數(shù)--horizontal-pod-autoscaler-cpuinitialization-period設(shè)置首次采集Pod的CPU使用率的延時時間。

五、HPA獲取自定義指標(biāo)(Custom Metrics)的底層實現(xiàn)(基于Prometheus)

Kubernetes是借助Agrregator APIServer擴展機制來實現(xiàn)Custom Metrics。Custom Metrics APIServer是一個提供查詢Metrics指標(biāo)的API服務(wù)(Prometheus的一個適配器),這個服務(wù)啟動后,kubernetes會暴露一個叫custom.metrics.k8s.io的API,當(dāng)請求這個URL時,請求通過Custom Metics APIServer去Prometheus里面去查詢對應(yīng)的指標(biāo),然后將查詢結(jié)果按照特定格式返回。

看完上述內(nèi)容,你們對K8s中HPA的原理及分析是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI