如今大部分中小企業或團隊都是使用雲平臺來部署本身的服務,如阿里雲,亞馬遜雲等。通常來講,業務的負載都具有必定的規律,好比天天集中在某幾個小時,或呈現時間段週期性波峯、波谷交替的現象,以下圖
node
若是使用ECS來部署服務,則可能大部分時間ECS的資源沒有獲得充分利用,形成成本浪費,尤爲對於像GPU之類成本較高的資源就更加了。這個時候,咱們能夠考慮使用雲集羣的混搭模式來節約成本。服務器
假設有一個這樣的業務場景,包括以下特色及要求:微信
整個系統包括業務服務與兩層視覺服務負載均衡
各層服務之間調用需作負載均衡less
天天的業務量主要集中在上午幾個小時阿里雲
平時業務量較低時仍要保證服務可用命令行
儘量下降成本,尤爲是GPU服務器成本(GPU貴啊)blog
如今各大雲平臺都已經提供容器雲服務,如阿里雲有基於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 (一個不僅有實戰乾貨的技術公衆號,及時獲取更新內容)
———————————————————————————————————————————————————————————————