linux docker--Swarm创建集群

**

Swarm架构

**
Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以单独将Swarm部署于一个节点。另外,自然需要一个Docker集群,集群上每一个节点均安装有Docker。
Swarm架构中最主要的处理部分自然是Swarm节点,Swarm管理的对象自然是Docker Cluster,Docker Cluster由多个Docker Node组成,而负责给Swarm发送请求的是Docker Client。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。

**

环境搭建

**
三台主机
server0 172.25.254.56
server1 172.25.254.50
server2 172.25.254.1

安装docker

vim  /etc/yum.repos.d/docker.repo 

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/experimental/centos/7/
enabled=1
gpgcheck=0
gpgkey=https://yum.dockerproject.org/gpg
~                                                
yum -y install docker-engine

[root@foundation156 ~]# systemctl start docker
[root@foundation156 ~]# docker  images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@foundation156 ~]# docker  --version
Docker version 1.12.6, build 78d1802, experimental


三台主机安装即可  
ps (根据前一部分的博客选择rpm包安装也可以)

swarm集群搭建

node0作为初始节点供其他节点加入
Connection to server1 closed.
[root@foundation156 Desktop]# docker swarm init  --advertise-addr 172.25.254.56
Swarm initialized: current node (59rkk6ozh5h1ddptl88f52h0v) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-589zuow0efnzllasdj1nei7w34p02z6mkm443o3i5avuvn01tj-3ywyld3erpdnf7n4jhbgbzocs \
    172.25.254.56:2377

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


执行命令后提示其他节点使用系统提示命令加入节点即可

节点加入

[root@server2 docker]# docker swarm join     --token SWMTKN-1-589zuow0efnzllasdj1nei7w34p02z6mkm443o3i5avuvn01tj-3ywyld3erpdnf7n4jhbgbzocs     172.25.254.56:2377
This node joined a swarm as a worker.


在node查看端口使用情况

看到使用了2377端口  所以在需要打开防火墙时  需要打开对应的端口

[root@foundation156 Desktop]# netstat -anple  |grep  docker
tcp        0      0 172.25.254.56:56024     172.25.254.56:2377      ESTABLISHED 0          73800      3548/dockerd        
tcp        0      0 127.0.0.1:43323         127.0.0.1:2377          ESTABLISHED 0          72244      3548/dockerd        
tcp6       0      0 :::2377                 :::*                    LISTEN      0          70307      3548/dockerd        
tcp6       0      0 :::7946                 :::*                    LISTEN      0          70312      3548/dockerd        
tcp6       0      0 127.0.0.1:2377          127.0.0.1:43323         ESTABLISHED 0          70309      3548/dockerd        
tcp6       0      0 172.25.254.56:2377      172.25.254.56:56024     ESTABLISHED 0          72273      3548/dockerd        
tcp6       0      0 172.25.254.56:2377      172.25.254.50:45988     ESTABLISHED 0          73673      3548/dockerd        
tcp6       0      0 172.25.254.56:2377      172.25.254.1:51654      ESTABLISHED 0          73669      3548/dockerd        
udp6       0      0 :::7946                 :::*                                0          70313      3548/dockerd        


在node0查看是否成为sarm集群
docker  info

........
Swarm: active
 NodeID: 59rkk6ozh5h1ddptl88f52h0v
 Is Manager: true
 ClusterID: 8bq7ol10vkzyra3xhlfvuv0t3
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
........

列出所有节点

[root@foundation156 Desktop]# docker node ls
ID                           HOSTNAME                       STATUS  AVAILABILITY  MANAGER STATUS
59rkk6ozh5h1ddptl88f52h0v *  foundation156.ilt.example.com  Ready   Active        Leader
6246ae4zn9asricvh2d3uc1qp    server1                        Ready   Active        
daugy9sjlh5zet6vnkh0fo1h3    server2                        Ready   Active        



在忘记添加节点命令时 通过以下命令查看

[root@foundation156 Desktop]# docker  swarm   join-token manager 
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-589zuow0efnzllasdj1nei7w34p02z6mkm443o3i5avuvn01tj-5taetju3kdmcvcunu3h7csm3l \
    172.25.254.56:2377

[root@foundation156 Desktop]# docker  swarm   join-token worker 
To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-589zuow0efnzllasdj1nei7w34p02z6mkm443o3i5avuvn01tj-3ywyld3erpdnf7n4jhbgbzocs \
    172.25.254.56:2377


目前只有一个主导的节点server0  为了集群高可用并且避免单点故障
提升server1为manager节点 使其也可以管理集群

[root@foundation156 Desktop]# docker node promote server1
Node server1 promoted to a manager in the swarm.
[root@foundation156 Desktop]# docker node ls
ID                           HOSTNAME                       STATUS  AVAILABILITY  MANAGER STATUS
59rkk6ozh5h1ddptl88f52h0v *  foundation156.ilt.example.com  Ready   Active        Leader
6246ae4zn9asricvh2d3uc1qp    server1                        Ready   Active        Reachable
daugy9sjlh5zet6vnkh0fo1h3    server2                        Ready   Active        

