背景
最近幾年基于容器技術的資源配置設定方式越來越流行,kubernetes作為容器領域事實上的容器編排技術也開始在企業中逐漸落地。借助容器/微服務/DevOps等技術,新生代的雲原生應用得到了極大的普及。但在企業的應用生态中,目前雲原生系統僅占很小的一部分,尚存在大量的傳統應用無法享受容器技術帶來的好處,業界需要一種專門針對傳統應用快速上雲的解決方案。
博雲走訪調研了多家企業客戶,發現目前傳統應用(非微服務架構)遷移到容器雲平台,主要面臨以下問題:
- 目前有為數不少的legacy應用,無法或很難進行改造(微服務化,容器化等),需要安裝各種agent。
- 傳統應用往往部署在虛拟機上,而虛拟機啟動較慢,不能滿足業務靈活性,彈性的需求。
- 虛拟化技術堆棧較重,資源損耗大,客戶希望能夠充分發揮強大伺服器硬體的能力。
- 傳統應用的運維人員更傾向于将應用系統視為pet而不是cattle,發現問題後更希望能手動去做調整。
- 應用對性能敏感,容器環境下的高密度部署引起的CPU上下文切換等性能造成很大影響。
針對以上痛點,虛拟機和容器都不是最優解。經過廣泛的技術調研,我們發現胖容器技術是一種可行且合理的解決方案。首先,從技術的發展趨勢來看,胖容器技術是容器發展早期由容器領域的先行者廣泛采用的一種既可以擷取容器輕量的優勢又可以廣泛支援傳統應用的一種技術。但随着容器的快速普及,胖容器技術作為一種過度階段的技術并沒有得到發揚光大。其次,胖容器的實作方式也有多種,多家企業或開源組織也推出了形态各異的解決方案,從技術實作上基本可以分類為兩種:vm-based和container-based。這些解決方案也基本上都針對kubernetes進行了內建,非常适合于當今容器雲平台的建設。
博雲胖容器技術BeyondVM
BeyondVM是一種container-based實作的胖容器技術,相容OCI标準,可以靈活的與Kubernetes叢集進行內建。

01
1号程序
容器技術推崇單程序模型,而胖容器技術與容器技術一個明顯的差異點就是在胖容器内部運作一個init程序,而傳統的容器(如 docker 容器等)将容器鏡像中指定的 CMD作為容器内 pid=1 的程序。BeyondVM技術支援使用systemd和sbin/init作為init程序。init程式的引入,使得胖容器内的運維工作成為可能,也為傳統應用上雲提供了很大的便利。
02
容器的CMD
容器的CMD代表了容器内部運作的業務系統。beyondVM技術會自動将其托管在Init程序下,運維人員可以友善的對業務系統進行運維工作。
03
系統元件或特定agent
傳統應用和應用的運維人員依賴衆多系統元件,比如ssh/rsyslog/crond等。這部分傳統應用上雲時可以直接安裝相應元件并做成鏡像,這樣既擷取了容器傳遞可移植性強的優勢,又保留了傳統的使用習慣。
04
資源視圖隔離
傳統的應用系統經過多年的維護,往往具有多種的優化措施,例如業務上線後,自動根據環境資源大小調整運作時參數。但傳統容器環境下,即使為容器設定了cpu/mem配額,容器内部的業務系統仍然會看到主機的計算資源。這對傳統的應用如典型的java應用造成了很多問題。BeyondVM技術利用lxcfs技術對容器的資源進行了視圖隔離,進而讓内部運作的業務系統能自動感覺容器自身的計算資源。
05
業務啟動前和停止後的鈎子處理
因為BeyondVM技術與Kubernetes進行了內建,是以可以天然利用kubernetes為pod提供的鈎子函數實作業務系統啟動前和停止後需要的處理工作。
與容器、虛拟機的技術對比
虛拟機 | 容器 | BeyondVM | |
模型 | 基于kvm+qemu,核心隔離 | 基于cgroup+namespace,共享核心
|
|
資源消耗 | 重 | 輕 | |
鏡像體積 | 大 | 小 | |
程序模型 | 虛拟機内可以運作多個程序 | 容器内單程序 | BeyondVM内部可以運作多個程序 |
狀态保持 |
|
|
|
彈性伸縮 | 狀态重,彈性伸縮慢 | 手動、自動快速彈性伸縮 | |
移植性 | 差 | 強 | 中 |
微服務、DevOps支援 | |||
Kubernetes支援 | 支援 | ||
主要場景 |
|
|
|
BeyondVM核心優勢
BeyondVM 提供相對完備的程序樹和系統服務的容器環境,使得業務獲得虛拟機的運作體驗,無需改變代碼即可實作向容器平台的遷移。利用BeyondVM技術,可以實作:
- 比虛拟機輕量的資源配置設定能力,以友善資源快速申請、彈性。
- 類似虛拟機的使用體驗,可登陸,可任意安裝元件。
- 有固定IP位址,胖容器從建立到删除,IP位址保持不變。
- 可以通過ssh遠端登入系統。
- 登入登入後,可以通過傳統的yum指令安裝标準的軟體包, 比如mysq,apache。
- 可以安裝運維類的agent,不影響應用的正常部署流程。
- 資源隔離,如CPU、記憶體等。
- JVM,監控類工具看到的資源不是整個實體機的資源,而是真實配置設定給胖容器使用的資源。
展望
目前容器雲平台建設的過程中,上線的往往是新的業務系統;企業中大量的存量業務仍然運作在實體機或虛拟機環境中。雖然目前已經有部分企業碰到了傳統應用上雲困難的問題,但整體上這部分需求還不強烈。我們有理由相信,随着容器技術在企業生态中的占比逐漸增加,傳統應用上雲的需求會逐漸釋放出來,胖容器技術将在其中發揮重要作用。