新聞中心
一. Docker Swarm 的概念和原理
Docker Swarm 簡介
Swarm 是使用 Objective C語言開發(fā)的,在早期的版本中編寫Swarm的應用程序也使Objective C,從Swarm 2.0版開始提供了對Java語言的支持,將來可能支持JavaScript、C++、Python、Perl等語言。Swarm的最新版本 Swarm 2.1.1可以在不同版本的Unix、Linux、Windows95、Windows98、WindowsNT、Windows2000環(huán)境下運行。
創(chuàng)新互聯(lián)建站服務項目包括昭平網站建設、昭平網站制作、昭平網頁制作以及昭平網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,昭平網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到昭平省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
社會經濟系統(tǒng)的仿真,是建立在復雜適應系統(tǒng)(Complex Adaptive System 簡稱CAS)理論研究基礎上的。通過"相對簡單的微觀個體活動可以突現(xiàn)出宏觀層面的復雜行為",給社會科學的研究與實踐乘上當代新技術的航班打開了通路。
Docker Swarm 工作原理
Docker 客戶端通過 Docker API 向 Swarm 管理端發(fā)送請求,Swarm Manager 通過守護進程調用集群中的某個節(jié)點來執(zhí)行任務。因為容器都是運行在節(jié)點上,Swarm 作為一個獨立的集群管理工具,故并不會因某些原因導致不能正常工作而影響集群內所有節(jié)點的正常運行。當服務恢復正常后,Swarm 會讀取日志來執(zhí)行集群的恢復動作。架構圖如圖 1:
圖 1.Docker Swarm 架構圖
作用
從1994年開始,桑塔費研究所(SFI)開展了一個研究項目,以開發(fā)一個工具集用來幫助科學家們分析復雜適應系統(tǒng),這個模擬工具集就叫做Swarm。1995年,SFI發(fā)布了Swarm的beta版。
用戶可以使用Swarm提供的類庫構建模擬系統(tǒng),使系統(tǒng)中的主體和元素通過離散事件進行交互。由于Swarm沒有對模型和模型要素之間的交互作任何約束,Swarm應當可以模擬任何物理系統(tǒng)或社會系統(tǒng)。事實上,在各個廣泛的研究領域都有人在用Swarm編寫程序,這些領域包括生物學、經濟學、物理學、化學和生態(tài)學等。
Swarm項目的目的就是通過科學家和軟件工程師的合作制造一個高效率的、可信的、可重用的軟件實驗儀器。它能給予科學家們一個標準的軟件工具集,就象提供了一個設備精良的軟件實驗室,幫助人們集中精力于研究工作而非制造工具。
Swarm實際上是一組用Objective-C語言寫成的類庫,這是一種面向對象的C語言。一部分圖形界面,如圖表、按鈕和窗口是用TCL/TK描述的。Swarm最初只能在Unix操作系統(tǒng)和X Windows界面下運行,1998年四月,伴隨著 1.1版的發(fā)布,Swarm推出了可以在Windows 95/98/NT上運行的版本。1999年,Swarm又提供了對Java的支持,從而使Swarm越來越有利于非計算機專業(yè)的人士使用。
二. Docker Swarm要點
Swarm的負載非常低。據(jù)我觀察,Swarm進行調度和通信的CPU負載非常低。因此,Swarm的管理節(jié)點(Manager)可以同時作為工作節(jié)點(Worker)。如果你需要搭建一個非常大的集群(1000+ 節(jié)點),管理節(jié)點需要更多資源,但是對于中小型集群來說,管理節(jié)點需要的資源可以忽略不計。
Swarm集群的網絡通信(服務發(fā)現(xiàn),負載均衡以及容器間通信)非常可靠。當你開啟一個服務的端口之后,在Swarm集群中的任何一個節(jié)點都可以訪問它。負載均衡也是由Swarm提供的。后文會提到一些之前遇到的問題,但是Docker 1.13之后,這些問題都解決了。
三. 實驗環(huán)境
主機 | IP地址 | 服務 |
---|---|---|
docker01 | 192.168.1.11 | swarm+overlay+webUI |
docker02 | 192.168.1.13 | nginx |
docker03 | 192.168.1.20 | nginx |
三臺主機都關閉防火墻,禁用selinux,修改主機名,時間同步,并添加域名解析。
docker版本必須是:v1.12版本開始(可使用docker version查看版本)
1.關閉防火墻,禁用selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# hostnamectl set-hostname docker03
[root@localhost ~]# su -
2.時間同步
mv /etc/localtime /etc/localtime.bk
cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime
3.修改主機名(三臺都要)
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su -
4.添加域名解析
[root@docker01 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 docker01
192.168.1.13 docker02
192.168.1.20 docker03
四. swarm原理
swarm:作用運行docker engin的多個主機組成的集群
node:每一個docker engin都是一個node(節(jié)點),分為manager和worker。
manager node:負責執(zhí)行容器的編排和集群的管理工作,保持并維護swarm處于期望的狀態(tài)。swarm可以有多個manager node,他們會自動協(xié)調并選舉一個leader執(zhí)行編排任務。但相反,不能沒有manager node。
worker node:接受并執(zhí)行由manager node派發(fā)的任務,并且默認manager node也是一個worker node,不過可以將它設置為manager-only node,讓他只負責編排和管理工作。
service:用來定義worker上執(zhí)行的命令。
基本命令操作
docker swarm leave:申請離開一個集群,之后查看節(jié)點狀態(tài)會變成down,然后可通過manager node 將其刪除
docker node rm xxx:刪除某個節(jié)點docker swarm join-token [manager|worker]:生成令牌,可以是manager或worker身份。
docker node demote(降級):將swarm節(jié)點的為manager降級為worker
docker node promote(升級):將swarm節(jié)點的work升級為manager
docker node ls:查看群集的信息(只可以在manager角色的主機上查看)
docker service scale web05=6:容器的動態(tài)擴容及縮容
docker service ps web01: 查看創(chuàng)建的容器運行在哪些節(jié)點
docker service ls: 查看創(chuàng)建的服務
docker swarm leave: 脫離這個群集
docker node rm docker03: 在manager角色的服務器上移除docker03
docker node update --availability drain docker01: 設置主機docker01以后不運行容器,但已經運行的容器并不會停止
docker node update --label-add mem=max docker03: 更改docker03主機的標簽為mem=max
docker service update --replicas 8 --image 192.168.20.6:5000/lvjianzhao:v2.0 --container-label-add 'node.labels.mem==max' lvjianzhao05: 將服務升級為8個容器,并且指定在mem=max標簽的主機上運行
五. docker01 初始化集群
[root@docker01 ~]# docker swarm init --advertise-addr 192.168.1.11
--advertise-addr:指定與其它docker通信的地址。
上邊返回的結果告訴我們:初始化成功,并且,如果想要添加work節(jié)點運行下面的命令:
注意:token令牌只有24小時的有效期
上面命令執(zhí)行后,該機器自動加入到swarm集群。這個會創(chuàng)建一個集群token,獲取全球唯一的 token,作為集群唯一標識。后續(xù)將其他節(jié)點加入集群都會用到這個token值。 其中,--advertise-addr參數(shù)表示其它swarm中的worker節(jié)點使用此ip地址與manager聯(lián)系。命令的輸出包含了其它節(jié)點如何加入集群的命令。
如果想要添加manager節(jié)點:運行下面命令
六.swarm集群的簡單操作
1.docker02和docker03以worker加入集群
[root@docker03 ~]# docker swarm join --token SWMTKN-1-5kxn9wloh7npnytklwbfciesr9di7uvu521gwnqm9h2n0pbokj-1e60wt0yr5583e4mzwbxnn3a8 192.168.1.11:2377
docker01查看集群
[root@docker01 ~]# docker node ls
注意:這里的”*****“代表的是當前所屬的節(jié)點
2.刪除集群中節(jié)點
docker02和docker03申請離開一個集群
[root@docker02 ~]# docker swarm leave
docker刪除docker02和docker03節(jié)點
[root@docker01 ~]# docker node rm docker02
[root@docker01 ~]# docker node rm docker03
docker01查看集群
[root@docker01 ~]# docker node ls
3.docker02和docker03以manager加入集群
docker01生成manager令牌
[root@docker01 ~]# docker swarm join-token manager
docker02和docker03加入集群
docker swarm join --token SWMTKN-1-5kxn9wloh7npnytklwbfciesr9di7uvu521gwnqm9h2n0pbokj-cz6hbyv9r5htyqwj5tfol65aa 192.168.1.11:2377
docker01查看集群
[root@docker01 ~]# docker node ls
4.docker02和docker03降級
docker01(manager)把docker02和docker03降級成worker
[root@docker01 ~]# docker node demote docker02
[root@docker01 ~]# docker node demote docker03
查看集群
[root@docker01 ~]# docker node ls
七. 部署docker swarm集群網絡
overlay:覆蓋型網絡
overlay networks 管理Swarm中docker守護進程間的通信。可以將容器附加到一個或多個已存在的overlay網絡上,使容器與容器之間能夠通信;
[root@docker01 ~]# docker network create -d overlay --attachable docker
//attachable:這個參數(shù)必須要加,否則不能用于容器。
在創(chuàng)建網絡的時候,我們并沒有部署一個存儲服務,比如consul,那是因為docker swarm自帶存儲。
docker01查看網絡
但是會發(fā)現(xiàn)其他兩臺并不會發(fā)現(xiàn)此網絡,需等基于此網絡創(chuàng)建service服務就可以看到了
[root@docker01 ~]# docker network ls
八. docker01部署一個圖形化webUI界面
1.docker01 導入鏡像
[root@docker01~]# docker pull dockersamples/visualizer
2.基于鏡像啟動一臺容器
[root@docker01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.100 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualiaer dockersamples/visualizer
3.通過瀏覽器訪問驗證http://192.168.1.11:8080/
如果訪問不到網頁,需開啟路由轉發(fā)
[root@docker01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@docker01 ~]# sysctl -p
九. 創(chuàng)建service(服務)
1. 基于nginx容器創(chuàng)建一個service服務
[root@docker01 ~]#docker pull nginx
//下載nginx鏡像(三臺都要)
[root@docker01 ~]# docker service create --replicas 1 --network docker --name web1 -p 80:80 nginx:latest
[root@docker01 ~]# docker service create --replicas 1 --network docker --name web2 -p 80 nginx:latest
//--replicas:副本數(shù)量
大概可以理解為一個副本等于一個容器
2. 查看創(chuàng)建的service服務
[root@docker01 ~]# docker service ls
單獨查看一個servicefuw
[root@docker01 ~]# docker service ps web1
[root@docker01 ~]# docker service ps web2
3. web界面查看
4. 基于nginx容器創(chuàng)建五個service服務
[root@docker01 ~]# docker service create --replicas 5 --network docker --name web -p 80 nginx:latest
web界面查看
5. 掛起docker02
web查看(發(fā)現(xiàn)服務都分配到其他服務器了)
6. 恢復docker02
web查看(發(fā)現(xiàn)服務沒有回到docker02)
十、實現(xiàn)docker容器的擴容及縮容
1. 刪除web1和web2服務
[root@docker01 ~]# docker service rm web1 web2
2. 容器的擴容和縮減
(1)擴容
[root@docker01 ~]# docker service scale web=8
(2)縮減
[root@docker01 ~]# docker service scale web=3
3.設置manager node不參加工作
[root@docker01 ~]# docker node update docker01 --availability drain
設置主機docker01以后不運行容器,但已經運行的容器并不會停止
“--availability”選項后面共有三個選項可配置,如下:
“active”:工作;“pause”:暫時不工作;“drain”:永久性的不工作
[root@docker01 ~]# docker node ls
web界面查看
文章標題:Dockerswarm集群的搭建部署
網頁地址:http://www.ef60e0e.cn/article/gcjjgo.html