1. 程式人生 > >docker 學習之-swarm集群搭建及測試

docker 學習之-swarm集群搭建及測試

foreign 目錄配置 onf imp ast fig tro entos 打開

swarm is a simple tool which controls a cluster of Docker hosts and exposes it as a single "virtual" host.
就是一個docker集群管理工具。swarm的管理對象不是服務器層面而是集群層面的,指令只能是發送到集群,不能指定某個節點主機。

實驗環境為3臺虛擬機:
安裝系統為centos7 ;docker社區版,版本為version 18.09.3, build 774a1f4

Hostname IP
node1 192.168.56.100
node2 192.168.56.101
node3 192.168.56.102

--------------------------------------------------docker-ce安裝--------------------------------------------
1.安裝必要的系統工具:
yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加軟件源信息:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.更新 yum 緩存:
yum makecache fast

4.安裝 Docker-ce:
yum -y install docker-ce

5.啟動 Docker 後臺服務
systemctl start docker
systemctl enable docker

其他:
在內網代理環境配置代理;存儲目錄配置略(非重點,不必須)


--------------------------------------------------swarm集群---------------------------------------------
1.拉取swarm鏡像(在node1上):
docker pull swarm

2.初始化swarm-manage(在node1上,node1成為Leader)
docker swarm init --advertise-addr 192.168.56.100

參數說明:
init:初始化swarm集群;
--advertise-addr:通告地址,告知其它swarm節點通過192.168.56.100:加入swarm集群;

配置後提示信息包含如下內容用來加入集群:
docker swarm join --token SWMTKN-1-23togywdok3bslzcgk3nkuyinq392nmd0rvs54qyr69y0ji04r-2hzjt4zuvffw8kh5krpwkpx9g 192.168.56.100:2377

3.agent節點加入集群(在node2,node3上):
docker swarm join --token SWMTKN-1-23togywdok3bslzcgk3nkuyinq392nmd0rvs54qyr69y0ji04r-2hzjt4zuvffw8kh5krpwkpx9g 192.168.56.100:2377
(node1防火墻要開放2377端口;agent節點需要開放7946端口)

4.在manager節點(node1)上查看集群:
docker node ls

ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
0ik4sb8zu3hx1eor81gw1fm8j * node1 Ready Active Leader 18.09.3
rqsmge57mx6vp18jpkkie0drg node2 Ready Active 18.09.3
5dhhc93d00yigrv0n915nhiup node3 Ready Active 18.09.3


--------------------------------------------------實驗測試---------------------------------------------

現在一個swarm集群已經建好,非常簡單。測試在swarm集群中啟動nginx服務,測試其容錯能力。

只需要在集群的manager節點配置:(在node1上)
1.拉取nginx鏡像
docker pull nginx

2.創建服務,服務名為test1,副本數3(副本數不能超過集群中節點數)
docker service create --replicas 3 --name test1 nginx
gf3869720b1o91l4w6gwkcnxt
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged ]

3.查看副本運行情況:
docker service ps test1
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tqvaaszfieqk test1.1 nginx:latest node2 Running Running about an hour ago
9d2mmi1537a8 test1.2 nginx:latest node3 Running Running about an hour ago
oicoadweql0z test1.3 nginx:latest node1 Running Running about an hour ago

此時nginx已經啟動,在每個節點上docker ps -l 都能看到nginx的容器在運行。

4.將nginx容器的80端口映射到虛擬機8001端口上:
docker service update --publish-add 8001:80 test1
test1
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged

查看端口,發現每個節點的8001端口都被映射:
netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:
LISTEN
tcp6 0 0 :::22 ::: LISTEN
tcp6 0 0 ::1:25 :::
LISTEN
tcp6 0 0 :::8001 ::: LISTEN
tcp6 0 0 :::7946 :::
LISTEN

在每個節點防火墻開放8001端口後,通過web訪問:
通過瀏覽器訪問任意節點:
http://192.168.56.100:8001/
http://192.168.56.101:8001/
http://192.168.56.102:8001/

技術分享圖片

已經可以訪問到index.html

5.將容器數據持久化:
默認容器的數據是保存在容器的可讀寫層,當容器被刪除時其上的數據將會丟失,所以為了實現數據的持久性則需要選擇一種數據持久技術來保存數據,當前有以下幾種方式:

  • Volumes
  • Bind mounts
  • tmpfs

Volume 是 docker 容器生成持久化數據的首選機制。bind mounts 依賴主機機器的目錄機構,volume 完全由 docker 管理。
volume 較 bind mounts 有幾個優勢:

  • volume 比 bind mounts 更易備份和遷移。
  • 可以使用 docker cli 命令和 API 管理 volume。
  • volume 工作在 linux 和 windows 容器上。
  • volume 在多個容器間共享可以更安全。
  • volume 驅動允許存儲 volume 到主機和雲,加密 volume 內容,或者添加其它功能。
  • 新的 volume 可以含有容器預放置的內容。

在node1上:
docker service update --mount-add type=volume,src=test1-nginx,dst=/usr/share/nginx/html test1
test1
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged

通過docker inspect 9f52976aa6de 查看到容器volume映射到的宿主機目錄為:
/var/lib/docker/volumes/test1-nginx/_data
在該目錄下替換index.html為測試頁面:
技術分享圖片

修改後發現只有node1的頁面修改了,集群中其他2個node的數據並沒有同步。
問題:在訪問時頁面打開頁比較慢,不知什麽原因。
swarm暫時記錄至此,還有很多細節待日後補充。

docker 學習之-swarm集群搭建及測試