基于swarm的docker集群服务

对swarm的认识:

Docker 是一种新型的虚拟化技术,它的目标在于实现轻量级操作系统的虚拟化。相比传统的虚拟化方案,Docker 虚拟化技术有一些很明显的优势:启动容器的速度明显快于传统虚拟化技术,同时创建一台虚拟机占用的资源也要远远小于传统的虚拟技术。Swarm 是 Docker 集群化的技术,而 Swarm 集群化 Docker 离不开服务发现。Consul 能够解决 Swarm 的服务发现问题。本文将介绍 Swarm 如何使用 Consul 作为服务发现。

实验环境:
172.25.23.1 manager
172.25.23.2 node
172.25.23.3 node

这里我用的是主机的docker仓库,大家可以从网上下载镜像,也可以创建镜像仓库,具体操作在镜像仓库博客中查看

真机:
建立好镜像仓库
[root@foundation23 westos.org]# docker push westos.org/nginx
The push refers to a repository [westos.org/nginx]
08d25fa0442e: Pushed 
a8c4aeeaa045: Pushed 
cdb3f9544e4c: Pushed 
latest: digest: sha256:2de9d5fc6585b3f330ff5f2c323d2a4006a49a476729bbc0910b695771526e3f size: 948

[root@foundation23 westos.org]# scp ca.crt [email protected]:/etc/docker/certs.d/westos.org/
[email protected]'s password: 
ca.crt                                                              100% 2094     2.0KB/s   00:00    
[root@foundation23 westos.org]# scp ca.crt [email protected]:/etc/docker/certs.d/westos.org/
[email protected]'s password: 
ca.crt                                                              100% 2094     2.0KB/s   00:00    
[root@foundation23 westos.org]# scp ca.crt [email protected]:/etc/docker/certs.d/westos.org/
[email protected]'s password: 
ca.crt                                                              100% 2094     2.0KB/s   00:00    
[root@foundation23 westos.org]# vim /etc/hosts
[root@foundation23 westos.org]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
7aecc6af4716        registry:2          "/entrypoint.sh /e..."   29 minutes ago      Up 29 minutes       0.0.0.0:443->443/tcp, 5000/tcp   registry
90b268360c70        haproxy             "/docker-entrypoin..."   3 hours ago         Dead                                                 compose_haproxy_1
ecbbfe401523        rhel7:v1            "/usr/sbin/httpd -..."   3 hours ago         Dead                                                 compose_apache_1
e56353584938        nginx               "nginx -g 'daemon ..."   3 hours ago         Dead                                                 compose_nginx_1

这里写图片描述

虚拟机:
server1 :manager

[root@server1 ~]# docker swarm init
Swarm initialized: current node (u99yzhyydlqpioxdvqewz4vm5) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-2l60mdx0sf0ioieddhspz4zn34mmctm4ymnj0lna4h8ew1wvuv-et8aeeji8l5z2ceqcauckuo2m \
    172.25.23.1:2377

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

这里写图片描述
server 2.3

[root@server2 ~]#  docker swarm join \
>     --token SWMTKN-1-2l60mdx0sf0ioieddhspz4zn34mmctm4ymnj0lna4h8ew1wvuv-et8aeeji8l5z2ceqcauckuo2m \
>     172.25.23.1:2377
This node joined a swarm as a worker.

[root@server2 ~]# vim /etc/hosts
172.25.23.250 westos.org
[root@server2 ~]# docker pull westos.org/nginx
Using default tag: latest
latest: Pulling from nginx
2da35ff30a7d: Pull complete 
831fb1a65ced: Pull complete 
7a63da4e8a19: Pull complete 
Digest: sha256:2de9d5fc6585b3f330ff5f2c323d2a4006a49a476729bbc0910b695771526e3f
Status: Downloaded newer image for westos.org/nginx:latest
[root@server2 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
westos.org/nginx    latest              c82521676580        4 weeks ago         109 MB

这里写图片描述

server1
创建集群服务

[root@server1 ~]# docker node ls
ID                           HOSTNAME             STATUS  AVAILABILITY  MANAGER STATUS
qlsn2s7okys1ru4as9qvece4n    server2              Ready   Active        
sj2p39xj36o76pzm2x1fvp48p    server3              Ready   Active        
u99yzhyydlqpioxdvqewz4vm5 *  server1.example.com  Ready   Active        Leader

[root@server1 ~]# docker service create --name nginx --publish 80:80 --replicas 3 westos.org/nginx
t2yd0qgtbw5dhyiql9nwqy8xr
[root@server1 ~]# docker service ps nginx
ID            NAME     IMAGE                    NODE                 DESIRED STATE  CURRENT STATE                   ERROR  PORTS
e6jizz9mo6sg  nginx.1  westos.org/nginx:latest  server3              Running        Running 1 second ago                   
0d2cxrq1uc44  nginx.2  westos.org/nginx:latest  server1.example.com  Running        Running 1 second ago                   
6t8k5pf6dp53  nginx.3  westos.org/nginx:latest  server2              Running        Running less than a second ago         

这里写图片描述
将nginx服务的轮询换为6,每虚拟机承担两个

[root@server1 ~]# docker service scale nginx=6
nginx scaled to 6
[root@server1 ~]# docker service ps nginx
ID            NAME     IMAGE                    NODE                 DESIRED STATE  CURRENT STATE                    ERROR  PORTS
e6jizz9mo6sg  nginx.1  westos.org/nginx:latest  server3              Running        Running 2 minutes ago                   
0d2cxrq1uc44  nginx.2  westos.org/nginx:latest  server1.example.com  Running        Running 2 minutes ago                   
6t8k5pf6dp53  nginx.3  westos.org/nginx:latest  server2              Running        Running 2 minutes ago                   
ltmi3kiie2sy  nginx.4  westos.org/nginx:latest  server2              Running        Starting less than a second ago         
1y4wo80ype8i  nginx.5  westos.org/nginx:latest  server3              Running        Starting less than a second ago         
ukm5yr9n8p03  nginx.6  westos.org/nginx:latest  server1.example.com  Running        Starting less than a second ago         
[root@server1 ~]# 

这里写图片描述
导入 visualizer,进行监控

[root@server1 ~]# docker load -i visualizer.tar 
5bef08742407: Loading layer [==================================================>] 4.221 MB/4.221 MB
5f70bf18a086: Loading layer [==================================================>] 1.024 kB/1.024 kB
0a19bde117a5: Loading layer [==================================================>] 60.01 MB/60.01 MB
f7e883283ebc: Loading layer [==================================================>] 3.942 MB/3.942 MB
dfd8ee95c7e7: Loading layer [==================================================>] 1.536 kB/1.536 kB

这里写图片描述
设置监控vmi

[root@server1 ~]# docker tag dockersamples/visualizer westos.org/visualizer
[root@server1 ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
westos.org/nginx           latest              c82521676580        4 weeks ago         109 MB
dockersamples/visualizer   latest              17e55a9b2354        11 months ago       148 MB
westos.org/visualizer      latest              17e55a9b2354        11 months ago       148 MB
[root@server1 ~]# docker service create \
> --name=viz \
> --publish=8080:8080/tcp \
> --constraint=node.role==manager \
> --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
> westos.org/visualizer
unable to pin image westos.org/visualizer to digest: manifest unknown: manifest unknown
kk1exyrnbkl60c3zyywhv8x18
[root@server1 ~]# docker service ls
ID            NAME   MODE        REPLICAS  IMAGE
42zs26ji0f89  nginx  replicated  6/6       westos.org/nginx:latest
kk1exyrnbkl6  viz    replicated  1/1       westos.org/visualizer

这里写图片描述
这里写图片描述
这里写图片描述

[root@server1 ~]# docker service scale nginx=3
nginx scaled to 3
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE                                                                                      COMMAND                  CREATED             STATUS                   PORTS               NAMES
92726f6db76c        westos.org/nginx@sha256:2de9d5fc6585b3f330ff5f2c323d2a4006a49a476729bbc0910b695771526e3f   "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes             80/tcp              nginx.6.w1f1mv3pw3h41zjepc0sk1mw7
2d095a1b922e        westos.org/visualizer:latest                                                               "npm start"              8 minutes ago       Up 8 minutes (healthy)   8080/tcp            viz.1.jmobxiah25kxq0i8r1p2pke4g
[root@server1 ~]echo server1 > index.html
[root@server1 ~]# docker container  cp index.html nginx.6.w1f1mv3pw3h41zjepc0sk1mw7:/usr/share/nginx/html

这里写图片描述
server2上设置默认发布目录

[root@server2 ~]# echo server2 > index.html
[root@server2 ~]# docker container cp index.html  nginx.3.v5cpmkbl4r4ws0e0yyg3390s8:/usr/share/nginx/html

server3上设置默认发布目录

[root@server3 ~]# echo server3 > index.html
docker container cp index.html nginx.5.1y4wo80ype8ic9y72iwygipay:/usr/share/nginx/html

测试:

[root@foundation23 docker]# for i in {1..10}; do curl 172.25.23.1; done
server2
server1
server3
server2
server1
server3
server2
server1
server3
server2

这里写图片描述
浏览器上进行监控

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ningyuxuan123/article/details/81949036