一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

『高級(jí)篇』docker之DockerSwarm的了解(27)

 boyjiangkt727t 2019-05-01

   這次一起了解下docker Swarm,什么是dockerSwarm。

什么是docker Swarm

  • 產(chǎn)品背景

    使用docker的流程,ssh到一臺(tái)服務(wù)器,運(yùn)行docker命令來運(yùn)行本機(jī)的docker服務(wù),隨著docker發(fā)展,越來越多的服務(wù)想要運(yùn)行在docker容器中,如果在這樣挨個(gè)的登錄在每個(gè)ssh主機(jī)上管理容器,就非常的吃力了,而且我們的應(yīng)用也需要高可用,也需要避免單點(diǎn)的故障,docker現(xiàn)有的能力已經(jīng)很難滿足這樣的需求了,在這樣的背景下,docker社區(qū)就產(chǎn)生類的dockerSwarm項(xiàng)目。

  • 概念

    什么是swarm,swarm這個(gè)名詞比較貼切,swarm這個(gè)單詞的意思就是動(dòng)物的集群行為,比如我們常見的蜂群,魚群,大雁南飛都可以成為swarm,swarm項(xiàng)目就是把多個(gè)docker 實(shí)例聚集在一起形成一個(gè)大的docker實(shí)例,對(duì)外提供集群服務(wù),同時(shí)這個(gè)集群提供所有的api,用戶可以相使用docker實(shí)例一樣使用docker的集群。

  • 昨日今日
    >docker swarm在1.12之前是一個(gè)獨(dú)立的項(xiàng)目,需要單獨(dú)下載,在1.12之后該項(xiàng)目就合并到了docker中,成為docker的子項(xiàng)目,目前docker唯一的一個(gè)原生支持docker集群的管理工具。

docker swarm的架構(gòu)圖

下面這個(gè)圖,就可以看到docker swarm管理docker的一個(gè)架構(gòu)圖。以前使用docker命令行是針對(duì)docker主機(jī)的,然后到這臺(tái)機(jī)器上單獨(dú)的控制這臺(tái)機(jī)器上的主機(jī),有了swarm之后,客戶端命令是針對(duì)docker集群的。它的命令幾乎等同于docker的原生命令,它把命令發(fā)送給swarm,swarm選擇發(fā)送一個(gè)節(jié)點(diǎn)去真正的執(zhí)行,swarm是通過docker自帶的遠(yuǎn)程的API,來實(shí)現(xiàn)對(duì)docker的控制。

下面這個(gè)圖,這張圖跟上面一張圖描述的是一個(gè)事情,只不過它暴露了更多的的細(xì)節(jié),上面的大框和下面的小框都代表了一臺(tái)服務(wù)器,物理機(jī)或者虛擬機(jī),我們從上面說,上面是swarm的一個(gè)manager節(jié)點(diǎn),管理這個(gè)worker節(jié)點(diǎn),可以看到管理了多少個(gè)cpu,多少個(gè)內(nèi)存,每個(gè)上面運(yùn)行的服務(wù),每個(gè)服務(wù)的狀況,比如他們的標(biāo)簽,他們的健康狀態(tài),Manager管理者每個(gè)節(jié)點(diǎn)的生命周期,比如加入一個(gè)節(jié)點(diǎn),下線一個(gè)節(jié)點(diǎn),manager還管理者每個(gè)服務(wù)的生命周期,服務(wù)的部署,更新,停止,刪除,Node節(jié)點(diǎn)比較單純他就運(yùn)行了docker daemon,因?yàn)樵?.12之后swarm已經(jīng)融入了docker本身,開發(fā)一個(gè)遠(yuǎn)程的api給manager節(jié)點(diǎn)調(diào)度,運(yùn)行具體的服務(wù)和容器,下面咱們一起看看服務(wù)的部署流程是怎樣的,在這樣的架構(gòu)上是如何體現(xiàn)的。

環(huán)境的搭建

想想之前學(xué)習(xí)的mesos,需要先安裝docker,Marathon,zookeeper,加入我們現(xiàn)在有5臺(tái)liunx服務(wù)器,每個(gè)上面都裝有docker,選擇一臺(tái)作為manager,上面執(zhí)行下圖的第一條命令, 執(zhí)行完之后會(huì)打印出來一個(gè)token作為dockerSwarm的憑證,然后在每個(gè)worker節(jié)點(diǎn)下執(zhí)行第二條命令,表示要加入集群,只需要token和對(duì)應(yīng)manager節(jié)點(diǎn)的ip和端口號(hào),集群環(huán)境就搭建完畢了

如何部署

客戶端的發(fā)起docker命令,兩種方式

  1. 直接ssh到manager節(jié)點(diǎn),執(zhí)行docker命令。

  2. 通過遠(yuǎn)程訪問的方式,通過Remote API調(diào)用manager上的docker命令,我們這張圖畫的就是第二種方式。

