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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章