Swarm 集群办理

简介

Docker Swarm 是 Docker 的集群办理东西。它将 Docker 主机池改变为单个假造 Docker 主机。 Docker Swarm 供给了规范的 Docker API,一切任何已与 Docker 保护法式通讯的东西都能够利用 Swarm 轻松地扩大到多个主机。

撑持的东西包含但不限于以下各项:

  • Dokku
  • Docker Compose
  • Docker Machine
  • Jenkins

道理

以下图所示,swarm 集群由办理节点(manager)和使命节点(work node)组成。

  • swarm mananger:担任全部集群的办理使命包含集群设置装备摆设、办事办理等一切跟集群有关的使命。
  • work node:即图中的 available node,首要担任运转响应的办事来履行使命(task)。


利用

以下示例,均以 Docker Machine 和 virtualbox 遏制先容,确保你的主机已装置 virtualbox。

1、建立 swarm 集群办理节点(manager)

建立 docker 机械:

$ docker-machine create -d virtualbox swarm-manager

初始化 swarm 集群,遏制初始化的这台机械,便是集群的办理节点。

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为建立机械时候配的 ip。

以上输入,证实已初始化胜利。须要把以下这行复制出来,在增添使命节点时会用到:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、建立 swarm 集群使命节点(worker)

这里间接建立好俩台机械,swarm-worker1 和 swarm-worker2 。

别离进入两个机械里,指定增加至上一步中建立的集群,这里会用到上一步复制的内容。

以上数据输入申明已增加胜利。

上图中,因为上一步复制的内容比拟长,会被主动截断,现实上在图运转的号令以下:

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

3、检查集群信息

进入办理节点,履行:docker info 能够检查以后集群的信息。

$ docker info

经由过程画红圈的处所,能够晓得以后运转的集群中,有三个节点,此中有一个是办理节点。

4、安排办事到集群中

注重:跟集群办理有关的任何操纵,都是在办理节点上操纵的。

以下例子,在一个使命节点上建立一个名为 helloworld 的办事,这里是随机指派给一个使命节点:

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

5、检查办事安排环境

检查 helloworld 办事运转在哪一个节点上,能够看到今朝是在 swarm-worker1 节点:

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

检查 helloworld 安排的详细信息:

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

6、扩大集群办事

咱们将上述的 helloworld 办事扩大到俩个节点。

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

能够看到已从一个节点,扩大到两个节点。

7、删除办事

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

检查是不是已删除:

8、转动进级办事

以下实例,咱们将先容 redis 版本若何转动进级至更高版本。

建立一个 3.0.6 版本的 redis。

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

转动进级 redis 。

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

看图能够晓得 redis 的版本已从 3.0.6 进级到了 3.0.7,申明办事已进级胜利。

9、遏制某个节点领受新的使命

检查一切的节点:

docker@swarm-manager:~$ docker node ls

能够看到今朝一切的节点都是 Active, 能够领受新的使命分派。

遏制节点 swarm-worker1:

注重:swarm-worker1 状况变为 Drain。不会影响到集群的办事,只是 swarm-worker1 节点不再领受新的使命,集群的负载才能有所降落。

能够经由过程以下号令从头激活节点:

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