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