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 --help
docker swarm init
以什么样的角色加入swarm集群,worker 和 manager
docker swarm join-token worker
可以使用产生的token将其他机器加入到集群。
docker swarm join --token SWMTKN-1-02ndmbk1ld2s6kgu8sx3f1oy2yrc1ocekald8fvi46lto2wb8v-chsch9zcu9te4ezhtdrjr7ytz 10.xxx.xxx.12:2377
使用 docker node ls 查看当前集群的信息,注意:改命令只能在manager节点上执行。
docker node ls
离开集群,普通的节点可以直接离开,manager节点需要–force。
docker swarm leave # worker节点 直接离开
docker swarm leave --force # master 节点需要使用 --force参数,强制离开
在集群主节点异常掉线后,如果想要再次加入就必须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
三台机器中,有一台是leader,另外两台是候选者。也就当leader出现问题的时候,可以顶上去。
以下操作都是在机器A中:
接着,修改集群的ca证书。什么时候修改证书呢?我们的秘钥可能泄漏,或者存在安全风险时或者证书过期(一般有限期是一年),需要替换新的证书。
docker swarm ca --rotate
docker swarm update --autolock=true
docker swarm unlock-key # 获取集群秘钥
会返回给我们一个秘钥,如果没有记住秘钥,可以使用
我们停掉机器A上的docker,模拟master 节点宕机。
systemctl stop docker
然后,会在剩下的B C 机器中选一个leader出来(需要一定的时间)。选举成功后,可以使用 docker node ls 查看。
此时机器A已经处于下线状态,并且新的Leader已经成功选举。
接着,我们重启机器A的docker, 使用docker ps 等指令也能启动docker。此时使用 docker info 查看自己Swarm的状态变成了locked。
也就是说,此时的机器A向重新加入集群要先解锁。去B或者C上,执行 docker swarm unlock-key 拿到秘钥,再执行以下命令进行解锁,解锁完查看docker info,此时Swarm的状态就是active了
docker swarm unlock # 回车,输入获得的秘钥即可解锁
最后去B 或者 C 查看集群信息,可以看到此时 A 已经成功加入到集群了。
将主节点降级为worker节点。
docker node demote HOSTNAME
将worker节点升级为master节点。
docker node promote HOSTNAME
查看节点的详细信息。
docker node inspect HOSTNAME
查看集群节点信息。
docker node ls
查看节点的应用信息。
docker node ps HOSTNAME
删除一个节点。跟 leave的区别:docker swarm leave 虽然离开了集群,但是记录还在。完整流程应该是:先 rm 再 leave 。
docker node rm HOSTNAME
更新节点。
推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习: