翼度科技»论坛 云主机 LINUX 查看内容

Docker Swarm 集群搭建

11

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
本章将和大家分享 Docker Swarm 集群的搭建过程。废话不多说,下面我们直接进入主题。
一、Docker Swarm 简介

1、简介

Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
支持的工具包括但不限于以下各项:

  • Dokku
  • Docker Compose
  • Docker Machine
  • Jenkins
2、原理

如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

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

3、什么是Docker Swarm?

Swarm是Docker的一个编排工具,在之前我们只是在一台机器来进行docker的管理:

但是有时容器并不一定都在一台主机上,如果是分布式的处于多台主机上,这时就可以借助于Swarm,Swarm是Docker自带的编排工具,只要你安装了Docker就会存在Docker Swarm工具。

Swarm中的模式是有两大类节点,一类是manager节点,另一类是worker节点,manager节点负责服务的创建和调度,worker节点主要是运行容器服务,当然manager节点也是可以运行容器服务的。

manager节点状态、信息的同步根据Raft consensus group的网络进行通信同步的,而worker之间的通信依靠的是Gossip network做到的。
另外一个重要的概念就是service,我们可以在一个manager节点上创建一个服务,但是可以根据这一个服务创建多个容器的任务,这些容器任务运行在不同的节点上。

4、如何进行Swarm集群的搭建?


  • 在swarm模式下初始化一个Swarm集群,并且将当前主机加入到该集群作为manager节点
  • 加入其它节点到该集群中
  • 部署service到该集群中
二、Docker Swarm 集群搭建

1、创建多节点集群

1)准备多台Linux服务器

此处我准备了3台机器:

其中 192.168.4.250  作为 manager 节点,其它两台作为 worker 节点。
2)查看Swarm命令
  1. docker swarm --help
复制代码

可以看到其中有一个 init 命令,这就是初始化一个Swarm,我们再看看这个 init 的参数:
  1. docker swarm init --help
复制代码

可以看到它有很多的参数,其中第一个就是将本机的地址添加进去,让自己成为一个manager节点,这样其它的节点都可以知道这个节点的存在。
3)创建一个manager节点

在此之前我们应该先知道自己本机的ip,以便于“--advertise-addr string”这个参数使用,查看本机ip:
  1. ip addr
复制代码

然后就可以初始化 manager 节点:
  1. docker swarm init --advertise-addr=192.168.4.250
复制代码
  1. [root@localhost ~]# docker swarm init --advertise-addr=192.168.4.250
  2. Swarm initialized: current node (c06ilqppns9dg7c1wsk63egyf) is now a manager.
  3. To add a worker to this swarm, run the following command:
  4.     docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377
  5. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  6. [root@localhost ~]#
复制代码
可以看到已经创建了一个 swarm manager 节点,“--advertise-addr string”参数的值 192.168.4.250 是自己的ip地址,相当于将自己加入到 swarm 中。在运行的结果中也说明了其它 worker 加入的方式。
以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:
  1. docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377
复制代码
要向此集群添加一个工作节点,直接运行以上这个命令即可。
4)开放manager节点的2377端口
  1. # 查看防火墙状态
  2. systemctl status firewalld
  3. # 如果开启了防火墙则永久放行2377端口
  4. firewall-cmd --add-port=2377/tcp --permanent
  5. # 重新加载防火墙
  6. firewall-cmd --reload
  7. # 查看永久开放的端口
  8. firewall-cmd --permanent --list-ports
复制代码

5)创建worker节点

在创建 manager 节点时我们知道,要向此集群添加一个工作节点,直接运行以下这个命令(创建manager节点的时候复制出来的)即可:
  1. docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377
复制代码
此处,我另外再开启了两台 Linux 服务器,将它们加入到 swarm 中成为 worker 节点:


可以看到已经成功了。
6)查看节点状态

需要注意的是查看节点状态只能在 manager 节点那台机器上查看,普通节点无法执行查看命令:
  1. docker node ls
复制代码

可以看到有三台机器了。
这时候使用 docker info 命令查看,就可以看到 Swarm 处于激活状态:
  1. docker info
复制代码

2、部署服务到集群中

注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
上面我们已经将节点创建好了,现在可以在这些节点上创建服务了,那么就需要看看 docker service 的帮助信息:
  1. docker service --help
复制代码
  1. [root@localhost ~]# docker service --help
  2. Usage:  docker service COMMAND
  3. Manage Swarm services
  4. Commands:
  5.   create      Create a new service
  6.   inspect     Display detailed information on one or more services
  7.   logs        Fetch the logs of a service or task
  8.   ls          List services
  9.   ps          List the tasks of one or more services
  10.   rm          Remove one or more services
  11.   rollback    Revert changes to a service's configuration
  12.   scale       Scale one or multiple replicated services
  13.   update      Update a service
  14. Run 'docker service COMMAND --help' for more information on a command.
  15. [root@localhost ~]#
复制代码
可以看到有 create 这个命令,可以这样理解,docker service create 相当于docker run 就是创建容器,只不过在 swarm 中是不同的表现方式。
1)在manager节点上部署服务
  1. docker service create --name nginx-service nginx
复制代码

可以查看是否创建成功:
  1. docker service ls
复制代码

可以具体查看这个 service 的内容(例如:查看服务运行在哪个节点上):
  1. docker service ps nginx-service
复制代码

查看服务 nginx-service 部署的具体信息:
  1. docker service inspect --pretty nginx-service
复制代码

2)扩展集群服务(水平扩展)

我们将上述的 nginx-service 服务扩展到多个节点。
  1. docker service scale nginx-service=5
复制代码

已经有5个 nginx-service 服务的容器正在运行了。可以先看看serverice:
  1. docker service ls
复制代码

再看看具体的容器数量:
  1. docker service ps nginx-service
复制代码

可以看到5个容器在不同的节点上,其中有2个在manager节点,有3个在worker节点上。
当然,每一个节点都可以自己查看自己目前运行的容器,比如worker节点查看自己运行的容器:
  1. docker ps
复制代码

3)自动修复

scale在swarm中除了水平扩展外,还有一个作用,那就是修复作用,比如将某一个节点中的容器删除掉,那么很快swarm中发觉并进行修复,最终数量还是会和原来的保持一致。
假如现在删除worker中的一个容器:
  1. docker rm -f 容器Id
复制代码

我们在manager节点中查看容器情况:

可以看到红色就是我们删掉的容器,但是后面它又马上补充了一个,保持了整个系统的稳定性。
4)删除服务
  1. # 语法
  2. docker service rm 服务名称
  3. # 示例
  4. docker service rm nginx-service
  5. # 查看是否已删除
  6. docker service ps nginx-service
复制代码
5)停止某个节点接收新的任务

查看所有的节点:
  1. docker node ls
复制代码

可以看到目前所有的节点都是Active,可以接收新的任务分配。
停止节点worker-node1:
  1. docker node update --availability drain worker-node1
复制代码

注意:worker-node1状态变为Drain。不会影响到集群的服务,只是 worker-node1 节点不再接收新的任务,集群的负载能力有所下降。
重新激活节点worker-node1:
  1. docker node update --availability active worker-node1
复制代码

 
本文部分内容参考博文:https://www.runoob.com/docker/docker-swarm.html
至此本文就全部介绍完了,如果觉得对您有所启发请记得点个赞哦!!!
 
此文由博主精心撰写转载请保留此原文链接:https://www.cnblogs.com/xyh9039/p/18578834
版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!

来源:https://www.cnblogs.com/xyh9039/p/18578834
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具