引言
前一篇介紹如何簡單的搭建一個可視化管理的docker集群,本篇將在此基礎之上引入etcd發現服務。
目的
使用etcd發現服務解決swarm內置發現服務的不穩定問題。etcd采用raft算法,這里有篇容易理解的raft算法
Etcd是一個高可用的 Key/Value 存儲系統,主要用於分享配置和服務發現。
- 簡單:支持 curl 方式的用戶 API (HTTP+JSON)
- 安全:可選 SSL 客戶端證書認證
- 快速:單實例可達每秒 1000 次寫操作
- 可靠:使用 Raft 實現分布式
安裝etcd
docker run -ti -d -p 4001:4001 -p 7001:7001 --restart=always --name shipyard-discovery docker.io/microbox/etcd -name discovery
啟動swarm manger
docker run -ti -d -p 2376:2375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 etcd://192.168.139.128:4001
很容易發現,只是將原來的 token://xxx 換成了 etcd://xxx
啟動swarm agent,
在每個docker節點分別執行,將當前docker節點加入到集群中:
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.128:2375 etcd://192.168.139.128:4001
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.129:2375 etcd://192.168.139.128:4001
docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.130:2375 etcd://192.168.139.128:4001
我們來看下集群中的節點:
docker run --rm swarm list etcd://192.168.139.128:4001
會報這個錯誤:“client: etcd cluster is unavailable or misconfigured,自然在shipyard中的節點、容器和鏡像都是空的。這是因為防火牆的問題,在防火牆中添加4001端口
firewall-cmd --zone=public --permanent --add-port=4001/tcp
firewall-cmd --reload
現在看看shipyard中是不是已經有了docker集群信息了.
