Docker容器使應用程序開發變得更容易,但在生產中部署容器可能會很難。
環境複雜性、生態系統易變性、跨不一樣分佈式基礎架構的部署......
本文將爲你解析生產環境部署容器的五大挑戰及應對之策。前端
軟件開發人員一般只關注在特定基礎架構上運行的單個應用程序、應用程序堆棧或工做負載。然而,在生產環境中,一組不一樣的應用程序常需在各類技術(例如Java,LAMP等)上運行,而這些技術又需在本地、雲上或兩者結合的異構基礎設施上部署。這給生產環境中容器化應用程序的運行帶來了一些挑戰:docker
控制高度密集、快速變化的環境的複雜性後端
充分利用極爲易變的技術生態系統安全
確保開發人員自由創新服務器
跨不一樣的分佈式基礎架構部署容器網絡
執行組織戰略管理架構
2016年6月Cloud Foundry公司發佈的《但願與現實:容器,2016》報告顯示,45%的受訪者表示,他們最擔憂的是Docker部署太複雜,沒法融入到他們的環境中。[1]其中很大的緣由是容器化環境的密度和波動性。因爲不須要爲每一個容器加載操做系統和內核,所以與傳統的虛擬化環境相比,容器化環境可以在給定數量的基礎架構內實現更高的工做負載密度。所以,在整個生產環境中建立、監視和銷燬的組件需求總量呈指數級增加,從而顯著增長了基於容器的管理環境的複雜性。負載均衡
容器時代,不只有更多的東西須要管理,並且它們相比以往任什麼時候候都要變化更快。Datadog調查顯示,傳統的和基於雲的虛擬機的平均壽命大約只有短短15天,Docker容器的平均壽命更短,僅爲2.5天。[2]這就致使了須要單獨管理和監控的事物數量呈數量級增加。框架
因爲架構的複雜性,這些高密集、快變化的環境就更進一步複雜化了。容器一般部署在高度分佈式的單個集羣或多集羣環境中。這些羣集的組成是高度分散的,它們能夠在本地、雲中部署或二者並舉。雖然60%的容器在亞馬遜網絡服務(AWS)上運行,但仍有40%在本地運行。[3]分佈式
所以,組織須要一種更便捷的方法來編排容器,以及管理多容器、多主機應用程序的底層基礎架構服務。這對於具備微服務體系結構的應用程序尤其重要,例如,一個Web應用程序,包括一個容器集羣運行Web服務器前端的多個實例的主機(故障轉移和負載均衡)以及多個後端服務,是各自運行在不一樣的容器中的。
Docker的生態系統複雜多變。在過去幾年中,第三方工具和服務大量出現,幫助開發人員在開發過程當中部署、配置和管理他們的容器化工做流程。基於開源技術,這些工具和服務的變化之快以及新文檔的數量之多,使構建穩定的技術棧以實如今生產中運行容器變得充滿挑戰。這也使得公司難以創建和維護利用豐富的生態系統所需的工程技能。根據RightScale公司第五個年度「雲調查情況」顯示,對於目前還未使用容器的公司而言,迄今爲止,缺少經驗是採用容器面臨的最大挑戰(39%)。[4]
在簡化容器管理中,開發人員可以不失靈活創新、不斷探索新技術的重要性愈加凸顯。他們須要有足夠的自由來挑選他們須要的工具和框架。RedMonk分析公司將這稱爲「無限發展時代」。[5]當開發人員須要解決什麼問題時,他們再也不詢問他們「能夠」使用什麼工具,而是會直接尋找最佳工具。 他們還喜歡選擇最新版本,雖然新版本不必定是最穩定的,可是他們能夠快速利用其新功能。與此同時,他們也愈來愈須要承擔責任,確保他們建立的任意應用程序邏輯在生產中可以正常運行,若是出現問題,也能快速修復它。這表示若是部署遇到問題,就須要他們可以回滾部署。
開發人員須要root訪問的自由,他們但願可以安裝任何他們喜歡的開源軟件。所以他們一般會避免傳統的平臺即服務(PaaS)解決方案。把PaaS從容器中抽取出來,這樣開發人員就能夠不用管理容器而是專一於編碼。然而,一家供應商或基礎設施提供商提供的可能是專用服務,不像本地開源堆棧那樣通用。開發人員的創造力很大程度上也受限於此。
容器的主要優勢之一就在於它們是可移植的——一個應用程序,其全部的依賴關係能夠捆綁到一個獨立於Linux內核、平臺分佈或部署模型的主機版本的單個容器中。此容器能夠傳輸到另外一臺運行Docker的主機上,而且在沒有兼容性問題的狀況下執行。雲和數據中心之間的基礎設施服務差別巨大,這致使應用程序幾乎不可能實現真正的可移植性。所以利用容器使應用程序跨不一樣基礎設施須要的不只僅是一個用於運輸代碼的標準化單元,它還須要基礎設施服務,包括:
運行Docker容器的主機(CPU、內存、存儲和網絡鏈接),包括在本地以及雲上運行的虛擬機或物理機器;
協調好端口映射或軟件定義的網絡,使不一樣主機上的容器可以相互通訊;
向Internet提供負載均衡器服務;
DNS,一般用於實現服務發現;
集成的健康檢查,確保應對請求的使用的都是健康的容器服務;
某些事件觸發執行操做時的應對措施,例如在主機發生故障後從新啓動新容器,確保可用的正常容器始終維持一個固定的數量,或者建立新主機和容器以響應增長的負載;
經過現有容器建立新容器來擴展服務;
藉助存儲快照和備份功能以備份狀態容器,從而進行災難恢復;
部署好這些基礎架構服務,組織面臨的難題就變成了如何監控它們。DevOps團隊須要迅速解決這些問題。所以,監控和記錄基礎架構性能,並在出現問題時提醒DevOps團隊,這是任何一個容器管理所要具有的重要功能。
與部署容器相關的安全性和合規性問題是必須解決的,這是全部在生產中使用容器的大企業都必定會關注的問題,特別是那些受監管的行業,如金融和醫療保健。Docker等公司正在努力修復這些問題,並經過在工具鏈上建立新的軟件和集成做爲應對這個問題。
然而,在應用程序容器安全性和企業使用虛擬機之間仍缺少平衡。這包括實施組織策略,確保安全訪問容器和集羣管理,包括管理傳輸層安全(TLS)證書。經過基於角色的訪問控制(RBAC),用戶和用戶組可以共享或拒絕訪問資源和環境(例如開發或生產)。 用戶身份驗證須要與Active Directory、LDAP和/或GitHub等活動目錄集成。
容器使軟件開發變得更容易,使您可以更快地編寫代碼並更好地運行它。 然而,在生產中運行容器可能會很困難。 有各類各樣的技術須要集成和管理,而且新的工具層出不窮。 Rancher使您能夠輕鬆管理運行容器的方方面面。那些集成複雜的開源技術必備的技術技能,你可能不再須要了。
想在生產環境中的任一基礎設施上運行Docker,Rancher能夠提供你須要的一切。Rancher讓你能夠輕鬆配置和集成可移植的基礎設施服務層。Rancher提供了一個易於使用的用戶界面,您能夠利用其豐富的集合編排功能,隨後經過單擊來部署容器。Rancher強大的Catalog能夠將配置文件打包爲模板並在組織中共享。目前, Rancher已經擁有超過2000萬次下載和並提供企業級支持,很快成爲在生產環境中運行容器的首選開源平臺。
只需按照下列步驟操做:
嘗試一下:您能夠先使用Rancher Sandbox。它是公開託管的,而且會自動更新。
下載:您能夠把Rancher部署爲一個Docker容器,甚至還能夠在您的集羣或筆記本電腦上部署Rancher。
開始:若是您按照快速入門指南中的步驟操做,部署Rancher只需不到5分鐘。
使用文檔:Rancher使用起來很是簡便。但Rancher的技術文檔中仍有大量信息,以備用戶不時之需。
利用咱們的強大的用戶社區:您能夠登錄咱們的論壇,這裏是新產品發佈、與同行以及和Rancher工程師交流互動的最佳場所。
資料來源:
[1] https://www.cloudfoundry.org/...
[2] https://www.datadoghq.com/doc...
[3] https://clusterhq.com/assets/...
[4] http://www.rightscale.com/blo...
[5] http://redmonk.com/fryan/2016...