1. 程式人生 > >把容器當作迷你虛擬機器使用不是雲原生!

把容器當作迷你虛擬機器使用不是雲原生!

雲原生

雲服務和SaaS廠商創造了微服務的概念和“雲原生”模型,以便在持續開發和運營過程中實現高效擴充套件。對於Facebook、Google或eBay這類始終線上的全球服務而言,傳統的方法已不適用。容器與Docker作為此類微服務的終極打包工具應運而生,而Kubernetes、Docker Swarm和DC/OS這類新的編排平臺則負責其部署、排程及生命週期的處理。Serverless及FaaS基本上就是這個模型更加自動化的一種演

雲原生意味著什麼

我們希望交付的是隨著時間推移而演進或擴充套件的彈性應用。實現的方式是將應用打散成多個層級(微服務),每一層都具有自己的彈性擴充套件能力,然後通過可靠的訊息在這些微服務之間進行通訊。
如果我們希望能動態地進行擴充套件、處理故障或修改版本,微服務就不能是有狀態的。與傳統應用不同,微服務使用的是不可變映象,並將配置、日誌、狀態及資料儲存在彈性雲資料服務(物件、NoSQL/NewSQL、日誌/訊息流)中。
雲資料服務通常是將一組商用伺服器(具有本地磁碟)叢集起來構建而成。我們要麼使用預整合的雲提供商資料服務,要麼使用開源或商業軟體來執行自己的資料服務。
開發人員和企業主立即就能感受到雲原生方式的益處:這讓他們可以使用一個敏捷的、持續的方法更快地進行應用開發,同時其彈性擴充套件可滿足需求的波動。

為什麼容器不是虛擬機器

傳統基礎設施團隊與廠商和雲使用者與提供商的想法不同。他們依然以虛擬機器、虛擬網絡卡和虛擬磁碟(虛擬基礎設施,即“私有云”)來看待這個世界,並試圖讓容器相容現有的做法。這意味著他們將重心放在重構遺留的或單體的應用,以便其運行於容器中,從中獲得的打包自動化好處最少,敏捷、彈性及CI/CD不在其列。他們也可能將那些應用保留在虛擬機器中,並將其遺忘。
上週在奧斯汀舉行的DockerCon上,我看到一些廠商試圖讓容器像VMware或OpenStack那樣工作。最極端的例子是將SAN或超聚合塊儲存作為“容器問題”的解決方案。其間,我與三個主要儲存廠商的交流大致如此:
我:你們的產品能為容器做什麼?
他們:我們負責編排容器塊儲存卷的建立、配備檔案系統、快照、去重等等。
我:但是我為什麼需要這個,Docker提供了一個(不可變的、去重的)映象檔案系統,並且持久化資料是可選的,期望的是檔案或資料庫抽象層(不是虛擬磁碟)吧?
他們:哦,這就是為什麼我們複雜的自動化系統要分配並配備塊空間、在磁碟捲上建立一個(具有固定容量的)檔案系統並將其附加到容器中。
我:但是磁碟卷無法在微服務之間共享(對於彈性而言這是非常基本的),而我希望容器是彈性的而非固定的。我可以使用一個共享檔案系統,為什麼還要讓自己陷入一堆配置磁碟容量和格式化檔案系統的麻煩中?難道我不能將共享檔案系統掛載到容器中?
他們:是的,正確的解決方案是使用一個叢集的/共享的檔案系統或物件,不過對我們來說開發過於困難,我們還無法提供。可能未來會有。對NoSQL資料庫這類持久化系統,我們確實能提供價值。
我:沒錯。難道我不能使用Cassandra、MongoDB、Elasticsearch自己的方案?它們全都在應用級別上進行分佈和複製。它們內建了版本(快照)功能,當然,因為它是分散式的,所以我們無法在儲存中一致地建立其快照。我還注意到它們提供了壓縮技術,實際上更適用於短期(本地)儲存。
他們:哦,這點我們不清楚。當我們與IT人員(不是開發人員)討論時,我們聽到的是他們想將遺留應用和資料庫執行在容器中,就像執行虛擬機器一樣!
……這凸顯了圍繞容器與現代雲技術的混亂狀態——開發人員與基礎設施團隊之間仍然存在著巨大的資訊鴻溝。

多走一步,把重點放在雲原生上

那麼,要如何構建雲原生?不要被各種宣傳所迷惑,多做思考。有兩種方式來解決這個問題:
如果你尋求的最快上線的方法,而不擔心效能、技術鎖定或長期預算,又或者你的公司比較小,可以使用一個公有云及其原生服務。使用一個容器編排系統,最好是開源的,比如Kubernetes。使用彈性雲原生物件儲存、資料庫及訊息系統,將精力放在無狀態應用上。你甚至可以使用“serverless”來免除編排和CI/CD工具。
或者,如果你的公司足夠大,又或者你關心效能和資料區域性性,可以像雲提供商而非傳統應用那樣進行構建。構建基準雲原生服務,包括物件儲存、日誌、監控、身份管理、配置管理、訊息、編排等等。使用開源工具或更健壯的商業產品。需要注意的是,為了保證效率和健壯性,物件儲存、資料庫或叢集檔案系統這類資料服務最好像公有云那樣使用專有伺服器,它們具備更高的磁碟或快閃記憶體效能。
建立類似公有云的服務之後即可新增無狀態應用程式及應用程式生命週期管理工具,它們將通過服務繫結(比如URL和證書)掛接到基礎設施服務中。

深入淺出學習etcd

etcd為分散式系統提供可靠、高效的配置管理服務,在Docker、Kubernetes、Mesos等平臺中扮演了越來越重要的角色。作為2013年開始的專案,它還很年輕,官方文件中缺乏實現上全面、系統的介紹,本課程深入淺出地介紹了etcd的實現,併為運維和二次開發提供了系統的指導和建議。

文章來自微信公眾號:Docker