與虛擬機相比,容器技術具有大量的優勢。我們不僅要了解容器是如何實現多云應用程序可移植性的承諾,而且也要知道其不足之處。
對于那些希望跨云平臺實現應用程序可移植性的企業來說,容器技術可以是一個可行的選項。通過精心規劃和使用合適的工具,IT團隊是可以直面挑戰并在多云環境中實現容器技術優勢的。
為了了解在多云環境下實現應用程序可移植性的潛在好處和風險,我們可將它與它的替代解決方案虛擬機進行比較。容器與虛擬機的不同之處在于:應用程序鏡像與這些鏡像中所包含的內容,以及生命周期管理等方面。
虛擬機部署要求應用程序鏡像具有操作系統、中間件和應用軟件的完整軟件包。因此,這些鏡像可以在符合應用程需求的硬件功能和資源容量(例如CPU和內存)的任何虛擬機上正常運行。只要主機服務器的虛擬機管理程序與虛擬機兼容,并且應用鏡像所使用的任何都可以在云平臺上使用,那么用戶也就沒有什么重大的執行方面問題。
另一方面,容器應用鏡像并不包含操作系統或所有的中間件組件。所以,它們的正常運行主要依賴于容器主機和容器軟件本身。這意味著,如果容器需要跨云供應商的不同應用程序鏡像,那么它們可能會在多云環境中造成挑戰。
但是,大多數容器軟件都將應用打包在一個標準容器中間件集合中,然后那個容器就可以跨容器軟件將要運行的任意主機上實現可移植性。只要用戶能夠確保每一臺基礎設施即服務(IaaS)主機上都部署了相同可用的操作系統和容器軟件,那么這種可移植性一般來說就會正常發揮作用。但如果用戶無法確保上述要求,那么容器就根本無法保持可移植性。
對于涉及容器技術的多云規劃來說,可選擇都基于相同容器主機操作系統和框架的公共云資源和私有云資源。如果用戶所使用的操作系統或中間件功能并未在所有的操作系統發布版本中得到支持,那么就必須特別謹慎了。通過使用標準基,用戶可能可以對其容器化的應用實現跨云平臺的遷移而不會出現執行問題。否則,用戶則需要避免多云環境部署或需要遷移至虛擬機。
多云環境容器的運行效益盡管存在著一些規劃方面的挑戰,用戶還是能夠在多云部署中實現容器的一些優勢。
例如在運行方面,Docker和其他容器系統會包括一個配置和參數架構,這個架構會將所有工作負載運行所需的組件都打包在一個單一的軟件包中,從而更便于針對特定環境調試容器鏡像。在虛擬機系統中,配置和參數都是根本不在管理范圍內的——虛擬機的操作系統、驅動程序和應用程序都是完全與管理和底層主機隔離的。
因此,運行人員必須為每一家云供應商準備一個不同的鏡像,從而帶來了更多的工作量和導致錯誤的機會。這一點不同可以實現不同云供應商之間的容器可移植性。但是,用戶將需要確保所有特定供應商組件與應用程序配置之間的無關性,以便最大限度利用這個功能。換而言之,容器對特定供應商API或其他功能的依賴程度越高,遷移的難度也越大。
網絡與多組件應用網絡是容器技術發揮其優越性的另一個領域。多組件應用(例如那些基于微服務器的應用)都是多云計算環境中常見的應用,而那些應用組件都必須處于聯通狀態。虛擬機沒有特定的網絡模式;應用在操作系統和中間件的支持下能夠完成相當多的工作 。這就要求運行人員為應用組件建立一個網絡以便能夠在多云環境中實現應用程序組件在每一個IaaS平臺上的可用性。不同的是,容器設定了一個通用的子網模型來實現連接,這種做法更易于管理。
管理人員可以更容易地擴展容器系統并通過容器集群提高其彈性。一個集群為應用組件定義了一系列的托管點,并且它們都是便攜的。但是,在多云環境中還是需要花一點功夫提高容器組件的可擴展性和和彈性,因為一般情況下集群會共享一個子網。當他們需要跨越云平臺邊界時,這就可能會帶來挑戰,因為不同的供應商會使用不同的子網劃分規則或限制(例如不同節點之間的負載平衡),而這些規則或限制會影響集群的功能。
對于擴展規模和提高跨多云部署中多組件彈性來說,虛擬機通常是更好的選擇。這是因為虛擬機需要更精細的網絡詳細信息,從而降低遷移至另一家供應商時出現錯誤的風險。
諸如Docker之類的單個容器平臺并不適用于多云環境中的可移植性,至少不適用于實際的IT運營環境。但是,諸如Kubernetes之類的開發運營工具可以解決這一問題,而且這些工具有可能會發展成為支持虛擬云的概念,或者是可以跨越私有云和多云的一個單一模式。