Docker_Swarm集群系统
Docker_Swarm集群系統(tǒng)
一.Docker Swarm 介紹
實(shí)踐中會(huì)發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個(gè) Docker 節(jié)點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,搭建 Docker 集群勢(shì)在必行。然而,面對(duì) Kubernetes, Mesos 以及 Swarm 等眾多容器集群系統(tǒng),該如何選擇呢?它們之中,Swarm 是 Docker 原生的,同時(shí)也是最簡(jiǎn)單,最易學(xué),最節(jié)省資源的,比較適合中小型公司使用。
Swarm 在 Docker 1.12 版本之前屬于一個(gè)獨(dú)立的項(xiàng)目,在 Docker 1.12 版本發(fā)布之后,該項(xiàng)目合并到了 Docker 中,成為 Docker 的一個(gè)子命令。目前,Swarm 是 Docker 社區(qū)提供的唯一一個(gè)原生支持 Docker 集群管理的工具。它可以把多個(gè) Docker 主機(jī)組成的系統(tǒng)轉(zhuǎn)換為單一的虛擬 Docker 主機(jī),使得容器可以組成跨主機(jī)的子網(wǎng)網(wǎng)絡(luò)。
Docker Swarm 是一個(gè)為 IT 運(yùn)維團(tuán)隊(duì)提供集群和調(diào)度能力的編排工具。用戶可以把集群中所有 Docker Engine 整合進(jìn)一個(gè)「虛擬 Engine」的資源池,通過(guò)執(zhí)行命令與單一的主 Swarm 進(jìn)行溝通,而不必分別和每個(gè) Docker Engine 溝通。在靈活的調(diào)度策略下,IT 團(tuán)隊(duì)可以更好地管理可用的主機(jī)資源,保證應(yīng)用容器的高效運(yùn)行。
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干臺(tái)Docker主機(jī)抽象為一個(gè)整體,并且通過(guò)一個(gè)入口統(tǒng)一管理這些Docker主機(jī)上的各種Docker資源。Swarm和Kubernetes比較類(lèi)似,但是更加輕,具有的功能也較kubernetes更少一些。
Swarm的基本架構(gòu)如下圖所示,
二.Docker Swarm 優(yōu)點(diǎn)
任何規(guī)模都有高性能表現(xiàn)
對(duì)于企業(yè)級(jí)的 Docker Engine 集群和容器調(diào)度而言,可拓展性是關(guān)鍵。任何規(guī)模的公司——不論是擁有五個(gè)還是上千個(gè)服務(wù)器——都能在其環(huán)境下有效使用 Swarm。
經(jīng)過(guò)測(cè)試,Swarm 可拓展性的極限是在 1000 個(gè)節(jié)點(diǎn)上運(yùn)行 50000 個(gè)部署容器,每個(gè)容器的啟動(dòng)時(shí)間為亞秒級(jí),同時(shí)性能無(wú)減損。
靈活的容器調(diào)度
Swarm 幫助 IT 運(yùn)維團(tuán)隊(duì)在有限條件下將性能表現(xiàn)和資源利用最優(yōu)化。Swarm 的內(nèi)置調(diào)度器(scheduler)支持多種過(guò)濾器,包括:節(jié)點(diǎn)標(biāo)簽,親和性和多種容器部策略如 binpack、spread、random
等等。
服務(wù)的持續(xù)可用性
Docker Swarm 由 Swarm
Manager 提供高可用性,通過(guò)創(chuàng)建多個(gè) Swarm master 節(jié)點(diǎn)和制定主 master 節(jié)點(diǎn)宕機(jī)時(shí)的備選策略。如果一個(gè) master 節(jié)點(diǎn)宕機(jī),那么一個(gè) slave 節(jié)點(diǎn)就會(huì)被升格為 master 節(jié)點(diǎn),直到原來(lái)的 master 節(jié)點(diǎn)恢復(fù)正常。
此外,如果某個(gè)節(jié)點(diǎn)無(wú)法加入集群,Swarm 會(huì)繼續(xù)嘗試加入,并提供錯(cuò)誤警報(bào)和日志。在節(jié)點(diǎn)出錯(cuò)時(shí),Swarm 現(xiàn)在可以嘗試把容器重新調(diào)度到正常的節(jié)點(diǎn)上去。
和 Docker API 及整合支持的兼容性
Swarm 對(duì) Docker API 完全支持,這意味著它能為使用不同 Docker 工具(如 Docker CLI,Compose,Trusted Registry,Hub 和 UCP)的用戶提供無(wú)縫銜接的使用體驗(yàn)。
Docker Swarm 為 Docker 化應(yīng)用的核心功能(諸如多主機(jī)網(wǎng)絡(luò)和存儲(chǔ)卷管理)提供原生支持。開(kāi)發(fā)的 Compose 文件能(通過(guò) docker-compose up )輕易地部署到測(cè)試服務(wù)器或 Swarm 集群上。Docker Swarm 還可以從 Docker Trusted Registry 或 Hub 里 pull 并 run 鏡像。
綜上所述,Docker Swarm 提供了一套高可用
Docker 集群管理的解決方案,完全支持標(biāo)準(zhǔn)的 Docker API,方便管理調(diào)度集群 Docker 容器,合理充分利用集群主機(jī)資源。
三.swarm的路由網(wǎng)絡(luò)
對(duì)于驗(yàn)證過(guò)程,可以看到3個(gè)web的task分別運(yùn)行在node1、2、3上,但為什么能夠在node-1節(jié)點(diǎn)上通過(guò)localhost來(lái)訪問(wèn)web服務(wù),并且得到從node-2上的容器返回的結(jié)果呢?這一切都?xì)w功于swarm routing mesh,它的工作原理如下圖:
四.Swarm功能模塊
這個(gè)圖作為一個(gè)整體實(shí)際上都處于一個(gè)所謂的集群中,可能對(duì)應(yīng)了一到多臺(tái)的實(shí)際服務(wù)器。每臺(tái)服務(wù)器上都裝有Docker并且開(kāi)啟了基于HTTP的DockerAPI。這個(gè)集群中有一個(gè)SwarmManager的管理者,用來(lái)管理集群中的容器資源。管理者的管理對(duì)象不是服務(wù)器層面而是集群層面的,也就是說(shuō)通過(guò)Manager,只能籠統(tǒng)地向集群發(fā)出指令而不能具體到某臺(tái)具體的服務(wù)器上要干什么(這也是Swarm的根本所在)。至于具體的管理實(shí)現(xiàn)方式,Manager向外暴露了一個(gè)HTTP接口,外部用戶通過(guò)這個(gè)HTTP接口來(lái)實(shí)現(xiàn)對(duì)集群的管理。對(duì)于稍微大一點(diǎn)的集群,最好是拿出一臺(tái)實(shí)際的服務(wù)器作為專(zhuān)門(mén)的管理者,作為學(xué)習(xí)而言,也可以把管理者和被管理者放在一臺(tái)服務(wù)器上。
docker swarm是docker官方提供的一套容器編排系統(tǒng)。它的架構(gòu)如下:
- swarm節(jié)點(diǎn)
swarm是一系列節(jié)點(diǎn)的集合,而節(jié)點(diǎn)可以是一臺(tái)裸機(jī)或者一臺(tái)虛擬機(jī)。一個(gè)節(jié)點(diǎn)能扮演一個(gè)或者兩個(gè)角色,manager或者worker。
1.1 manager節(jié)點(diǎn)
Docker Swarm集群需要至少一個(gè)manager節(jié)點(diǎn),節(jié)點(diǎn)之間使用Raft consensus protocol進(jìn)行協(xié)同工作。
通常,第一個(gè)啟用docker swarm的節(jié)點(diǎn)將成為leader,后來(lái)加入的都是follower。當(dāng)前的leader如果掛掉,剩余的節(jié)點(diǎn)將重新選舉出一個(gè)新的leader。
每一個(gè)manager都有一個(gè)完整的當(dāng)前集群狀態(tài)的副本,可以保證manager的高可用。
1.2 worker節(jié)點(diǎn)
worker節(jié)點(diǎn)是運(yùn)行實(shí)際應(yīng)用服務(wù)的容器所在的地方。理論上,一個(gè)manager節(jié)點(diǎn)也能同時(shí)成為worker節(jié)點(diǎn),但在生產(chǎn)環(huán)境中,不建議這樣做。
worker節(jié)點(diǎn)之間,通過(guò)control plane進(jìn)行通信,這種通信使用gossip協(xié)議,并且是異步的。
- stacks,
services, and tasks
集群中經(jīng)常談到的stacks, services, tasks,他們之間的關(guān)系。
下面簡(jiǎn)單解釋一下這三者的含義:
2.1 services
swarm service是一個(gè)抽象的概念,它只是一個(gè)對(duì)運(yùn)行在swarm集群上的應(yīng)用服務(wù),所期望狀態(tài)的描述。它就像一個(gè)描述了下面物品的清單列表一樣:
·
服務(wù)名稱(chēng)
·
使用哪個(gè)鏡像來(lái)創(chuàng)建容器
·
要運(yùn)行多少個(gè)副本
·
服務(wù)的容器要連接到哪個(gè)網(wǎng)絡(luò)上
·
應(yīng)該映射哪些端口
2.2 task
在Docker Swarm中,task是一個(gè)部署的最小單元,task與容器是一對(duì)一的關(guān)系。
2.3 stack
stack是描述一系列相關(guān)services的集合。通過(guò)在一個(gè)YAML文件中來(lái)定義一個(gè)stack。
五. 多主機(jī)網(wǎng)絡(luò)
在前面的章節(jié)中,學(xué)習(xí)過(guò)單主機(jī)網(wǎng)絡(luò),那個(gè)時(shí)候所有的容器都運(yùn)行在一個(gè)docker host上,他們之間的通信一般使用本地的bridge網(wǎng)絡(luò)即可。
在Swarm集群中,使用前面也簡(jiǎn)單提到過(guò)的overlay
network driver來(lái)讓位于不同主機(jī)間的容器進(jìn)行通信。網(wǎng)絡(luò)模式如下圖:
當(dāng)然你也可以使用第三方提供的其他網(wǎng)絡(luò)驅(qū)動(dòng),但對(duì)于swarm,還是推薦它自己的overlay network。
總結(jié)
以上是生活随笔為你收集整理的Docker_Swarm集群系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多传感器融合(三)
- 下一篇: SLAM的通用框架:GSLAM