Docker Swarm 集群搭建

Docker Swarm Mode
Docker Swarm 集群搭建
Docker Swarm 节点维护
Docker Service 创建

1.准备主机

 搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂
时的角色分配如下(注意,搭建完成后会切换角色):

host ip role
docker 192.168.137.100 manager
docker2 192.168.137.101 manager
docker3 192.168.137.102 manager
docker4 192.168.137.103 worker
docker5 192.168.137.104 worker

Hyper-v 设置静态IP 搭建集群

2.搭建swarm集群

2.1 查看 swarm 激活状态

在任意 docker 主机上通过 docker info 命令可以查看到当前 docker 引擎 Server 端对于swarm 的激活状态。由于尚未初始化 swarm 集群,所以这些 docker 主机间没有任何关系,且 swarm 均未被激活。

docker info

Docker Swarm 集群搭建_第1张图片

2.2 swarm 初始化

在主机名为“docker”的主机上运行 docker swarm init 命令,创建并初始化一个 swarm。

# 如果多网卡,需要指定ip。--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。
docker swarm init --advertise-addr 192.168.137.100:2377 --listen-addr 192.168.137.100:2377

Docker Swarm 集群搭建_第2张图片

2.3 添加 worker 节点

复制 docker swarm init 命令的响应结果中添加 wroker 节点的命令在 docker4 与 docker5节点上运行,将这两个节点添加为 worker 节点。

# ip表示manager主机ip:port
# --advertise-addr参数表示worker节点使用此ip地址与manager联系
docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.104:2377

2.4 添加 manager 节点

(1)获取添加命令

若要为 swarm 集群添加 manager 节点,需要首先在 namager 节点获取添加命令

docker swarm join-token manager

(2)添加节点

复制 docker swarm join-token 命令生成的 manager 添加命令,然后在 docker2 与 docker3节点上运行,将这两个节点添加为 manager 节点。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.101:2377

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.102:2377

2.5 查看 swarm 节点

在 manager 任意一个节点 docker、docker2、docker3 上通过 docker node ls 命令可以查看到当前swarm 集群所包含的节点状态数据。

Docker Swarm 集群搭建_第3张图片

3. swarm 集群维护

当一个节点想从 swarm 集群中退出时,可以通过 docker swarm leave 命令。不过 worker节点与 manager 节点的退群方式是不同的。

3.1 worker 退群

对于 worker 节点退群,直接运行 docker swarm leave 命令即可。

Docker Swarm 集群搭建_第4张图片

此时在 manager 节点中查看节点情况,可以看到 docker4 已经 Down 了。

3.2 worker 重新加入

在 manager 节点上运行 docker swarm join-token worker 命令,查看加入 worker 节点的命令。

复制生成的命令,在 docker4 节点上运行,将此节点添加到 swarm 集群。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377

3.3 查看节点情况

此时在 manager 节点中查看节点情况,可以看到原来的 docker4 依然是 Down,但又新增了一个新的 docker4 节点,其状态为 Ready。

Docker Swarm 集群搭建_第5张图片

此时在 manager 节点通过 docker info 命令可以查看到节点数量变为了 6 个。

Docker Swarm 集群搭建_第6张图片

3.4 删除 Down 状态节点

对于Down状态的节点是完全可以将其删除的。通过在manager节点运行docker node rm命令完成。

docker node rm <nodeId>

Docker Swarm 集群搭建_第7张图片

3.5 manager 退群

 对于 manager 节点,原则上是不推荐直接退群的,这样会导致 swarm 集群的一致性受到损坏。如果 manager 执意要退群,可在 docker swarm leave 命令后添加-f`` 或–force`` 选项进行强制退群。

4. swarm 自动锁定

4.1 swarm 集群自动锁定原理

 在 manager 集群中,swarm 通过 Raft 日志方式维护了 manager 集群中数据的一致性。即在 manager 集群中每个节点通过 manager 间通信方式维护着自己的 Raft 日志。

 但在通信过程中存在有一种风险:Raft 日志攻击者会通过 Raft 日志数据的传递来访问、篡改 manager 节点中的配置或数据。为了防止被攻击,swarm 开启了一种集群自动锁定功能,为 manager 间的通信启用了 TLS 加密。用于加密和解密的公钥与私钥,全部都维护在各个节点的 Docker 内存中。一旦节点的 Docker 重启,则密钥丢失

 swarm 中通过 autolock 标志来设置集群的自动锁定功能:为 true 则开启自动锁定,为
false 则关闭自动锁定。

4.2 设置自动锁定

 在 manager 节点通过 docker swarm update –-autolock=true 命令可以开启当前 swarm 集群的自动锁定功能。

Docker Swarm 集群搭建_第8张图片

此时查看 manager 的 docker info 可以看到,autolock 已经为 true 了。

Docker Swarm 集群搭建_第9张图片

4.3 查看解锁密钥

如果没有保存 docker swarm update --autolock=true 命令中生成的密钥,也可通过在manager 中运行 docker swarm unlock-key 命令查看。

4.4 关闭一个 manager, 模拟宕机重新加入

直接关闭 docker3 的 docker 引擎,模拟一个 manager 宕机的情况。再启动 docker3 的 docker 引擎。

systemctl stop docker
systemctl start docker

此时再查看该节点的 docker info,可以看到 Swarm 值为 locked,即当前节点看到的 Swarm集群的状态为锁定状态,其若要加入,必须先解锁。

Docker Swarm 集群搭建_第10张图片

即使 docker3 已经正常启动,也没有被加入到集群中

Docker Swarm 集群搭建_第11张图片

在 docker3 中运行 docker swarm unlock 命令 输入密钥,解锁 swarm。

此时再查看节点信息,该 manager 已经加入。

Docker Swarm 集群搭建_第12张图片

你可能感兴趣的:(云原生,docker,java,云原生)