Docker学习笔记(六)Swarms

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012299594/article/details/83051345

       Swarm就是一组docker宿主机组成的cluster,它有个管理节点叫作swarm manager,这个swarm里的docker命令都在这个swarm manager上执行,其他的节点都叫作worker。一个docker宿主机通过运行docker swarm init命令将自己设定为swarm manager,而其他的宿主机通过运行docker swarm join命令并指定swarm manager的IP和端口(默认端口2377)来加入swarm(join)。

       在笔记四中部署hello-service时,其实已经用到了swarm,下面还是通过demo来更直观的了解swarm吧。


Note

本文demo参考docker官方文档,有条件的朋友建议直接看原文Link:https://docs.docker.com/get-started/part4/#create-a-cluster

Demo

Swarm manager

       我先用一台IP是10.200.218.124的宿主机来做swarm manager。执行docker swarm init,会提示我们怎么将其他的宿主机join到这个swarm中。

root@hunk-virtual-machine:/home/hunk/docker# docker swarm init
Swarm initialized: current node (pxjmqahdfyqp2m2znlaj4kwc2) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-51yl2q26jn2za02mcb5id3f3etkx38s6js19xnfzg1ldnnq6ft-9bgk59pk5f95m53y7w65gl1mi \
    10.200.218.124:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

note:swarm manager节点和worker节点都要先login。

Swarm node

       我用另一台IP是10.200.218.125的宿主机来join到上面的swarm中。

root@hunk-virtual-machine:/home/hunk# docker swarm join \
>     --token SWMTKN-1-51yl2q26jn2za02mcb5id3f3etkx38s6js19xnfzg1ldnnq6ft-9bgk59pk5f95m53y7w65gl1mi \
>     10.200.218.124:2377
This node joined a swarm as a worker.

View node

        在swarm manager上查看所有的node

root@hunk-virtual-machine:/home/hunk/docker# docker node ls
ID                           HOSTNAME              STATUS  AVAILABILITY  MANAGER STATUS
j6s1lwlgq8d6o7mxq5azg0gxh    hunk-virtual-machine  Ready   Active        
pxjmqahdfyqp2m2znlaj4kwc2 *  hunk-virtual-machine  Ready   Active        Leader

Deploy service

       在笔记四里面,我们用yml配置来部署了一个hello-service服务,其实当时已经用到了swarm,只是我们只有一个swarm manager,没有worker,service所有的container replicas都运行在swarm manager上。而当前我们多了一个worker,那service的container replicas其实会被均匀的分配到所有的worker上(包括swarm manager)。

      先用同样的方式部署hello-service。

root@hunk-virtual-machine:/home/hunk/docker# docker stack deploy -c hello-service.yml hello-service
Creating network hello-service_webnet
Creating service hello-service_web

      在swarm manager上查看container replicas的分布情况

root@hunk-virtual-machine:/home/hunk/docker# docker stack ps hello-service --no-resolve
ID            NAME                         IMAGE                   NODE                       DESIRED STATE  CURRENT STATE                   ERROR  PORTS
q0wv31fthg3c  y46ique6nw7taei64dfm44c6s.1  hebostary/gohead:demo1  pxjmqahdfyqp2m2znlaj4kwc2  Running        Running 53 seconds ago                 
u22hl65sgyd6  y46ique6nw7taei64dfm44c6s.2  hebostary/gohead:demo1  j6s1lwlgq8d6o7mxq5azg0gxh  Running        Running less than a second ago         
vjdgx00ga2k5  y46ique6nw7taei64dfm44c6s.3  hebostary/gohead:demo1  pxjmqahdfyqp2m2znlaj4kwc2  Running        Running 53 seconds ago                 
tdi3fbp2sn3f  y46ique6nw7taei64dfm44c6s.4  hebostary/gohead:demo1  j6s1lwlgq8d6o7mxq5azg0gxh  Running        Running less than a second ago         
n9vokwj46sbi  y46ique6nw7taei64dfm44c6s.5  hebostary/gohead:demo1  pxjmqahdfyqp2m2znlaj4kwc2  Running        Running 53 seconds ago
root@hunk-virtual-machine:/home/hunk/docker# docker container ls
CONTAINER ID        IMAGE                                                                                      COMMAND             CREATED             STATUS              PORTS               NAMES
8bedc58f8933        hebostary/gohead@sha256:969c4f12d7c1d9e3f167498e1779aceefc631a158ec4e18730d16f5602569d03   "python app.py"     5 minutes ago       Up 5 minutes        80/tcp              hello-service_web.3.vjdgx00ga2k5jo0757wmmw8fg
5bcaa11079d0        hebostary/gohead@sha256:969c4f12d7c1d9e3f167498e1779aceefc631a158ec4e18730d16f5602569d03   "python app.py"     5 minutes ago       Up 5 minutes        80/tcp              hello-service_web.5.n9vokwj46sbi68wozrmkkvx8v
6c52c7c28e71        hebostary/gohead@sha256:969c4f12d7c1d9e3f167498e1779aceefc631a158ec4e18730d16f5602569d03   "python app.py"     5 minutes ago       Up 5 minutes        80/tcp              hello-service_web.1.q0wv31fthg3cwqffrm2ocgkur

查看worker节点上的container

root@hunk-virtual-machine:/home/hunk# docker container ls
CONTAINER ID        IMAGE                                                                                      COMMAND             CREATED             STATUS              PORTS               NAMES
9fdc525604b7        hebostary/gohead@sha256:969c4f12d7c1d9e3f167498e1779aceefc631a158ec4e18730d16f5602569d03   "python app.py"     7 minutes ago       Up 7 minutes        80/tcp              hello-service_web.2.u22hl65sgyd6y9w3effadl37u
a21c29caead8        hebostary/gohead@sha256:969c4f12d7c1d9e3f167498e1779aceefc631a158ec4e18730d16f5602569d03   "python app.py"     7 minutes ago       Up 7 minutes        80/tcp              hello-service_web.4.tdi3fbp2sn3f528jdvg3a35x2

curl访问service

root@n209-h246:/home/hunk# curl http://10.200.218.124:4000
<h3>Hello World!</h3><b>Hostname:</b> 9fdc525604b7<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>root@n209-h246:/home/hunk# curl http://10.200.218.124:4000
<h3>Hello World!</h3><b>Hostname:</b> 5bcaa11079d0<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>root@n209-h246:/home/hunk# curl http://10.200.218.124:4000
<h3>Hello World!</h3><b>Hostname:</b> 8bedc58f8933<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>
root@n209-h246:/home/hunk# curl http://10.200.218.125:4000
<h3>Hello World!</h3><b>Hostname:</b> 6c52c7c28e71<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>root@n209-h246:/home/hunk# curl http://10.200.218.125:4000
<h3>Hello World!</h3><b>Hostname:</b> 8bedc58f8933<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>root@n209-h246:/home/hunk# curl http://10.200.218.125:4000
<h3>Hello World!</h3><b>Hostname:</b> 5bcaa11079d0<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

每次请求返回的hostname都不同,说明这些请求确实被分发到了不同的task中,有loadbalance的处理。另外,除了swarm manager,我们用worker节点的IP地址也可以访问这个web服务。这里和普通的服务可能有些区别了,每个node上都能接收处理外部请求,并且都有loadbalance的能力。这里我们直接引用官方demo的ingress network图,它说明swarm里所有的node都能对外提供api,并且都有loadbalance的能力。

routing mesh diagram

猜你喜欢

转载自blog.csdn.net/u012299594/article/details/83051345
今日推荐