Docker平臺以及周邊生態系統包含不少工具來管理容器的生命週期。例如,Docker Command Line Interface(CLI)支持下面的容器活動:node
CLI知足在單個主機上管理容器的需求,可是面對部署在多個主機上的容器時就無所適從了。爲了超越單個容器管理,咱們必須轉向編排工具(業務流程工具)。web
編排工具將生命週期管理能力擴展到部署在大量機器集羣上部署的複雜的、多容器工做負載。數據庫
經過抽象主機基礎結構, 編排工具容許用戶將整個集羣視爲單個部署目標。json
編排過程通常涉及應用管理全部方面自動化的工具,例如初始佈局、調度和部署到穩態活動例如更新、部署,支持擴展和故障轉移的更新和健康監控功能。這些能力已經成爲用戶但願現代容器編排工具提供的核心特色中的一部分。後端
編排工具爲DevOps團隊提供了一個用於聲明應用負載和它的標準方案配置的藍圖選項, 它們使用yaml或json格式。 這些定義還包含支持工做負載的倉庫、網絡(ports)、存儲(volumes)和日誌的信息。這種方法容許編排工具屢次應用同一配置,而且老是在目標系統上產生相同的結果。 它還容許工具在同一個應用的不一樣階段, 例如開發階段、測試階段和生產階段接受不一樣的配置。緩存
工做負載一般對主機放置、性能和高可用具備特殊的策略或要求。例如,在同一主機上提供主備數據庫容器是無心義的;它破壞了目的性。相似的,在web服務器同一機器上放置內存緩存多是個好主意。 編排工具支持定義容易放置的親和性和約束的機制。服務器
供應(Provisioning)或調度是處理容器在集羣中的放置和啓動的。這個過程包括根據配置選擇合適的主機。除了容器提供API, 編排工具也涉及針對主機環境的基礎設施API。網絡
在由運行於多個主機上的容器組成的分佈式部署, 容器發現相當重要。Web服務器須要動態發現數據庫服務器,負載均衡須要發現並註冊web服務器。 編排工具提供或指望有一個分佈式key-value存儲, 輕量級DNS或一些其餘可以發現容器的機制。架構
既然編排工具知道系統的指望配置,因此它們可以惟一的監控系統容器和主機的健康狀況。在主機故障的狀況下,這個工具能夠從新定位容器。相似的,當容器崩潰時,編排工具能夠啓動替換。編排工具確保部署始終處於開發人員或操做人員聲明的指望狀態。app
Docker Swarm的目標是使用和核心Docker引擎一塊兒工做一樣的Docker API。API端點的目標不是表明一個Docker引擎,Swarm透明的處理與Docker引擎池相關聯的端點。這種方法的關鍵優點在於現有工具和API可以和對待單個實例的相同方式對待集羣。Docker的工具/CLI和Compose是開發者如何建立它們應用程序的,所以,它們不得不從新編排來容納一個編排器。
遵循Docker的"自帶電源、可移動"的哲學思想,支持數個發現後端,包括靜態文件和IP地址,etcd, Consul和ZooKeeper。調度策略也是可插拔的。
Docker Swarm由幾個內置的調度策略組成,給予用戶指導容器放置的能力, 以最大化或最小化容器在集羣中的擴散。也支持隨機放置。
Docker尋址遵循"自帶電源,但可移動"的原則,意思就是當前只使用少許的簡單調度後端搬運,可是未來經過可插拔接口它能支持額外的後端。基於給定用例的規模和複雜度,開發人員和操做人員能夠選擇插入恰當的替代後端。
Docker Swarm支持肯定容易在特定主機放置的約束和親和力。
約束(Constraints)定義了須要選擇用於調度的節點子集的要求。它們能夠基於存儲類型、地理位置、環境以及內核版本等屬性。
親和力(Affinity)定義了在主機上分配容器的需求。
爲了在每一個主機上發現容器,Swarm使用了可插拔後端架構,它與一個簡單的託管發現服務、靜態文件、IP列表、etcd、Consul和ZooKeeper一塊兒工做。
Swarm支持基本的將康監控,這樣能夠防止在故障主機上提供容器。
來自Google - 聲稱天天處理20億容器的公司 - 的Kubernetes享有獨特的聲譽。
Kubernetes的架構是基於一個帶有不少奴僕的主服務器。命令行工具叫作kubecfg, 鏈接主服務器端點API來管理和編排奴僕節點。下面是運行在Kubernetes環境裏邊的每一個組件的定義:
服務定義以及規則和約束是用JSON文件描述的。對於服務發現,Kubernetes提供了一個穩定的IP地址和相對於動態的pods集合的DNS名。當運行在Kubernetes pod上的容器鏈接到這個地址,鏈接被一個本地代理(叫作kube-proxy)轉發到一個具體的後端容器。
Kubernetes支持用戶實現的應用程序健康檢查。這些檢查由運行在每一個minion上的kubelet執行, 以確保應用程序正確操做。當前,Kubernetes支持三種類型的健康檢查:
Apache Mesos是一個開源集羣管理器,簡化了在共享服務器池上運行任務的複雜度。最初設計用於支持高性能計算負載, Mesos在0.20.0發佈版本添加了Docker的支持。
通常的Mesos集羣由一個或多個運行mesos-master服務器和運行了mesos-slave組件的服務器組成。每一個slave註冊到master來提供資源。 master和部署框架交互來給slaves委派任務。 下面是Mesos的架構:
Unlike other tools, Mesos ensures high availability of the master nodes using Apache ZooKeeper, which replicates the masters to form a quorum. A high availability deployment requires at least three master nodes. All nodes in the system, including masters and slaves, communicate with ZooKeeper to determine which master is the current leading master. The leader performs health checks on all the slaves and proactively deactivates any that fail.
When Mesos is used in conjunction with Marathon, service discovery can be enabled based on the HAProxy TCP/HTTP load balancer, along with an assistant script that uses Marathon’s REST API to regenerate a HAProxy configuration file periodically. Alternatively, Mesos-DNS, a DNS-based service discovery mechanism, has recently been released in beta.
容器編排正快速發展。從主要的基礎設施公司到PAAS供應商到早起的創業公司以及無服務器計算中,每一個人都在叫囂着在生態系統中佔有一席之地。在容器編排工具上有不少貢獻者,由於這些對於部署真實世界的應用程序是必不可少的,從而推進了Docker和容器的採用。 咱們視圖強調一些構建配置工具的關鍵貢獻者,但它不只僅是明顯的編排工具,更重要的是,要查看構建、部署、CI/CD、Paas和編排器交互的其餘工具,這是咱們在自動化和編排目錄涵蓋大量篇幅的。