當行業觀察者回顧2015年重大主題時,應用容器一定會在這一年的技術排名中名列前茅。似乎已經到處都是容器,從公有云—AWS發布了EC2容器服務,到私有云—VMware提供了vSphere的容器支持預覽都是。
容器的炒作甚至令有經驗的專業人士都倍感折磨,但大多數人對基礎知識仍理解有限:比如容器和傳統虛擬的區別是什么,各自優缺點是什么,有哪些用戶案例等。據2015 OpenStack峰會一位與會者的文章,甚至在懂行的人群中具備容器經驗人也是很少的:
在開幕式的主旨演講中,當其中一位發言者詢問6000名與會者“‘在座有多少人對進一步了解Docker感興趣?’時,似乎所有人都舉手了。然后他又問‘有多少人在生產中使用了Docker?’幾乎所有的手馬上都放下來了。”盡管沒有東西能夠代替親自試驗,我還是想通過聚焦應用容器基礎,把一些有前景的使用場景過一遍,以及討論在以VM為中心的管理環境下的應用部署和監控問題來引導大家的學習過程。
應用容器優缺點
應用開發者對性能的追求永無止境,這是容器如此流行的原因之一。它們比VM更加高效,內存封裝要小很多,而這又轉化為更快的應用啟動和停止時間。一組基準測試(圖1、圖2)發現Docker容器使用基于內核虛機(KVM)實例1/3的內存就能在前者所需一半的時間內啟動服務器。其他測試表明,更大的性能改進可以讓應用啟動時間在毫秒級完成。
圖1:Docker容器使用內存比KVM實例更少
圖2:Docker容器啟動時間只有KVM實例的一半
原生容器應用—那些針對模塊化、水平伸縮性以及多租戶部署的應用,幾乎可以即時針對工作負荷進行伸縮。較低內存使用也使得每臺服務器容納的應用密度更高。的確,基準測試表明容器化運行時的性能相當于裸服務器的97%。
因為容器封裝的知識應用運行時環境,而代碼、庫都不在整個OS棧里面,所以可移植性也更高。比方說,在使用像Docker這樣的標準包格式時,同一個應用容器既能在內部Linux服務器運行,也能在AWS上運行而不需要修改。這種應用抽象水平也意味著容器可以用流行的自動化工具,如Ansible、Chef或Puppet來進行配置部署。
容器不好的地方是它們提供的應用間隔離要比全VM環境要少,可能會沒那么安全,容易導致流氓代碼從一個容器越獄進入另一個容器。
常見用例
考慮到容器的效率,應用容器在云服務提供商那里相當流行也就不足為奇,因為他們都希望通過更大的服務器整合來實現資源利用的最大化。如果4、5個容器可以在同一片服務器上面跑,為什么還要用VM呢?
容器效率還使得它們成為復雜、多租戶工作負載,如使用Web服務器的多層應用、中間件、數據庫這些每一個用戶實例都作為獨立容器負載的理想環境。通過把運行時庫封裝進可移植、易于部署的鏡像,容器是的服務提供商能迅速增加新的應用或同一軟件的多個版本的同時提供運行時隔離。這使得應用容器成為有很多復雜依賴的軟件(如WordPress、Drupal、Joomla等內容管理系統),或私有像Flask、.NET或Slim的復合微服務的更大選項。
因為容器允許同一應用代碼的許多版本共存并在同一服務器隔離,所以可以成為采用持續交付和集成的快速應用開發的很好平臺。代碼隔離意味著整個開發過程,包括開發、測試、籌劃和產品部署都能在同一個系統上面跑。將應用容器與Docker Swarm、Kubernetes、AWS CodeDeploy或Elastic Beanstalk OpsWorks這樣的編排平臺結合能夠進行快速部署,因為開發者能夠實現由于版本管理和自動化工作流的流水化。
容器還可以用來對遺留的一體化軟件進行“云化”。也就是說,你可以部署不是針對多租戶分布式系統的應用,或作為自包含、在共享云基礎設施上可重定位鏡像的微服務。容器隔離和抽象簡化了可重復配置和管理,使得一體化應用能利用云自動化軟件進行部署和監控。這種容器提供的隔離還意味著遺留系統很容易就能部署到AWS EC2 Container Service、Azure Container Service或Google Container Engine這樣的公有IaaS容器上面。
容器管理問題
2015年供應商紛紛給自己的產品增加了容器支持,VM和云管理軟件需要時間來跟上形勢。比方說,VMworld2015的焦點之一就是介紹vSphere Integrated Containers,它允許控制兼容Docker API的容器,并可作為vSphere資源池的一部分進行消費。類似地,Windows Server 2016技術預覽版也包含有Windows Server Container Manager,這可以讓你通過PowerShell一級仍然比較粗糙的GUI工具管理容器,包括兼容Docker的和新的Hyper-V容器。
在Linux-OpenStack這一塊,OpenStack Nova能夠用管理程序驅動控制Docker容器。類似地,Dell也在用OpenManage System Administrator來集成Docker,而RedHat的Atomic Host容器平臺帶了Kubernetes。從長遠看,要找能夠集成其他的VM和云管理平臺、全面IT運營管理以及應用性能管理套件的容器管理。
盡管炒得很熱,但應用容器既不會取代傳統的VM,也不會成為一時的流行。其技術優勢使得它們可以成為許多應用完全服務器虛擬化的很好替代品,而Microsoft Nano Server、VMware PhotonOS等新的微VM技術的出現有望結合容器的性能好處和VM的徹底隔離和管理。IT架構師的部署選擇從來沒有這么豐富過。關鍵是要理解每一種平臺的相對優勢,然后做出明智選擇。