Docker三剑客之swarm

Posted 基层搬砖的Panda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 --help

2.1 init

docker swarm init

2.2 join-token

以什么样的角色加入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

2.3 leave

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

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

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

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

以下操作都是在机器A中

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

2.5 ca 修改证书

docker swarm ca --rotate

2.6 update 更新集群

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 已经成功加入到集群了。

三、节点管理

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

更新节点。

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

docker 三剑客之docker swarm

创建Docker Swarm集群

命令:

docker swarm init

执行上面的命令,会在当前节点上创建单节点的swarm集群,docker engine会按照以下方式设置swarm

  • 当前节点切换为swarm mode

  • 创建一个名为default的swarm

  • 将当前节点指定为群的领导者管理器节点

  • 使用计算机主机名命名节点

  • 将管理器配置为侦听端口2377上的活动网络接口

  • 将当前节点设置为Active availability,这意味着它可以从调度程序接收任务

  • 为参与swarm的Engines启动内部分布式数据存储,以维护swarm及其上运行的所有服务的一致视图

  • 默认情况下,为swarm生成自签名根CA.

  • 默认情况下,为worker和manager节点生成令牌以加入swarm

  • 创建一个名为ingress的覆盖网络,用于发布swarm外部的服务端口




以上是关于Docker三剑客之swarm的主要内容,如果未能解决你的问题,请参考以下文章

容器技术|Docker三剑客之docker-machine

容器技术|Docker三剑客之docker-compose

容器技术|Docker三剑客之docker-compose

容器技术|Docker三剑客之docker-compose

docker三剑客之docker-compose(记官方案例)

24.Docker技术入门与实战 --- Docker三剑客之Compose