> 文章列表 > Docker三剑客之swarm

Docker三剑客之swarm

Docker三剑客之swarm

一、什么是docker swarm

Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目。不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

docker info 可以看到此时集群是 inactive 状态, 如果集群成功启动,Swarm 的状态就变成了 active。
Docker三剑客之swarm
Docker三剑客之swarm

二、docker swarm 命令

docker swarm --help

Docker三剑客之swarm

2.1 init

docker swarm init

Docker三剑客之swarm

2.2 join-token

以什么样的角色加入swarm集群,worker 和 manager

docker swarm join-token worker

Docker三剑客之swarm

可以使用产生的token将其他机器加入到集群。

docker swarm join --token SWMTKN-1-02ndmbk1ld2s6kgu8sx3f1oy2yrc1ocekald8fvi46lto2wb8v-chsch9zcu9te4ezhtdrjr7ytz 10.xxx.xxx.12:2377

使用 docker node ls 查看当前集群的信息,注意:改命令只能在manager节点上执行。

docker node ls

Docker三剑客之swarm

2.3 leave

离开集群,普通的节点可以直接离开,manager节点需要–force。

docker swarm leave  # worker节点 直接离开
docker swarm leave --force  # master 节点需要使用 --force参数,强制离开

Docker三剑客之swarm

2.4 unlock

在集群主节点异常掉线后,如果想要再次加入就必须unlock。为什么要这么设计呢?如果直接让它加进来,可能会出现多个leader,也就是脑裂的情况。unlock就是解决这种情况的。 注意:解锁要基于现有的集群,并且已经产生了新的leader。

场景模拟: 我们以manager的角色创建一个三个节点的集群。假设,现在有三台机器,A B C

在A上执行

docker swarm join-token manager

在B C 上分别执行在A机器上产生的token:

docker swarm join --token SWMTKN-1-5l15gcri88qwzvr48lln0ej78a9txvuh0r5vt8itq418wb8ntz-ehkltnukogmxlqk9qts7u20hl 10.xxx.xxx.12:2377

Docker三剑客之swarm三台机器中,有一台是leader,另外两台是候选者。也就当leader出现问题的时候,可以顶上去。

以下操作都是在机器A中

接着,修改集群的ca证书。什么时候修改证书呢?我们的秘钥可能泄漏,或者存在安全风险时或者证书过期(一般有限期是一年),需要替换新的证书。

2.5 ca 修改证书

docker swarm ca --rotate

Docker三剑客之swarm

2.6 update 更新集群

docker swarm update --autolock=true
docker swarm unlock-key    # 获取集群秘钥

会返回给我们一个秘钥,如果没有记住秘钥,可以使用
Docker三剑客之swarm
我们停掉机器A上的docker,模拟master 节点宕机。

systemctl stop docker

然后,会在剩下的B C 机器中选一个leader出来(需要一定的时间)。选举成功后,可以使用 docker node ls 查看。
Docker三剑客之swarm此时机器A已经处于下线状态,并且新的Leader已经成功选举。

接着,我们重启机器A的docker, 使用docker ps 等指令也能启动docker。此时使用 docker info 查看自己Swarm的状态变成了locked。
Docker三剑客之swarm
也就是说,此时的机器A向重新加入集群要先解锁。去B或者C上,执行 docker swarm unlock-key 拿到秘钥,再执行以下命令进行解锁,解锁完查看docker info,此时Swarm的状态就是active了

docker swarm unlock # 回车,输入获得的秘钥即可解锁

Docker三剑客之swarm
最后去B 或者 C 查看集群信息,可以看到此时 A 已经成功加入到集群了。
Docker三剑客之swarm

三、节点管理

Docker三剑客之swarm

3.1 demote

将主节点降级为worker节点。

docker node demote HOSTNAME

3.2 promote

将worker节点升级为master节点。

docker node promote HOSTNAME

3.3 inspect

查看节点的详细信息。

docker node inspect HOSTNAME

3.4 ls

查看集群节点信息。

docker node ls

3.5 ps

查看节点的应用信息。

docker node ps HOSTNAME

3.6 rm

删除一个节点。跟 leave的区别:docker swarm leave 虽然离开了集群,但是记录还在。完整流程应该是:先 rm 再 leave 。

docker node rm HOSTNAME

3.7 update

更新节点。

Docker三剑客之swarm

推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习: