從K8s的聲明式設(shè)計(jì)理念談起
Pod模板
K8s最優(yōu)雅精妙的一個(gè)設(shè)計(jì)理念在于聲明式API的運(yùn)用,而Deployment又是其中的集大成者。
如果沒有Deployment,我們需要管理上萬(wàn)的單獨(dú)Pod,為每一個(gè)Pod設(shè)置合適的資源需求,容器鏡像版本,Label,Taints等屬性。同時(shí),我們還需要保證每一個(gè)業(yè)務(wù)對(duì)應(yīng)的Pod數(shù)量在合適的值,來(lái)適應(yīng)流量波動(dòng)并達(dá)到負(fù)載均衡。而通過(guò)Deployment提供的Pod模板的能力,我們可以編排Pod:模板中的屬性值代表我們的期望狀態(tài),Deployment會(huì)自動(dòng)維持管理的Pod在我們的期望狀態(tài),而這正是K8s的使用者真正關(guān)心的(我們并不關(guān)注從當(dāng)前狀態(tài)到理想狀態(tài)是如何達(dá)成的)。
Node模板
Deployment提供了Pod模板的能力,那節(jié)點(diǎn)呢?是否我們也可以提供類似節(jié)點(diǎn)模板的能力讓客戶去管理他們成千上萬(wàn)的節(jié)點(diǎn),無(wú)需一遍遍手動(dòng)配置參數(shù)新建節(jié)點(diǎn),反復(fù)封鎖和驅(qū)逐來(lái)釋放無(wú)用節(jié)點(diǎn)?基于聲明式這一種云原生設(shè)計(jì)理念,TKE推出了節(jié)點(diǎn)池,用戶可以利用節(jié)點(diǎn)模板功能,統(tǒng)一管理節(jié)點(diǎn),不需要一遍遍手動(dòng)填寫創(chuàng)建節(jié)點(diǎn)參數(shù),也不需要人工計(jì)算可以容納業(yè)務(wù)流量的節(jié)點(diǎn)數(shù)目。后續(xù)TKE會(huì)圍繞節(jié)點(diǎn)池規(guī)劃自動(dòng)升級(jí)和自動(dòng)修復(fù)功能,用戶只需關(guān)注節(jié)點(diǎn)池內(nèi)節(jié)點(diǎn)是否在期望K8s版本以及期望狀態(tài)即可。
其他生態(tài)能力
為了豐富聲明式的使用方式,節(jié)點(diǎn)池也會(huì)規(guī)劃通過(guò)CRD來(lái)管理節(jié)點(diǎn)池,服務(wù)偏好K8s API的客戶。您也可以把節(jié)點(diǎn)池和其他云資源統(tǒng)一編排,TKE與騰訊云Terraform團(tuán)隊(duì)合作,支持基于IaC(Infrastructure-as-code)的理念來(lái)編排節(jié)點(diǎn)池,該功能即將于12月底上線。
使用場(chǎng)景
有TKE重點(diǎn)客戶反饋:由于業(yè)務(wù)增長(zhǎng),客戶每天都需要擴(kuò)百余臺(tái)機(jī)器,通過(guò)節(jié)點(diǎn)池只需一鍵調(diào)整數(shù)量即可完成擴(kuò)容,體驗(yàn)比單節(jié)點(diǎn)模式好太多(需要填很多參數(shù),并且創(chuàng)建后不好管理)。此外,在內(nèi)測(cè)階段,云原生團(tuán)隊(duì)在與客戶的交流過(guò)程中,總結(jié)了這幾類典型問(wèn)題及解決方案:
節(jié)點(diǎn)池架構(gòu)概覽
如果您集群中創(chuàng)建了伸縮組,節(jié)點(diǎn)池全量之后仍然可以繼續(xù)使用這些伸縮組。但請(qǐng)注意,節(jié)點(diǎn)池全量后TKE不會(huì)對(duì)舊版伸縮組進(jìn)行后續(xù)功能維護(hù)及迭代,請(qǐng)您盡快使用TKE提供的接口(API/控制臺(tái))將伸縮組轉(zhuǎn)換成節(jié)點(diǎn)池(節(jié)點(diǎn)池覆蓋伸縮組的所有功能)。
·借助節(jié)點(diǎn)池的節(jié)點(diǎn)模板功能,您可以方便快捷地創(chuàng)建、管理和銷毀節(jié)點(diǎn)。
·借助節(jié)點(diǎn)池的彈性伸縮功能,您可以實(shí)現(xiàn)節(jié)點(diǎn)的動(dòng)態(tài)擴(kuò)縮容。當(dāng)集群中出現(xiàn)因資源不足而無(wú)法調(diào)度的實(shí)例(Pod)時(shí),自動(dòng)觸發(fā)擴(kuò)容,為您減少人力成本。當(dāng)滿足節(jié)點(diǎn)空閑等縮容條件時(shí),自動(dòng)觸發(fā)縮容,為您節(jié)約資源成本。
節(jié)點(diǎn)池產(chǎn)品優(yōu)勢(shì)
為了解決以上用戶的痛點(diǎn)問(wèn)題,節(jié)點(diǎn)池提供了以下的功能特性。
高可用
您可以為一個(gè)節(jié)點(diǎn)池配置集群VPC下的多個(gè)子網(wǎng),達(dá)到跨可用區(qū)容災(zāi)的效果。另外您可為節(jié)點(diǎn)池配置多機(jī)型,降低由資源售罄導(dǎo)致擴(kuò)容失敗的風(fēng)險(xiǎn)。
·多子網(wǎng)策略
·PRIORITY(默認(rèn)策略),按照子網(wǎng)列表的順序作為優(yōu)先級(jí)來(lái)嘗試創(chuàng)建實(shí)例
·EQUALITY(均勻打散):每次擴(kuò)容活動(dòng)選擇當(dāng)前實(shí)例數(shù)最少的子網(wǎng)進(jìn)行擴(kuò)容
·多機(jī)型策略支持10種機(jī)型并支持優(yōu)先級(jí),按照機(jī)型列表的順序作為優(yōu)先級(jí)來(lái)嘗試創(chuàng)建實(shí)例
·多子網(wǎng)機(jī)型協(xié)同策略如果您為節(jié)點(diǎn)池同時(shí)配置了多子網(wǎng)和多機(jī)型,我們會(huì)先保證多機(jī)型的策略,后保證多可用區(qū)/子網(wǎng)的策略。例如多機(jī)型A、B,多子網(wǎng)1、2、3(PRIORITY策略),會(huì)按照A1、A2、A3、B1、B2、B3進(jìn)行嘗試區(qū)擴(kuò)容。如果A1售罄,會(huì)嘗試A2,而非B1。
自動(dòng)化
節(jié)點(diǎn)池自動(dòng)擴(kuò)縮容依賴Cluster Autoscaler實(shí)現(xiàn),可與HPA無(wú)縫聯(lián)動(dòng),實(shí)現(xiàn)從應(yīng)用擴(kuò)縮容到集群擴(kuò)縮容的平滑過(guò)渡。
·節(jié)點(diǎn)池能夠在容器不夠資源分配的情況下按需擴(kuò)容
·能夠監(jiān)控節(jié)點(diǎn)的CPU、內(nèi)存,自動(dòng)縮容閑置節(jié)點(diǎn)
節(jié)點(diǎn)池提供兩種擴(kuò)縮容模式供您按需選擇。除了默認(rèn)的釋放模式(擴(kuò)容時(shí)創(chuàng)建節(jié)點(diǎn),縮容時(shí)釋放節(jié)點(diǎn)),節(jié)點(diǎn)池還支持與CVM關(guān)機(jī)不收費(fèi)對(duì)接的關(guān)機(jī)模式(擴(kuò)容時(shí)優(yōu)先開機(jī)已關(guān)機(jī)節(jié)點(diǎn),縮容時(shí)優(yōu)先關(guān)機(jī)空閑節(jié)點(diǎn)),可以達(dá)到秒級(jí)熱啟動(dòng)的效果,實(shí)現(xiàn)更高的擴(kuò)縮容效率。
易審計(jì)
考慮到節(jié)點(diǎn)池日常運(yùn)維的場(chǎng)景,我們也在可觀測(cè)性方面提供了保障。您可追蹤節(jié)點(diǎn)池關(guān)聯(lián)的擴(kuò)縮容活動(dòng)(活動(dòng)相關(guān)的觸發(fā)條件、時(shí)間、涉及實(shí)例、成功/失敗原因),同時(shí)您還可以通過(guò)事件持久化能力查看Cluster Autoscaler相關(guān)的集群級(jí)別擴(kuò)縮容記錄。
更多細(xì)節(jié)請(qǐng)查看查看節(jié)點(diǎn)池伸縮記錄:https://cloud.tencent.com/document/product/457/48538
通過(guò)查看伸縮記錄,您可在短時(shí)間內(nèi)定位并及時(shí)解決問(wèn)題(例如因資源售罄導(dǎo)致的擴(kuò)容失敗,可以通過(guò)跨可用區(qū)部署/配置多機(jī)型來(lái)解決)。
省成本
節(jié)點(diǎn)池支持多種計(jì)費(fèi)模式(按量計(jì)費(fèi)/包年包月/競(jìng)價(jià)實(shí)例),您可按需選擇,節(jié)約成本。
當(dāng)業(yè)務(wù)需求增加時(shí),無(wú)縫地增加適量CVM實(shí)例,節(jié)省人力成本。
當(dāng)業(yè)務(wù)需求下降時(shí),自動(dòng)釋放不需要的CVM實(shí)例,提高設(shè)備利用率,為您節(jié)省部署和實(shí)例成本。
后續(xù)節(jié)點(diǎn)池會(huì)規(guī)劃圍繞競(jìng)價(jià)實(shí)例的增強(qiáng)功能,助力您實(shí)現(xiàn)降本增效。
易用性
節(jié)點(diǎn)池提供多種擴(kuò)縮容以及節(jié)點(diǎn)管理相關(guān)的靈活配置,您可以根據(jù)業(yè)務(wù)性質(zhì)以及安全考慮自行搭配使用。
·支持為節(jié)點(diǎn)設(shè)置縮容保護(hù)您可以標(biāo)記重要業(yè)務(wù)節(jié)點(diǎn),標(biāo)記后節(jié)點(diǎn)不會(huì)在縮容時(shí)被釋放。
·快速遷移已有節(jié)點(diǎn)可手動(dòng)加入已有節(jié)點(diǎn)到同規(guī)格的節(jié)點(diǎn)池(CPU、內(nèi)存、GPU、AMD/ARM),實(shí)現(xiàn)節(jié)點(diǎn)的規(guī)范分組管理。同時(shí),手動(dòng)加入節(jié)點(diǎn)將繼承節(jié)點(diǎn)池的Label和Taints,且這些節(jié)點(diǎn)只能被手動(dòng)移出節(jié)點(diǎn)池,不受彈性擴(kuò)縮容/調(diào)整節(jié)點(diǎn)池?cái)?shù)目影響。
·支持靈活的擴(kuò)縮容參數(shù)配置您可以配置靈活的擴(kuò)縮容參數(shù),本文將在下一節(jié)-擴(kuò)縮容原理中詳細(xì)展開。
集群擴(kuò)縮容原理
彈性擴(kuò)容原理
集群彈性擴(kuò)容流程如下:
1.CA(Cluster Autoscaler)監(jiān)測(cè)到有因無(wú)法調(diào)度而Pending的pod
2.CA根據(jù)每個(gè)節(jié)點(diǎn)池的節(jié)點(diǎn)模板進(jìn)行調(diào)度判斷,挑選合適的節(jié)點(diǎn)模板
3.如果2中有多個(gè)模板合適,CA采用expanders從多個(gè)模板挑選最優(yōu)的一個(gè),并對(duì)對(duì)應(yīng)節(jié)點(diǎn)池進(jìn)行擴(kuò)容。優(yōu)選算法有如下幾個(gè):
·random:隨機(jī)挑選一個(gè)節(jié)點(diǎn)池
·Most-pods:挑選能調(diào)度最多pod的節(jié)點(diǎn)池
·Least-waste:挑選調(diào)度后剩余資源最少的節(jié)點(diǎn)池
·其他社區(qū)expanders(最小成本策略、節(jié)點(diǎn)池優(yōu)先級(jí)策略)
4.對(duì)指定節(jié)點(diǎn)池?cái)U(kuò)容(根據(jù)多子網(wǎng)多機(jī)型策略),提供兩種重試策略,提高容錯(cuò)性。
·快速重試:立即重試,在較短時(shí)間內(nèi)快速重試,連續(xù)失敗超過(guò)一定次數(shù)(5次)后不再重試
·間隔遞增重試:隨著連續(xù)失敗次數(shù)的增加,重試間隔逐漸增大,重試間隔從秒級(jí)到1天不等,1-3次重試是立刻重試,4-6次失敗間隔60s,7-10次600s,11-15次1800s,16-20次3600s,20次以上是86400s
彈性縮容原理
集群彈性縮容流程如下:
1.CA(Cluster Autoscaler)監(jiān)測(cè)到利用率(取cpu利用率和mem利用率的最大值)低于設(shè)定的節(jié)點(diǎn)。(可設(shè)置Daemonset類型不計(jì)入pod占用資源)
2.CA判斷該節(jié)點(diǎn)是否符合縮容條件
·節(jié)點(diǎn)空閑時(shí)長(zhǎng)要求(默認(rèn)10分鐘)
·集群擴(kuò)容緩沖時(shí)間要求(默認(rèn)10分鐘)
3.可設(shè)置不縮容條件如下
·含有本地存儲(chǔ)的節(jié)點(diǎn)
·含有Kube-system namespace下
·非DaemonSet管理的pod的節(jié)點(diǎn)
4.完全空閑節(jié)點(diǎn)可并發(fā)縮容,可設(shè)置最大并發(fā)縮容數(shù)。請(qǐng)注意,非完全空閑節(jié)點(diǎn)將逐個(gè)縮容,降低對(duì)業(yè)務(wù)的影響。
節(jié)點(diǎn)池注意事項(xiàng)
節(jié)點(diǎn)池底層依賴騰訊云的彈性伸縮產(chǎn)品,我們建議通過(guò)節(jié)點(diǎn)池控制臺(tái)/API來(lái)管理節(jié)點(diǎn)池,在彈性伸縮控制臺(tái)操作導(dǎo)致的后果TKE無(wú)法保障,具體注意事項(xiàng)請(qǐng)參見如下表格:
參考資料
[1]節(jié)點(diǎn)池概述:https://cloud.tencent.com/document/product/457/43719
[2]創(chuàng)建節(jié)點(diǎn)池:https://cloud.tencent.com/document/product/457/43735
[3]查看節(jié)點(diǎn)池:https://cloud.tencent.com/document/product/457/43736
[4]調(diào)整節(jié)點(diǎn)池:https://cloud.tencent.com/document/product/457/43737
[5]刪除節(jié)點(diǎn)池:https://cloud.tencent.com/document/product/457/43738
[6]擴(kuò)縮容相關(guān)Q&A:https://cloud.tencent.com/document/product/457/32316
[7]Cluster Autoscaler FAQ:https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md