日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker Swarm集群实践——部署篇

發(fā)布時間:2023/12/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker Swarm集群实践——部署篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最新消息

Docker在上周的DockerCon技術(shù)大會上發(fā)布了1.12版核心產(chǎn)品Docker Engine,最大的新特性是Docker Swarm已經(jīng)被整合到了Docker Engine里面而不再是一個單獨的工具了,這樣就可以更容易的把多個Docker主機組合成一整個規(guī)模更大可靠性更高的邏輯單元。Docker的掌舵者 Adrian Mouat相信這種新的集群模式可以大大增強Docker在相關(guān)領(lǐng)域的競爭力。

把Docker Swarm整合進Docker Engine是一個重大改進,但它也只是一個附加功能,你可以只在需要的時候才使用它。你可以用和以前一樣的方式來安裝、運行和升級Docker 1.12,而且它也對已有的容器鏡像和工具向后兼容。



以上是關(guān)于Swarm的最新發(fā)展,你可以深切的感受到開源力量對一個技術(shù)的快速迭代,相比較一個公司使用激勵機制提高員工的積極性,開源的思想讓那些有共同理想的技術(shù)天才共同協(xié)作,為科技的發(fā)展提供動力。一點感慨而已!

當(dāng)然,我們先了解一下現(xiàn)在Swarm的狀況,對學(xué)習(xí)未來的Swarm還是很有幫助的。


Swarm 簡介

Swarm是Docker公司在2014年12月初新發(fā)布的容器管理工具。和Swarm一起發(fā)布的Docker管理工具還有Machine以及Compose。Swarm是一套較為簡單的工具,用以管理Docker集群,使得Docker集群暴露給用戶時相當(dāng)于一個虛擬的整體。Swarm使用標(biāo)準(zhǔn)的Docker API接口作為其前端訪問入口,換言之,各種形式的Docker Client均可以直接與Swarm通信



Swarm架構(gòu)
Swarm作為一個管理Docker集群的工具,首先需要將其部署起來,可以單獨將Swarm部署于一個節(jié)點。另外,自然需要一個Docker集群,集群上每一個節(jié)點均安裝有Docker。具體的Swarm架構(gòu)圖可以參照下圖:


Swarm架構(gòu)中最主要的處理部分自然是Swarm節(jié)點,Swarm管理的對象自然是Docker Cluster,Docker Cluster由多個Docker Node組成,而負責(zé)給Swarm發(fā)送請求的是Docker Client。


Swarm deamon只是一個調(diào)度器(Scheduler)加路由器(router),Swarm自己不運行容器,它只是接受docker客戶端發(fā)送過來的請求,調(diào)度適合的節(jié)點來運行容器,這意味著,即使Swarm由于某些原因掛掉了,集群中的節(jié)點也會照常運行,當(dāng)Swarm重新恢復(fù)運行之后,它會收集重建集群信息。


Swarm集群部署

部署架構(gòu)如下


我們有三臺服務(wù)器,132機器作為Swarm Server服務(wù)器,其他服務(wù)器作為Docker集群的子節(jié)點。

1、132機器上下載Swarm鏡像

docker pull swarm

2、在使用Swarm進行集群管理之前,需要先把準(zhǔn)備加入集群的所有的節(jié)點的docker deamon的監(jiān)聽端口修改為0.0.0.0:2375,修改所有參與Swarm集群的服務(wù)器的/etc/default/docker,映射容器端口號.

DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock" 重啟docker 服務(wù)


3、在132機器上申請Swarm的token

root@controller:~# docker run --rm swarm create 88b70a0603a97f3e51be1d83f471a1df 該token是其他機器加入集群的憑證,需要記錄。


原則上Swarm Server132機器是無需運行容器的,當(dāng)然,我們?yōu)榱吮WC集群數(shù)量盡可能多,將132機器也加入進來

root@controller:~# docker run -d swarm join -addr=192.168.12.132:2375 token://88b70a0603a97f3e51be1d83f471a1df 012b3744d4554e7db148b3fb35827e18fec9d12029e7e276707b2eb244dbb47b Swarm的swarm join命令用于將Docker Node添加至Swarm管理的Docker集群中。從這點也可以看出swarm join命令的執(zhí)行位于Docker Node,因此在Docker Node上運行該命令,首先需要在Docker Node上安裝Swarm,由于該Swarm只會執(zhí)行swarm join命令,故可以將其當(dāng)成Docker Node上用于注冊的agent模塊。功能而言,swarm join可以認為是完成Docker Node在Swarm節(jié)點處的注冊(register)工作,以便Swarm在執(zhí)行swarm manage時可以發(fā)現(xiàn)該Docker Node。


4、啟動Swarm Manager

Swarm中swarm manage是最為重要的管理命令。一旦swarm manage命令在Swarm節(jié)點上被觸發(fā),則說明用戶需要swarm開始管理Docker集群。從運行流程的角度來講,swarm經(jīng)歷的階段主要有兩點:啟動swarm、接收并處理Docker集群管理請求。

root@controller:~# docker run -p 2376:2375 -d swarm manage token://88b70a0603a97f3e51be1d83f471a1df 62ad831e134a1f2c61385fae4684396b0375deef07c9137cbb80543193ea2e4a

注意的是:在這條命令中,第一:要以daemon的形式運行swarm;第二:端口映射:2376可以更換成任何一個本機沒有占用的端口,一定不能是2375,否則就會出問題。

查看一下當(dāng)前的Swarm參與集群的機器列表 root@controller:~# docker run --rm swarm list token://88b70a0603a97f3e51be1d83f471a1df 192.168.12.132:2375

可見當(dāng)前只有132機器加入進來了。

Swarm中的swarm list命令用以列舉Docker集群中的Docker Node。Docker Node的信息均來源于Swarm節(jié)點上注冊的Docker Node。而一個Docker Node在Swarm節(jié)點上注冊,僅僅是注冊了Docker Node的IP地址以及Docker監(jiān)聽的端口號。


5、同理,我們將133,134機器添加進來

在133機器執(zhí)行

root@docker1:~# docker run -d swarm join -addr=192.168.12.133:2375 token://88b70a0603a97f3e51be1d83f471a1df e6244ba8f845d87bd9398f9e2d98a0757050bbd8fe1b4d39a827dec84c0bc541

在132機器查看節(jié)點列表

root@controller:~# docker run --rm swarm list token://88b70a0603a97f3e51be1d83f471a1df 192.168.12.133:2375 192.168.12.132:2375

在134機器執(zhí)行

root@docker2:~# docker run -d swarm join -addr=192.168.12.134:2375 token://88b70a0603a97f3e51be1d83f471a1df c2cf9a779a3b4566f5c199c9b1174a57e87cf800a5b4c37f0545b3af9c993478

在132機器查看節(jié)點列表

root@controller:~# docker run --rm swarm list token://88b70a0603a97f3e51be1d83f471a1df 192.168.12.134:2375 192.168.12.133:2375 192.168.12.132:2375

查看完節(jié)點列表,我們也看到了相關(guān)docker服務(wù)器已經(jīng)加入到了集群中,但是我們需要查詢一下集群的節(jié)點信息

執(zhí)行docker -H 192.168.12.132:2376 info



我們從中發(fā)現(xiàn)一個問題,所含的三個集群子節(jié)點只有一個狀態(tài)是Healthy,其他都是pending狀態(tài),我們也看到Error 信息:Error: ID duplicated.

這是因為,我在本機的虛擬機來實踐,我的所有機器都是通過同一個機器進行復(fù)制,所以導(dǎo)致ID都是一樣,因此報錯,在生產(chǎn)環(huán)境應(yīng)該不會出現(xiàn)該問題。當(dāng)然,這個問題也可以解決,我們只需要將/etc/docker.key.json文件直接刪除掉,然后重啟一下,系統(tǒng)會新生成一個隨機的key.json文件,也就解決該問題了。


重新執(zhí)行該命令

