概述
Kubernetes Pod水平自動擴縮(Horizontal Pod Autoscaler,以下簡稱HPA)可以基于CPU利用率、內(nèi)存利用率和其他自定義的度量指標自動擴縮Pod的副本數(shù)量,以使得工作負載服務的整體度量水平與用戶所設定的目標值匹配。本文將介紹和使用騰訊云容器服務TKE的HPA功能實現(xiàn)Pod自動水平擴縮容。
使用場景
HPA自動伸縮特性使容器服務具有非常靈活的自適應能力,能夠在用戶設定內(nèi)快速擴容多個Pod副本來應對業(yè)務負載的急劇飆升,也可以在業(yè)務負載變小的情況下根據(jù)實際情況適當縮容來節(jié)省計算資源給其他的服務,整個過程自動化無須人為干預,非常適合服務波動較大,服務數(shù)量多且需要頻繁擴縮容的業(yè)務場景,如:電商服務、線上教育、金融服務等。
原理概述
Pod水平自動擴縮特性由Kubernetes API資源和控制器實現(xiàn)。資源利用指標決定控制器的行為,控制器會周期性的根據(jù)Pod資源利用情況調(diào)整服務Pod的副本數(shù)量,以使得工作負載的度量水平與用戶所設定的目標值匹配。其擴縮容流程和說明如下:
提示:目前這一功能處于beta版本,且Pod自動水平擴縮不適用于無法擴縮的對象,比如DaemonSet資源。
HPA Controller:控制HPA擴縮邏輯的控制組件。
Metrics Aggregator:度量指標聚合器。通常情況下,控制器將從一系列的聚合API(metrics.k8s.io、custom.metrics.k8s.io和external.metrics.k8s.io)中獲取度量值。metrics.k8s.io API通常由Metrics服務器提供,社區(qū)版可提供基本的CPU、內(nèi)存度量類型,相比于社區(qū)版,TKE使用自定義Metrics Server采集可支持更廣泛的的HPA的度量指標觸發(fā)類型,提供包括CPU、內(nèi)存、硬盤、網(wǎng)絡和GPU相關指標,了解更多詳細內(nèi)容參閱TKE自動伸縮指標說明[1]。
提示:控制器也可以直接從Heapster獲取指標。但自Kubernetes 1.11起,從Heapster獲取指標特性的方式已廢棄。
HPA計算目標副本數(shù)算法:TKE HPA擴縮容算法請參考工作原理[2],更多詳細算法請參閱算法細節(jié)[3]。
前提條件
·已注冊騰訊云賬戶[4]。
·已登錄騰訊云容器服務控制臺[5]。
·已創(chuàng)建TKE集群。關于創(chuàng)建集群,詳情請參見創(chuàng)建集群[6]。
操作步驟
第1步:部署測試工作負載
以Deployment資源類型的工作負載為例,創(chuàng)建一個單副本數(shù),服務類型為WEB服務的"hpa-test"工作負載,在TKE控制臺創(chuàng)建Deployment類型工作負載方法請參閱Deployment管理[7]。本示例創(chuàng)建結果如下圖所示:
第2步:配置HPA
在TKE控制臺為測試工作負載綁定一個HPA配置,關于如何綁定配置HPA請參閱HPA操作步驟[8],本示例配置當網(wǎng)絡出帶寬達到0.15Mbps(150Kbps)時觸發(fā)擴容的策略。
第3步:功能驗證
在集群中啟動一個臨時Pod對配置的HPA功能進行測試(模擬客戶端):
kubectl run-it--image alpine hpa-test--restart=Never--rm/bin/sh
在臨時Pod中運行下面命令短時間內(nèi)模擬大量請求訪問"hpa-test"服務使出口流量帶寬增大:
#hpa-test.default.svc.cluster.local為服務在集群中的域名,當需要停止腳本時按Ctrl+C即可
while true;do wget-q-O-hpa-test.default.svc.cluster.local;done
在測試Pod中執(zhí)行模擬請求命令后,通過觀察下圖中工作負載的Pod數(shù)量監(jiān)控可以看到,在16:21分時工作負載擴容副本數(shù)量至2個,由此可推斷出已經(jīng)觸發(fā)了HPA的擴容事件。
再通過下圖的工作負載的網(wǎng)絡出口帶寬監(jiān)控可以看出在16:21右左時網(wǎng)絡出口帶寬增至大概199 Kbps,已經(jīng)超過HPA設定的網(wǎng)絡出口帶寬目標值,進一步證明此時觸發(fā)HPA擴縮容算法[9]擴容了一個副本數(shù)來滿足設定的目標值,故工作負載的副本數(shù)量變成了2個。
注意:HPA擴縮容算法[10]不只以公式計算維度去控制擴縮容邏輯,而會多維度去衡量是否需要擴容或縮容,詳情可以參閱算法細節(jié)[11],所以在實際情況中可能和預期會稍有偏差。
接下來模擬縮容過程,在16:24左右手動停止執(zhí)行模擬請求的命令,從下圖監(jiān)控看到此時網(wǎng)絡出口帶寬值下降到擴容前位置,按照HPA的邏輯,此時已經(jīng)滿足工作負載縮容的條件。
但從下圖工作負載的Pod數(shù)量監(jiān)控可以看出,工作負載在16:30分時才觸發(fā)了HPA的縮容,這是因為觸發(fā)了HPA縮容有默認5分鐘的容忍時間的算法,以防止度量指標短時間波動導致的頻繁的擴縮容,詳情請參閱冷卻/延遲支持[12]。從下圖可以看出工作負載副本數(shù)在停止命令5分鐘后按照HPA擴縮容算法[13]縮容到了最初設定的1個副本數(shù)。
當TKE發(fā)生HPA擴縮容事件時,會在對應的HPA實例的事件列表展示,如下圖所示。需要注意的是事件通知列表的時間分為“首次出現(xiàn)時間”和“最后出現(xiàn)時間”,“首次出現(xiàn)時間”表示相同事件第一次出現(xiàn)的時間,”最后出現(xiàn)時間”為相同事件出現(xiàn)的最新時間,所以從下圖事件列表“最后出現(xiàn)時間”字段可以看到本示例擴容事件時間點是16:21:03,縮容事件時間是16.29:42,時間點與工作負載監(jiān)控看到的時間點相吻合。
此外,工作負載事件列表也會記錄HPA發(fā)生時工作負載的增刪副本數(shù)事件,從下圖可以看出工作負載擴縮容時間點與HPA事件列表的時間點也是吻合的,增加副本數(shù)時間點是16:21:03,減少副本數(shù)時間點是16:29:42。
總結
在本示例中主要演示了TKE的HPA功能,使用TKE自定義的網(wǎng)絡出口帶寬度量類型作為工作負載HPA的擴縮容度量指標,當工作負載實際度量值超過HPA配置的度量目標值時,HPA根據(jù)擴容算法計算出合適的副本數(shù)實現(xiàn)水平擴容,保證工作負載的度量指標滿足預期,保障工作負載健康穩(wěn)定運行;當實際度量值遠低于HPA配置的度量目標值時,HPA會在容忍時間后計算合適的副本數(shù)實現(xiàn)水平縮容,適當釋放閑置資源,達到提升資源利用率的目的,并且整個過程在HPA和工作負載事件列表都會有相應的事件記錄,使整個工作負載水平擴縮容全程可追溯。
參考資料
[1]TKE自動伸縮指標說明:https://cloud.tencent.com/document/product/457/38929
[2]工作原理:https://cloud.tencent.com/document/product/457/37384#.E5.B7.A5.E4.BD.9C.E5.8E.9F.E7.90.86
[3]算法細節(jié):https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details
[4]注冊騰訊云賬戶:https://cloud.tencent.com/register
[5]騰訊云容器服務控制臺:https://console.cloud.tencent.com/tke2
[6]創(chuàng)建集群:https://cloud.tencent.com/document/product/457/32189
[7]Deployment管理:https://cloud.tencent.com/document/product/457/31705
[8]HPA操作步驟:https://cloud.tencent.com/document/product/457/37384#.E6.93.8D.E4.BD.9C.E6.AD.A5.E9.AA.A4
[9]擴縮容算法:https://cloud.tencent.com/document/product/457/37384#.E5.B7.A5.E4.BD.9C.E5.8E.9F.E7.90.86
[10]擴縮容算法:https://cloud.tencent.com/document/product/457/37384#.E5.B7.A5.E4.BD.9C.E5.8E.9F.E7.90.86
[11]算法細節(jié):https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details
[12]冷卻/延遲支持:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/#冷卻-延遲支持
[13]擴縮容算法:https://cloud.tencent.com/document/product/457/37384#.E5.B7.A5.E4.BD.9C.E5.8E.9F.E7.90.86