docker Client 在manager節(jié)點(diǎn)的外邊,假如執(zhí)行了docker service create,先會(huì)經(jīng)過docker Deamon接受這條命令,傳給Scheduler模塊,Scheduler模塊主要實(shí)現(xiàn)調(diào)度的功能,負(fù)責(zé)選擇出來最優(yōu)的節(jié)點(diǎn),里面包含了2個(gè)子模塊,F(xiàn)iter 和Strategy,F(xiàn)iter很明顯是過濾節(jié)點(diǎn),用來找出滿足條件的節(jié)點(diǎn)(資源足夠多,節(jié)點(diǎn)正常的),Strategy是過濾出來后選擇出最優(yōu)的節(jié)點(diǎn)(對(duì)比選擇資源剩余最多的節(jié)點(diǎn),或者找到資源剩余最少的節(jié)點(diǎn)),當(dāng)然Fiter 和Strategy都是用戶可以單獨(dú)定制的,中間的Cluster是抽象的worker節(jié)點(diǎn)集群,包含了Swarm節(jié)點(diǎn)里面每個(gè)節(jié)點(diǎn)的信息,右邊的Discovery是信息維護(hù)的模塊,比如Label Health。Cluster最終調(diào)用容器的api,完成容器啟動(dòng)的劉而成。

調(diào)度模塊

用戶在創(chuàng)建服務(wù)的時(shí)候,選擇最優(yōu)的節(jié)點(diǎn),選擇最優(yōu)節(jié)點(diǎn)的管理分為2個(gè)階段。
過濾和策略

filter

  • Constraints

    約束過濾器,根據(jù)當(dāng)前的操作系統(tǒng)的類型,內(nèi)核版本,存儲(chǔ)的類型進(jìn)行指標(biāo)上的約束,也可以自定義約束。當(dāng)前系統(tǒng)啟動(dòng)的時(shí)候可以通過label指定當(dāng)前機(jī)器所具有的特性然后通過Constraints把他們過濾出來。

  • Affinity

    親和性過濾器,支持容器的親和性和鏡像的親和性,比如一個(gè)應(yīng)用,DB容器和web容器放在一起,就可以通過這個(gè)來實(shí)現(xiàn),

  • Dependency

    依賴過濾器,link等等吧Dependency會(huì)將這些容器放在同一個(gè)節(jié)點(diǎn)上,有依賴管理的會(huì)將創(chuàng)建的容器和依賴的容器放在同一個(gè)節(jié)點(diǎn)上。

  • Health filter

    健康過濾器,根據(jù)節(jié)點(diǎn)的健康狀態(tài)進(jìn)行過濾,把有問題的節(jié)點(diǎn)去掉。

  • Ports filter

    端口過濾器,根據(jù)端口的使用情況進(jìn)行過濾,比如一個(gè)8080端口在某個(gè)主機(jī)上被占用,某些主機(jī)未被占用,會(huì)選用未被占用的那些主機(jī)。

Strategy

  • Binpack

    在同等情況下,會(huì)使用資源最多的節(jié)點(diǎn),通過這個(gè)策略可以讓容器聚集起來。

  • Spread

    在同等情況下,會(huì)使用資源最少的節(jié)點(diǎn),通過這個(gè)策略可以讓容器均勻的分布在每個(gè)節(jié)點(diǎn)上。

  • Random

    隨機(jī)選擇一個(gè)節(jié)點(diǎn)。

服務(wù)發(fā)現(xiàn)

稍微有點(diǎn)復(fù)雜,根據(jù)場(chǎng)景來說吧

  • Ingress
    >基于物理網(wǎng)絡(luò)之上的虛擬網(wǎng)絡(luò),Swarm的上層應(yīng)用不在依賴于物理網(wǎng)絡(luò),并且能夠讓下面的物理網(wǎng)絡(luò)保持不變,老鐵就理解到這里就可以了,網(wǎng)絡(luò)本身涉及到的東西太多了,應(yīng)該也聽過網(wǎng)絡(luò)工程師,既然有這個(gè)職位肯定這個(gè)不是那么容易學(xué)的,在這里就不會(huì)深入的進(jìn)行詳解了。

PS:假定運(yùn)行了一個(gè)nginx服務(wù)2個(gè)實(shí)例,nginx1 和nginx2,容器內(nèi)的端口是80,主機(jī)內(nèi)的端口是8080, 這2個(gè)容器分別運(yùn)行在node2和node3上,看到了吧node1雖然沒有運(yùn)行實(shí)例但是依然有8080端口在監(jiān)聽,一個(gè)集群在所有的worker節(jié)點(diǎn)上都是可以訪問到的,隨便選一個(gè)節(jié)點(diǎn)輸入它的ip和8080端口就可以訪問到,或者搭建一個(gè)負(fù)載均衡External LB,負(fù)責(zé)輪詢的方式訪問每個(gè)上邊的8080端口,為什么在每個(gè)節(jié)點(diǎn)上都可以訪問我們的服務(wù)呢?每個(gè)服務(wù)啟動(dòng)后所有的節(jié)點(diǎn)都會(huì)更新自己的VIP LB,把新的服務(wù)端口號(hào)和服務(wù)的信息建立一個(gè)關(guān)系,VIP LB是基于虛擬IP的負(fù)載均衡,VIP LB可以通過虛擬IP解析到真實(shí)IP,然后訪問到服務(wù)。

  • Ingress+ link
    >就類型docker-compose,可以通過docker-compose.yml文件創(chuàng)建出來一組容器,他們之前通過link的方式進(jìn)行訪問,其實(shí)這種就類型docker-compose的link網(wǎng)絡(luò)。

PS:也就是在Ingress之上多了一個(gè)link的場(chǎng)景,可以通過link的方式訪問,也不需要主機(jī)的網(wǎng)絡(luò),link怎么實(shí)現(xiàn)的呢,如果讓一個(gè)容器link到另一個(gè)容器很容易畢竟他們?cè)谝慌_(tái)主機(jī)上,一個(gè)服務(wù)link到另一個(gè)服務(wù)其實(shí)沒有那么簡(jiǎn)單了,可能包含一個(gè)容器,也可能包含很多個(gè)容器,可能運(yùn)行在一臺(tái)機(jī)器上,也可能分布在多臺(tái)機(jī)器上,我們?nèi)绾螌?shí)現(xiàn)可以通過名字來訪問彼此呢,這用到了容器的dns,這里的nginx服務(wù)依賴于tomcat服務(wù),nginx有2個(gè)實(shí)例,tomcat有一個(gè)實(shí)例,所有的nginx的容器都會(huì)對(duì)tomcat的解析,把它解析到tomcat的VIP,VIP負(fù)責(zé)做負(fù)載均衡,原理就是這樣的原理,link的方式外部是訪問不到的。link只適合swarm集群內(nèi)部的場(chǎng)景。

  • 自定義網(wǎng)絡(luò)
    >使用自定義的網(wǎng)絡(luò),首先要?jiǎng)?chuàng)建網(wǎng)絡(luò),所有的網(wǎng)絡(luò)都可以通過名字來連接彼此,而不需要link操作了。只要連接這個(gè)網(wǎng)絡(luò)的彼此,都可以通過名字。底層來說它和link是類型的。通過dns來解析應(yīng)用的名字。然后通過VIP LB的形式來進(jìn)行負(fù)載均衡。

#創(chuàng)建自定義網(wǎng)絡(luò)
docker network create --driver=overlay --attachable mynet
#創(chuàng)建服務(wù)
docker  service create -p 80:80 --network=mynet --name nginx nginx

Ingress 支持外部訪問,Ingress+ link和自定義網(wǎng)絡(luò)只能容器間進(jìn)行訪問。

服務(wù)編排

  1. 服務(wù)部署&服務(wù)發(fā)現(xiàn)(上邊說到了)

  2. 服務(wù)更新 — docker service update

  3. 服務(wù)擴(kuò)縮容 — docker service scale

Swarm

  • 對(duì)外以Docker API 接口呈現(xiàn)

    好處直接可以平滑的切換到docker swarm上?;静恍枰淖儸F(xiàn)有的系統(tǒng)

  • 容易上手,學(xué)習(xí)成本低

    之前docker的經(jīng)驗(yàn)可以完成繼承過來。

  • 輕量級(jí),節(jié)省資源

    專注docker集群的管理。插件的機(jī)制swarm的模塊都抽象出來對(duì)應(yīng)的API,可以根據(jù)自己的特點(diǎn)進(jìn)行定制實(shí)現(xiàn)。

  • 對(duì)docker命令參數(shù)支持完善

    跟docker同步發(fā)布,docker的新的特性在dockerSwarm上都可以得到體現(xiàn)。

PS:docker Swarm基本都了解的差不多了。下次開始docker swarm的環(huán)境搭建。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩精品一区二区三区四区| 国产乱人伦精品一区二区三区四区| 日韩人妻免费视频一专区| 美女被后入视频在线观看| 久草热视频这里只有精品| 出差被公高潮久久中文字幕| 中文字幕乱码亚洲三区| 欧美成人国产精品高清| 日韩精品一区二区毛片| 欧洲日韩精品一区二区三区| 高清一区二区三区大伊香蕉 | 免费啪视频免费欧美亚洲| 国产人妻熟女高跟丝袜| 欧美午夜色视频国产精品| 久久综合狠狠综合久久综合| 亚洲女同一区二区另类| 国产亚洲欧美自拍中文自拍| 黑人粗大一区二区三区| 中文字幕日韩一区二区不卡| 在线观看中文字幕91| 色哟哟精品一区二区三区| 欧美成人欧美一级乱黄| 尤物天堂av一区二区| 亚洲欧洲一区二区中文字幕| 沐浴偷拍一区二区视频| 不卡免费成人日韩精品| 国产不卡视频一区在线| 沐浴偷拍一区二区视频| 国产不卡一区二区四区| 欧美日韩亚洲精品内裤| 国产欧美一区二区色综合| 亚洲欧美日本成人在线| 亚洲中文在线观看小视频| 视频在线播放你懂的一区| 免费大片黄在线观看日本| 亚洲天堂男人在线观看| 日韩国产亚洲一区二区三区| 国产欧洲亚洲日产一区二区| 欧美日韩国内一区二区| 国产精品刮毛视频不卡| 精品精品国产欧美在线|