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
点我分享笔记