创立集群
在任意节点下通过 docker swarm init
命令创立一个新的 Swarm 集群并退出,且该节点会默认成为 Manager 节点。
docker swarm init --advertise-addr xx.xx.xx.xx
通常,第一个退出集群的治理节点将成为 Leader
,起初退出的治理节点都是 Reachable
。以后的 Leader 如果挂掉,所有的 Reachable 将从新选举一个新的 Leader。
退出集群
Docker 中内置的集群模式自带了公钥基础设施 (PKI) 零碎,使得平安部署容器变得简略。集群中的节点应用传输层平安协定 (TLS) 对集群中其余节点的通信进行身份验证、受权和加密。
默认状况下,通过 docker swarm init
命令创立一个新的 Swarm 集群时,Manager 节点会生成新的根证书颁发机构(CA)和密钥对,用于爱护与退出群集的其余节点之间的通信安全。
Manager 节点会生成两个令牌,供其余节点退出集群时应用:一个 Worker 令牌,一个 Manager 令牌。每个令牌都包含根 CA 证书的摘要和随机生成的密钥。当节点退出群集时,退出的节点应用摘要来验证来自远程管理节点的根 CA 证书。远程管理节点应用密钥来确保退出的节点是批准的节点。
Manager
若要向该集群增加 Manager 节点,治理节点先运行 docker swarm join-token manager
命令查看治理节点的令牌信息。
docker swarm join-token manager
而后在其余 Docker 节点上运行上述命令退出 Swarm 集群,该节点角色为 Manager。
Worker
通过创立集群时返回的后果能够得悉,要向这个集群增加一个 Worker 节点,运行下图中的命令即可。或者治理节点先运行 docker swarm join-token worker
命令查看工作节点的令牌信息。
而后在其余节点上运行 docker swarm join
并携带令牌参数退出 Swarm 集群,该节点角色为 Worker。
查看集群信息
在任意 Manager 节点中运行 docker info
能够查看以后集群的信息。
docker info
查看集群节点
在任意 Manager 节点中运行 docker node ls
能够查看以后集群节点信息。
docker node ls
*
代表以后节点,当初的环境为 3 个治理节点形成 1 主 2 从,以及 2 个工作节点。
节点 MANAGER STATUS
阐明:示意节点是属于 Manager 还是 Worker,没有值则属于 Worker 节点。
Leader
:该节点是治理节点中的主节点,负责该集群的集群治理和编排决策;Reachable
:该节点是治理节点中的从节点,如果 Leader 节点不可用,该节点有资格被选为新的 Leader;Unavailable
:该治理节点已不能与其余治理节点通信。如果治理节点不可用,应该将新的治理节点退出群集,或者将工作节点降级为治理节点。
节点 AVAILABILITY
阐明:示意调度程序是否能够将任务分配给该节点。
Active
:调度程序能够将任务分配给该节点;Pause
:调度程序不会将新任务分配给该节点,但现有工作仍能够运行;Drain
:调度程序不会将新任务分配给该节点,并且会敞开该节点所有现有工作,并将它们调度在可用的节点上。
删除节点
Manager
删除节点之前须要先将该节点的 AVAILABILITY
改为 Drain
。其目标是为了将该节点的服务迁徙到其余可用节点上,确保服务失常。最好检查一下容器迁徙状况,确保这一步曾经解决实现再持续往下。
docker node update --availability drain 节点名称 | 节点 ID
而后,将该 Manager 节点进行降级解决,降级为 Worker 节点。
docker node demote 节点名称 | 节点 ID
而后,在曾经降级为 Worker 的节点中运行以下命令,来到集群。
docker swarm leave
最初,在治理节点中对方才来到的节点进行删除。
docker node rm 节点名称 | 节点 ID
Worker
删除节点之前须要先将该节点的 AVAILABILITY
改为 Drain
。其目标是为了将该节点的服务迁徙到其余可用节点上,确保服务失常。最好检查一下容器迁徙状况,确保这一步曾经解决实现再持续往下。
docker node update --availability drain 节点名称 | 节点 ID
而后,在筹备删除的 Worker 节点中运行以下命令,来到集群。
docker swarm leave
## 遣散集群
docker swarm leave --force
最初,在治理节点中对方才来到的节点进行删除。
docker node rm 节点名称 | 节点 ID
服务部署
留神:跟集群治理无关的任何操作,都是在 Manager 节点上操作的。
创立服务
具体的命令能够查问 docker 官网文档,这里我以咱们的理论状况来举个例子:
docker service create \
--replicas 2 \
--name report-middle-service \
--network=host \
--mount type=bind,source=/home/application/logs,destination=/logs \
--env spring.cloud.nacos.config.namespace=xxxxxxx \
image_name -v /home/application/logs:/logs
docker service create
:创立服务;--replicas
:指定一个服务有几个实例运行;--name
:服务名称;--network
: 网络模式;--mount
:设置数据卷,我这里是绑定宿主机目录;--env
:设置环境变量,我这里设置 nacos 的 namespace
查看服务
能够通过 docker service ls
查看运行的服务。
docker service ls
能够通过 docker service inspect 服务名称 | 服务 ID
查看服务的详细信息。
docker service inspect 服务名称 | 服务 ID
能够通过 docker service ps 服务名称 | 服务 ID
查看服务运行在哪些节点上。
docker service ps
在对应的工作节点上运行 docker ps
能够查看该服务对应容器的相干信息。
弹性服务
将 service 部署到集群当前,能够通过命令弹性扩缩容 service 中的容器数量。在 service 中运行的容器被称为 task(工作)。
通过 以下两种形式 能够将 service 运行的工作扩缩容为 n 个。
docker service scale 服务名称 | 服务 ID=n
docker service update --replicas n
值得注意的是,这里我的 network 设置为 host,须要管制一台机器最多启动一个服务容器,否则端口抵触
在 Swarm 集群模式下真正意义实现了所谓的 弹性服务,动静扩缩容一行命令搞定,简略、便捷、弱小。
删除服务
通过 docker service rm 服务名称 | 服务 ID
即可删除服务。
docker service rm 服务名称 | 服务 ID
常用命令
docker swarm
命令 | 阐明 |
---|---|
docker swarm init | 初始化集群 |
docker swarm join-token worker | 查看工作节点的 token |
docker swarm join-token manager | 查看治理节点的 token |
docker swarm join | 退出集群 |
docker node
命令 | 阐明 | |
---|---|---|
docker node ls | 查看集群所有节点 | |
docker node ps | 查看以后节点所有工作 | |
docker node rm 节点名称 \ | 节点 ID | 删除节点(-f 强制删除) |
docker node inspect 节点名称 \ | 节点 ID | 查看节点详情 |
docker node demote 节点名称 \ | 节点 ID | 节点降级,由治理节点降级为工作节点 |
docker node promote 节点名称 \ | 节点 ID | 节点降级,由工作节点降级为治理节点 |
docker node update 节点名称 \ | 节点 ID | 更新节点 |
docker service
命令 | 阐明 | |
---|---|---|
docker service create | 创立服务 | |
docker service ls | 查看所有服务 | |
docker service inspect 服务名称 \ | 服务 ID | 查看服务详情 |
docker service logs 服务名称 \ | 服务 ID | 查看服务日志 |
docker service rm 服务名称 \ | 服务 ID | 删除服务(-f 强制删除) |
docker service scale 服务名称 \ | 服务 ID=n | 设置服务数量 |
docker service update 服务名称 \ | 服务 ID | 更新服务 |
结尾
对于 Docker Swarm 的大略实际就到这里,整体看来比拟容易上手,单纯的 Docker 容器集群管理工具,后续会尝试在生产环境利用,也会把遇到的问题记录下来。
参考资料
- https://docs.docker.com/engin…
- https://docs.docker.com/engin…
- https://docs.docker.com/engin…