VMM啟動時間和內存占用對比
2. 容器管理服務
支持虛擬機容器運行時的容器管理服務也有多種開源方案,例如containerd/cri-o,kata-container和firecracker-containerd等。經過比較,容器團隊選擇了cri-o + firecracker-containerd的組合。這二者在功能上能夠滿足單機容器管理的需求,而且和其他選型相比,代碼架構更加清晰,調用鏈路簡單明了,便于后續(xù)根據(jù)產品需求定制和改造。
3. 容器調度服務
Kubernetes已經成為了容器調度的事實標準,具備豐富的功能和良好的可擴展性。因此容器團隊采用Kubernetes作為基本調度框架,并根據(jù)產品需求做相關改造,最終基本的服務架構如下所示:
優(yōu)化改進
雖然采用開源方案可以加快開發(fā)進度,但為滿足產品需求仍需解決一些問題,主要包括以下幾個方面:
1. 容器鏡像
在標準的容器鏡像實現(xiàn)中,鏡像是通過分層結構存儲在宿主上的。當創(chuàng)建容器時,容器運行時會在鏡像層之上創(chuàng)建一個可寫層,并掛載在宿主上供容器實例使用。但Cube容器并不是直接在宿主上運行的,也不需要在宿主上掛載容器根目錄。因此容器團隊修改了cri-o中鏡像層的相關實現(xiàn),直接將容器可寫層以塊設備的方式掛載到輕量級虛擬機中而非宿主上,減低了宿主對Cube容器的干擾。
另外,為了解決新鏡像拉取緩慢導致的容器實例啟動慢的問題,容器團隊提出了鏡像遠程掛載的解決方案。將容器鏡像以塊設備的形式存儲在緩存集群,當需要在此鏡像上生成容器實例時,先將容器鏡像通過遠程掛載的形式掛載到宿主上,然后容器運行時會在宿主上創(chuàng)建一層可寫層生成容器實例。同時后臺會將遠程鏡像同步到宿主本地,進一步加速讀取,降低集群風險。上述方法可使宿主上首次獲取鏡像的時間縮短至3s以下,并有進一步優(yōu)化空間。目前這一功能以鏡像緩存的產品形式提供給用戶使用,并正在逐步整合到普通鏡像拉取過程中。
2. 使用公有云資源
網絡方面,Cube容器的網絡模型和云主機的基本相同。在將相關網絡功能以cni插件的形式實現(xiàn)之后,Cube容器就可以很好的接入到公有云vpc網絡中。
存儲方面,Cube容器目前支持了兩種類型的存儲:可以多點讀寫的網絡文件系統(tǒng)nfs和僅單點讀寫的云硬盤udisk。在文件存儲功能上,Cube產品實現(xiàn)了在輕量級虛擬機中自動掛載nfs的功能,用戶只需在配置文件中指定好掛載點和掛載參數(shù),就能直接在容器中使用網絡文件系統(tǒng),并可以同時支持vpc網絡內用戶自建的nfs和UCloud公有云產品ufs。在塊設備功能上,容器團隊擴展了firecracker塊設備的實現(xiàn)。通過添加對vhost-user協(xié)議的支持,Cube輕量級虛擬機可以直接對接到spdk服務,從而實現(xiàn)了對高性能的rssd型云硬盤掛載和使用。
3. 容器運行環(huán)境
為了減少額外資源消耗,容器團隊在容器管理服務和容器運行時上做了大量優(yōu)化工作。
UCloud優(yōu)刻得容器團隊修改了cri-o管理容器組的架構,采用了單pod對應單shim的模型。通過一個shim管理一個pod內全部容器,可以顯著的降低shim資源消耗,簡化容器管理。對于輕量級虛擬機,UCloud優(yōu)刻得容器團隊也對kernel/rootfs/init進程等做了充分地精簡優(yōu)化,只保留了最基本的功能,以加快啟動速度,減小安全攻擊面,降低資源消耗。另外,容器團隊還在輕量級虛擬機中內置了infra container的實現(xiàn),Cube作為pod運行時可以不必掛載額外的infra容器。
4. k8s改造
Kubernetes作為一個通用的容器調度框架,能夠滿足大部分容器管理的需求。但針對Cube特定的使用場景,容器團隊仍需對k8s組件做一些改造。在控制面,容器團隊采用了自定義的調度器,可以更好的滿足多租戶場景下任務優(yōu)先級,調度速度,資源管理的需求。在宿主節(jié)點上,鑒于Cube容器運行時的特點,UCloud優(yōu)刻得容器團隊精簡了一些不需要kubelet實現(xiàn)的功能,例如在宿主上掛載configmap/volume目錄,運行cni插件,收集特定目錄日志等,增強了容器與宿主之間的隔離安全性。
Cube未來展望
在完成了上述開發(fā)改造后,Cube產品成功上線,并取得良好效果。后續(xù)Cube產品會繼續(xù)沿著幫助用戶提升效率、降低開銷、簡化維護、節(jié)約成本的思路持續(xù)迭代更新。在容器性能方面,UCloud優(yōu)刻得容器團隊會繼續(xù)優(yōu)化輕量級虛擬機IO路徑,減少虛擬化及管理組件的性能損耗,確保用戶容器實例穩(wěn)定高效運行。在服務管理方面,Cube產品層面會推出多種的容器管理控制器,并實現(xiàn)Cube實例直接接入Kubernetes集群的能力,為用戶提供多層次的資源調度方式,方便用戶按實際需要管理維護。