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