Swarm——Docker 集群管理工具学习指南

2023-07-0910:28:50服务器及运维Comments786 views字数 2297阅读模式

简介

Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

支持的工具包括但不限于以下各项:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

  • Dokku 
  • Docker Compose
  • Docker Machine
  • Jenkins

原理

如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

  • swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。 
  • work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

使用

以下示例,均以 Docker Machine 和 virtualbox 进行介绍,确保你的主机已安装 virtualbox。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

1、创建 swarm 集群管理节点(manager)

创建 docker 机器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

$ docker-machine create -d virtualbox swarm-manager

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip。

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker swarm join --Token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、创建 swarm 集群工作节点(worker)

这里直接创建好俩台机器,swarm-worker1 和 swarm-worker2 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

以上数据输出说明已经添加成功。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

上图中,由于上一步复制的内容比较长,会被自动截断,实际上在图运行的命令如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3、查看集群信息

进入管理节点,执行:docker info 可以查看当前集群的信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

$ docker info

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

通过画红圈的地方,可以知道当前运行的集群中,有三个节点,其中有一个是管理节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

4、部署服务到集群中

注意:跟集群管理有关的任何操作,都是在管理节点上操作的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

以下实例,在一个工作节点上创建一个名为 helloworld 的服务,这里是随机指派给一个工作节点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

5、查看服务部署情况

查看 helloworld 服务运行在哪个节点上,可以看到目前是在 swarm-worker1 节点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service ps helloworld

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

查看 helloworld 部署的具体信息:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service inspect --pretty helloworld

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

6、扩展集群服务

我们将上述的 helloworld 服务扩展到俩个节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service scale helloworld=2

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

可以看到已经从一个节点,扩展到两个节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

7、删除服务

docker@swarm-manager:~$ docker service rm helloworld

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

查看是否已删除:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

8、滚动升级服务

以下示例,我们将介绍 redis 版本如何滚动升级至更高版本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

创建一个 3.0.6 版本的 redis。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

滚动升级 redis 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

看图可以知道 redis 的版本已经从 3.0.6 升级到了 3.0.7,说明服务已经升级成功。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

9、停止某个节点接收新的任务

查看所有的节点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$ docker node ls

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

可以看到目前所有的节点都是 Active, 可以接收新的任务分配。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

停止节点 swarm-worker1:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

注意:swarm-worker1 状态变为 Drain。不会影响到集群的服务,只是 swarm-worker1 节点不再接收新的任务,集群的负载能力有所下降。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

可以通过以下命令重新激活节点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

docker@swarm-manager:~$  docker node update --availability active swarm-worker1

Swarm——Docker 集群管理工具学习指南文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/50748.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/50748.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定