Docker集群管理(二)—— docker+swarm+etcd+shipyard

时间:2021-07-21 19:52:59

引言

前一篇介绍如何简单的搭建一个可视化管理的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集群信息了.

在集群中启动一个服务