常用命令

docker swarm:集群管理,子命令主要有下面几个。

docker swarm init命令用于初始化一个集群

docker swarm join命令用于加入一个现有集群

docker swarm leave命令由于离开集群


有些时候需要维护一个节点,此时此节点可能会网络断开或者需要关机,造成节点上服务不可用。使用 docker node update –availability drain 将节点下线,swarm 会将当前节点上的容器关闭并在其他节点上启动。当维护完成,需要上线是,将节点状态修改为 active状态即可,命令如下:docker node update –availability active


运行服务测试集群性能

在物理机pull nginx镜像  本纪可以使用 但是虚拟机上网下载太满 所以将物理机镜像保存为tar文件scp让虚拟机使用即可

[root@foundation156 Desktop]# docker save   -o nginx.tar  nginx
[root@foundation156 Desktop]# ll  nginx.tar
-rw------- 1 root root 112703488 Aug 20 20:18 nginx.tar

[root@foundation156 Desktop]# scp   nginx.tar  root@server1:/mnt/
nginx.tar                                     100%  107MB 107.5MB/s   00:01    
[root@foundation156 Desktop]# scp   nginx.tar  root@server2:/mnt/
nginx.tar                                     100%  107MB 107.5MB/s   00:01    
[root@foundation156 Desktop]# docker  service rm  nginx
nginx

虚拟机导入镜像即可
[root@server2 docker]# vim  /etc/sysconfig/network-scripts/ifcfg-ens3 
[root@server2 docker]# cd /mnt/
[root@server2 mnt]# docker  load  -i nginx.tar 
cdb3f9544e4c: Loading layer 58.44 MB/58.44 MB
a8c4aeeaa045: Loading layer 54.24 MB/54.24 MB
08d25fa0442e: Loading layer 3.584 kB/3.584 kB
Loaded image: nginx:latest
[root@server2 mnt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB



[root@foundation156 Desktop]# docker  pull  nginx
Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete 
32d9726baeef: Pull complete 
87e5e6f71297: Pull complete 
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
[root@foundation156 Desktop]# docker images nginx 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB
[root@foundation156 Desktop]# docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
244icxsoy3n8g5gh4otdio0pp
[root@foundation156 Desktop]# docker service   ls
ID            NAME   REPLICAS  IMAGE         COMMAND
244icxsoy3n8  nginx  1/3       nginx:latest  


查看物理机nginx服务详细信息

[root@foundation156 Desktop]# docker  service  ps nginx
ID                         NAME     IMAGE         NODE     DESIRED STATE  CURRENT STATE            ERROR
cqawk4av2vj2579lsc7n8udse  nginx.1  nginx:latest  server0  Running        Running 3 seconds ago    
1rvhljwyvajyklqkbjgn7fbt8  nginx.2  nginx:latest  server2  Running        Preparing 8 seconds ago  
bhkx7if20gcwd8wrgkq7aqcqr  nginx.3  nginx:latest  server1  Running        Running 6 seconds ago    


查看节点的进程

[root@server1 mnt]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
7aade034cd8b        nginx:latest        "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes        80/tcp              nginx.2.bn25l3rukkufe34ry7kkzu06h

浏览器测试即可

这里写图片描述

使用 visualzer进行测试

安装镜像

[root@server1 ~]# docker run -it -d -p 8080:8080   -v /var/run/docker.sock:/var/run/docker.sock  dockersamples/visualizer
e6bc05f62386ea0c5730dbb6c5393224e81f61e831a2931c14cbff04d1c79011

浏览器测试即可

这里写图片描述

关闭server后
服务漂移至server3

[root@server3 ~]# docker  ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6e599b133fd8        nginx:latest        "nginx -g 'daemon ..."   5 minutes ago       Up 4 minutes        80/tcp              nginx.1.8yy6rf4g565xqeb6q50y8hroa
e7ef3ec12304        nginx:latest        "nginx -g 'daemon ..."   33 minutes ago      Up 33 minutes       80/tcp              nginx.2.qq3si9jorvrml2dq5ftkvshny

这里写图片描述

再测试负载均衡
成功

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

批量化生成nginx

[root@server1 ~]# docker service scale  nginx=30

这里写图片描述

批量更新 这一步再生产中作用较大
测试再nginx主机上更新2048镜像

[root@server1 ~]# docker  service  update  --image  westos.org/game2048 --update-parallelism 3  --update-delay 10s  nginx
nginx

等待更新即可
这里写图片描述

看到30台已经更新完成
[root@server1 ~]# docker service ls
ID            NAME   MODE        REPLICAS  IMAGE
1mj2yiaoo9ok  viz    replicated  1/1       dockersamples/visualizer:latest
p16i2s6m74zg  nginx  replicated  30/30     westos.org/game2048:latest
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章