root@controller:~# docker -H 192.168.12.132:2376 info Containers: 23Running: 6Paused: 0Stopped: 17 Images: 23 Server Version: swarm/1.2.3 Role: primary Strategy: spread Filters: health, port, containerslots, dependency, affinity, constraint Nodes: 3controller: 192.168.12.132:2375└ ID: CTCC:NH3C:3LID:NMV6:IPEZ:BEXX:GQEH:74GY:RMS6:4MCW:NWOT:MG5Q└ Status: Healthy└ Containers: 12└ Reserved CPUs: 0 / 2└ Reserved Memory: 1 GiB / 2.046 GiB└ Labels: executiondriver=, kernelversion=3.13.0-92-generic, operatingsystem=Ubuntu 14.04 LTS, storagedriver=aufs└ UpdatedAt: 2016-07-10T07:34:54Z└ ServerVersion: 1.11.2docker1: 192.168.12.133:2375└ ID: MBI4:BY3Z:FOJN:XDLB:6I24:JYKJ:QQKY:MWBS:ZTRI:ATM6:QTDO:7XRR└ Status: Healthy└ Containers: 6└ Reserved CPUs: 0 / 1└ Reserved Memory: 0 B / 1.012 GiB└ Labels: executiondriver=, kernelversion=3.13.0-24-generic, operatingsystem=Ubuntu 14.04 LTS, storagedriver=aufs└ UpdatedAt: 2016-07-10T07:34:31Z└ ServerVersion: 1.11.2docker2: 192.168.12.134:2375└ ID: ZU2Y:GUAK:CMAK:NDMG:HKII:JY3R:7FLM:VM74:5FNJ:X6ON:ZDKM:LQI7└ Status: Healthy└ Containers: 5└ Reserved CPUs: 0 / 2└ Reserved Memory: 0 B / 2.045 GiB└ Labels: executiondriver=, kernelversion=3.13.0-24-generic, operatingsystem=Ubuntu 14.04 LTS, storagedriver=aufs└ UpdatedAt: 2016-07-10T07:34:31Z└ ServerVersion: 1.11.2 Plugins:Volume:Network: Kernel Version: 3.13.0-92-generic Operating System: linux Architecture: amd64 CPUs: 5 Total Memory: 5.103 GiB Name: c8714a5864d1 Docker Root Dir: Debug mode (client): false Debug mode (server): false WARNING: No kernel memory limit support

至此,Swarm集群部署完畢!


還記得上次我們在介紹SuperMap iCloudManager 8C 新特性,已經(jīng)支持Docker了,當(dāng)時只是在Docker單機進行的操作。

?SuperMap iCloudManager 8C Sp2新特性——擁抱Docker容器支持
http://blog.csdn.net/chinagissoft/article/details/51545904


現(xiàn)如今,我們已經(jīng)搭建了Swarm集群,我們就在集群環(huán)境下試用一下iCloudManager。

根據(jù)上述描述我們可以看到,三臺Docker集群總共的計算資源(2CPU+2G RAM,1CPU+1G RAM,2CPU+2G RAM),總共5CPU+5G RAM.


首先,我們在配置初始化的時候,需要輸入Swarm Manager的IP和端口號(2376)而不是2375,因為2375代表132機器的信息,2376代表集群的整體信息。



同時,我們可以可以在首頁看到整體的資源信息



我們創(chuàng)建個新的iServer實例后可以看到,已經(jīng)創(chuàng)建在132機器上了。

root@controller:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d73f706d1ba 322cacd8b1ca "/bin/sh -c /opt/run." 15 minutes ago Up 14 minutes 0.0.0.0:51237->809 0/tcp sm_iserver-51237 c38dd3d3e671 322cacd8b1ca "/bin/sh -c /opt/run." 16 minutes ago Up 16 minutes 0.0.0.0:53796->809 0/tcp sm_iserver-53796 c8714a5864d1 swarm "/swarm manage token:" 55 minutes ago Up 55 minutes 0.0.0.0:2376->2375 /tcp sick_lichterman f099c42cc02f swarm "/swarm join -addr=19" 55 minutes ago Up 55 minutes 2375/tcp evil_lovelace 201248c1e82a swarm "/swarm manage token:" 21 hours ago Exited (2) 20 hours ago hopeful_albattani cdac07b03439 swarm "/swarm join -addr=19" 21 hours ago Exited (2) 20 hours ago focused_kirch e8295720300b swarm "/swarm manage token:" 39 hours ago Exited (2) 38 hours ago adoring_mayer dd6e3154ea6c supermap/icloudmanager:c802 "/bin/sh -c /etc/iclo" 41 hours ago Up 39 minutes 0.0.0.0:8080->8080 /tcp root_icloudmanager_1 6b22dd275262 zabbix/zabbix-3.0:3.0.0 "/config/bootstrap.sh" 41 hours ago Up 39 minutes 0.0.0.0:80->80/tcp , 0.0.0.0:10051->10051/tcp, 162/udp, 10052/tcp root_zabbix-server_1 d3c0d9431c28 zabbix/zabbix-db-mariadb "/run.sh" 41 hours ago Up 39 minutes 0.0.0.0:3306->3306 /tcp root_zabbix-db_1 012b3744d455 swarm "/swarm join -addr=19" 42 hours ago Exited (2) 38 hours ago condescending_dijkstra 47b06d6ef5e1 registry:2.3.0 "/bin/registry /etc/d" 46 hours ago Up 57 minutes 0.0.0.0:5000->5000 /tcp registry

