天天看點

如何通過Docker 進行容器編排

或許最佳方式是将它們看成飼養寵物與飼養牛。人們會想許多額外措施讓他們的寵物活着并保持健康,這與管理者想盡辦法認真照看高端伺服器一樣。但是在農場裡,死牛隻是被視為生意成本中的一部分,在當今的雲世界中也是一樣,應用被設計可以容錯,一台伺服器發生故障并沒有什麼大不了的。

如何通過Docker 進行容器編排

現代應用編排工具的一個作用是監視虛拟伺服器和/或容器情況,確定它們正在正常運作中。當一台伺服器出現故障,它們會迅速執行個體化一台新虛拟機,甚至是一台新容器。整個過程不需要系統管事員介入,因為整個程式是自動化運作的。我們甚至不知道是哪台伺服器或是容器(或是兩者的組合)在運作我們的應用。

自動化it長期以來一直是一個夢想,但是如今的工具化正在将這一夢想變為現實。如果我們正在使用雲級應用,尤其是擴充後的微服務進行工作,那麼這種工具化将十分關鍵。

針對資料中心的作業系統

這是資料中心作業系統理念發揮作用的地方。單個伺服器不再重要,除非它們是計算、存儲或網絡元件。應用開始依賴于虛拟機或是容器,并成為了主要的管理元件。

我們正在通過管理整個資料中心來替代管理單個伺服器,并将它們分解成支援不同應用的必須條件,用以建立開發、測試和部署環境,同時不再需要了解底層硬體情況。這與我們以前用于管理伺服器和應用的方式有着很大的變化。它們标志着一個新時代的開始,為特定工作負載配置硬體已經過時了。

編排的一個重要理念是動态部署應用和服務,以利用可用的計算資源。對于分布式自動化計算來說,編排是一個重要的工具。它們通過應用定義和清單來決定主機和工作負載的部署位置,通過管理擴充和确定故障伺服器,以讓服務能夠被正确處理。

谷歌的kubernetes和apache的mesos項目或許是最知名的編排解決方案,但是它們距離那些可用的解決方案還有很大的差距。它們都屬于綜合性工具,需要我們在技能和資源方面投入大量資金,它們最适合于大規模部署的情況。

作為一種選擇,小型企業開始向私有雲[注]轉型,這些私有雲包含了由微軟openstack和vmware提供的編排功能。盡管如此,目前大量機構仍在測試這種用于傳遞下一代應用的程式和工具。

通過docker進行管理

這些工作需要一套工具。這些工具要能夠從一台或是兩台伺服器擴充至一個機架或是兩個機架,直至整個資料中心。在這種方案中,docker将包含machine、swarm和compose等容器自動化工具。

machine是docker自動化工具的核心,因為它們能夠讓安裝和配置主機伺服器的程式實作自動化。通過docker的api,我們隻需要使用一個指令即可建立一個主機伺服器,配置底層docker engine,以及安裝用戶端工具。它們還可以将主機附加至現在的swarm叢集中或是從零開始建立一個新的叢集。此外,我們還能夠使用由不同雲服務提供商提供的容器,通過指令行将主機安裝在標明的雲環境中。

一旦我們實作了建立容器主機的自動化,開始使用docker engine(+微信關注網絡世界),那麼我們就能夠将這些主機整合至使用docker叢集工具的計算架構中。swarm被設計為通過與标準docker engine執行個體相同的api向容器提供一個可擴充性環境。如果我們已經在開發環境中運作docker,那麼我們就可以通過安裝swarm進行快速擴充,并繼續使用現在的開發工具和程式。嵌入式的排程器将把容器配置設定給單個docker engine節點,以支援有助于優化部署的多個不同政策。

建立一個swarm很容易,就如同在現有叢集中增加一個新引擎一樣。我們可以使用machine實作新引擎的自動建立或是與docker api協作提供一個關于可用節點的索引。由于swarm可以識别和管理注冊過的主機,是以我們的一個選項是通過docker hub系統資料庫以簡化發現過程。

compose是一個較為複雜的工具。它們可與yaml協作建立應用摘要,顯示一個應用中的多個容器彼此之間的聯系。yaml具有重要意義,因為當我們為api查找swagger 時,它們可讓我們通路相同的工具以描述我們的應用。一旦我們為應用建立了一個摘要以及它們的建立方式,我們隻需要一行腳本即可啟動應用。

保持簡潔

docker編排工具最有意思的地方可能是它們非常簡潔。這三個工具都隻需要非常簡單的指令。通過jenkins等工具,我們可以很容易地為它們編寫腳本,或是在puppet 或chef等環境中管理它們。如果以現有的docker api為基礎進行建立,那麼它們還可以很容易地管理和控制分布式環境,簡化由開發向生産的轉型過程。

docker工具可與kubernetes等資料中心管理工具及公有雲[注]提供的工具協同工作。通過綜合運用machine、swarm和compose,在應用由從在單個伺服器上進行開發和測試到在azure或aws上完整運作雲服務的過程中,我們都能夠可以與這些應用進行協作。

開發者不需要知道他們正在向哪些東西提供容器。它們看起來像是一個swarm,即便它們運作在一個雲規模的mesos部署上也是如此,而這種抽象就是雲的精髓之所在。

本文作者:範範

來源:51cto

繼續閱讀