現(xiàn)在大部分中小企業(yè)或團隊都是使用云平臺來部署自己的服務,如阿里云,亞馬遜云等。一般來說,業(yè)務的負載都具備一定的規(guī)律,比如每天集中在某幾個小時,或呈現(xiàn)時間段周期性波峰、波谷交替的現(xiàn)象,如下圖
如果使用ECS來部署服務,則可能大部分時間ECS的資源沒有得到充分利用,造成成本浪費,尤其對于像GPU之類成本較高的資源就更加了。這個時候,我們可以考慮使用云集群的混搭模式來節(jié)約成本。
?
業(yè)務場景
假設有一個這樣的業(yè)務場景,包括如下特點及要求:
*
整個系統(tǒng)包括業(yè)務服務與兩層視覺服務
*
各層服務之間調(diào)用需做負載均衡
*
每天的業(yè)務量主要集中在上午幾個小時
*
平時業(yè)務量較低時仍要保證服務可用
*
盡可能降低成本,尤其是GPU服務器成本(GPU貴?。?br>
?
?
k8s云集群混搭模式
現(xiàn)在各大云平臺都已經(jīng)提供容器云服務,如阿里云有基于ECI(彈性容器實例)的Serverless
Kubernetes集群服務,基于ECS節(jié)點不需要提供master的Kubernetes托管版集群服務,及自己提供master的Kubernetes專有版集群服務等。為了迎合類似上述業(yè)務場景的需求,也提供了Kubernetes
+ virtual node(虛擬節(jié)點)的混合集群服務,如下圖所示
其中的虛擬節(jié)點基于ECI支持多種功能,如GPU容器實例、大規(guī)格容器實例等,增強了Kubernetes集群的彈性,使集群不局限于ECS節(jié)點的資源,做到彈性無限擴容。
?
部署方案
結(jié)合前面的業(yè)務場景,我們可以采用k8s的混合集群服務來部署我們的項目,如下圖
?
實現(xiàn)步驟:
*
創(chuàng)建Kubernetes托管版集群
*
加入已有ECS節(jié)點
*
添加一個虛擬節(jié)點,通過添加應用 ack-virtual-node 來實現(xiàn)
*
分別創(chuàng)建無狀態(tài)的業(yè)務Deployment、AI-1 Deployment、AI-2 Deployment(對應三層服務)
*
分別在業(yè)務Deployment上創(chuàng)建公網(wǎng)SLB,AI-1 Deployment、AI-2 Deployment上創(chuàng)建內(nèi)網(wǎng)SLB
*
分別在各Deployment上根據(jù)CPU或內(nèi)存使用閾值配置彈性水平伸縮HPA
*
根據(jù)需要可以在某個或某些Deployment上配置定時伸縮,通過添加應用 ack-kubernetes-cronhpa-controller 來實現(xiàn)
?
因為水平伸縮一般需要一定時間,延遲可能會對業(yè)務造成影響,所以在業(yè)務負載比較規(guī)律的時候,可以通過定時伸縮(就是定時擴展到多少個容器,再定時收縮到多少個容器)來改善;目前定時伸縮配置的查看與更新只能通過kubectl命令行進行。
總結(jié)
按照官方文檔的計費方式,一個普通的2核8G的ECS一年大概費用是2600左右,如果通過容器服務的方式(按秒計費),假設每天起8小時,則一年大概費用1550左右,如果業(yè)務負載再集中到幾個小時,費用會更低,對于比較稀缺又昂貴的GPU服務就更加了。但是如果服務全部按容器24小時租賃,其成本就又比ECS貴了(一年約4600),所以在平時業(yè)務負載較低的時候,可以將容器調(diào)度到ECS上保障服務的提供,業(yè)務負載高時,通過HPA或cronHPA的方式動態(tài)伸縮到虛擬節(jié)點上。對于業(yè)務負載具有一定規(guī)律的服務來說,采用這種混搭的部署方式將極大地降低你的云服務成本。不過目前k8s云集群服務應該推出時間不久,產(chǎn)品的易用性還比較低,對不具備一定容器與編排基礎(chǔ)的人使用門檻相對較高。
?
歡迎關(guān)注我的微信公眾號:jboost-ksxy (一個不只有實戰(zhàn)干貨的技術(shù)公眾號,及時獲取更新內(nèi)容)
———————————————————————————————————————————————————————————————
熱門工具 換一換