注意:通過Swarm 集群盡量與Docker Registry進行配合使用,也就是iCM的鏡像使用倉庫里面的鏡像,然后通過iCM創(chuàng)建實例的時候,就可以快速pull過來。


接下來我們之間通過命令行來創(chuàng)建容器實例,

執(zhí)行如下命令:docker -H 192.168.12.132:2376 ?run -id --name ubuntu ?ubuntu:14.04

root@controller:~# docker -H 192.168.12.132:2376 run -id --name ubuntu ubuntu:14.04 850f4f774623f970a96d10232899cf94761ab0770b98699cd32bdddf88fa4c6f


我們在docker2機器上看到已經(jīng)創(chuàng)建的實例 root@docker2:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 850f4f774623 ubuntu:14.04 "/bin/bash" 2 minutes ago Up 2 minutes ubuntu ed47f31a032f swarm "/swarm join -addr=19" 57 minutes ago Up 57 minutes 2375/tcp jolly_golick 982c4c9a615b swarm "/swarm join -addr=19" About an hour ago Exited (2) About an hour ago jolly_mcclintock 3095e60cb60f swarm "/swarm join -addr=19" 20 hours ago Exited (2) 20 hours ago adoring_cray 56b828a44daa swarm "/swarm join -addr=19" 21 hours ago Exited (2) 20 hours ago high_meitner c2cf9a779a3b swarm "/swarm join -addr=19" 31 hours ago Exited (2) 28 hours ago modest_newton


我們繼續(xù)創(chuàng)建同樣的實例ubuntu1 root@controller:~# docker -H 192.168.12.132:2376 run -id --name ubuntu1 ubuntu:14.04 e791527c382c454b99f70aeb732b154c500f5586eff2ba124f472e26ec8e3a69


我們看到ubuntu1已經(jīng)創(chuàng)建到了docker1機器上了 root@docker1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e791527c382c ubuntu:14.04 "/bin/bash" 20 seconds ago Up 19 seconds ubuntu1 8f186a1bc3f4 swarm "/swarm join -addr=19" 57 minutes ago Up 57 minutes 2375/tcp kickass_archimedes e636fb8a6084 swarm "/swarm join -addr=19" 21 hours ago Exited (2) 20 hours ago clever_raman 1a5e6b6eb667 swarm "/swarm join -addr=19" 23 hours ago Exited (2) 23 hours ago goofy_varahamihira e6244ba8f845 swarm "/swarm join -addr=19" 42 hours ago Exited (2) 39 hours ago suspicious_sinoussi 07438a67cc7a swarm "/swarm join -addr=19" 42 hours ago Exited (2) 39 hours ago admiring_leavitt
如果我們繼續(xù)創(chuàng)建ubuntu實例,會報已經(jīng)有同名的錯誤 root@controller:~# docker -H 192.168.12.132:2376 run -id --name ubuntu ubuntu:14.04 docker: Error response from daemon: Conflict: The name ubuntu is already assigned. You have to delete (or rename) that container to be able to assign ubuntu to a container again.. See 'docker run --help'.
但是這個錯誤應(yīng)該跟調(diào)度有關(guān)系,同一集群同一個節(jié)點內(nèi)不應(yīng)該有同樣的實例名,但是同一集群不同的節(jié)點應(yīng)該可以有同樣的實例名,接下來我們就看看關(guān)于Swarm集群的調(diào)度以及過濾機制


接下來我們就針對Docker Swarm的集群進行操作,包括SuperMap iCloudManager在Swarm集群的操作。




總結(jié)

以上是生活随笔為你收集整理的Docker Swarm集群实践——部署篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。