docker swarm 搭建及跨主機網絡互連案例分析


准備工作

安裝docker,不建議直接使用Docker官方的yum install docker

wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm

yum localinstall -docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm docker-engine-1.12.6-1.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm

http://download.csdn.net/detail/yiyu1/9875469

 

一、開放相關端口

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --reload

二、修改配置 版本不同,可以忽略

vi /etc/docker/daemon.json
"live-restore": false

有關集群的docker命令如下:

  1. docker swarm:集群管理,子命令有init, join,join-token, leave, update
  2. docker node:節點管理,子命令有demote, inspect,ls, promote, rm, ps, update
  3. docker service:服務管理,子命令有create, inspect, ps, ls ,rm , scale, update
  4. docker stack/deploy:試驗特性,用於多應用部署

創建swarm 集群

查看docker swarm 命令說明

# docker swarm -h
Flag shorthand -h has been deprecated, please use --help
Usage:    docker swarm COMMAND
Manage Docker Swarm
Options:
      --help   Print usage
Commands:
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  update      Update the swarm
  leave       Leave a swarm
Run 'docker swarm COMMAND --help' for more information on a command.

創建集群

#命令格式: docker swarm init --listen-addr <MANAGER-IP>:<PORT>
[root@centos-web ~]# docker swarm init --listen-addr 172.18.30.29:2377 
Swarm initialized: current node (a60d5c3ttymvtozr46uvk17q4)
is now a manager.
docker swarm init --advertise-addr 122.62.24.161 --listen-addr 122.62.24.161:2377

查看集群

# docker node ls
ID                           HOSTNAME      MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 *  centos-web  Accepted    Ready   Active        Leader

獲取加入集群命令token

#docker swarm join-token manager
docker swarm join \
    --token ********* \
    172.18.30.29:2377

子節點加入集群

docker swarm join \
    --token ********* \
    172.18.30.29:2377

刪除集群子節點

docker node demote ***
docker swarm leave --force(節點上) docker node rm --force(manager上)

創建一個overlay 跨主機網絡

查看當前網絡

[root@H-T-29 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
47d05fd82e77        bridge              bridge              local                             
76e0302f7929        docker_gwbridge     bridge              local               
81c22e7f1b48        host                host                local               
4enpk54t9oy2        ingress             overlay             swarm               
c80502ba134b        none                null                local 

創建一個新的overlay網絡

#swarm上默認已有一個名為ingress的overlay 網絡

 [root@centos-node4 ~]# docker network create --driver overlay docker-net
2o223p435s5glx69dw211u5d2
 [root@centos-web ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
abec77415f48        bridge              bridge              local
aoqs3p835s5g        docker-net          overlay             swarm
e2fff9d572a6        docker_gwbridge     bridge              local
166bd71f7d0e        host                host                local
9gr6bfff1rv9        ingress             overlay             swarm
1d2bfc590294        none                null                local

docker-net就是新創建的網絡

在新的跨主機overlay 網絡(docker-net)上創建應用

部署應用

docker service create --constraint=node.HOSTNAME==H-C-42 --replicas 2 --publish 2222:22 --name lvs --network=docker-net inits/lvs

指定一個節點部署應用

# docker node ls
ID                           HOSTNAME      MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 *  centos-web  Accepted    Ready   Active        Leader
#docker service create --constraint=node.HOSTNAME==centos-web --replicas 1 --publish 28152:22 --publish 8152:8080 --name web --network=docker-net  inits/source2.0.3
ce2qc5paxmfa2gxrtu320v5m6

–replicas 副本數量
–publish 服務發現,端口映射
–mount 掛載文件

--mount type=bind,src=/home,dst=/home,readonly
–name service名稱

#前提節點服務器上images上有inits/lvs鏡像

部署結果

docker service ls
ID            NAME        REPLICAS  IMAGE   COMMAND
5lgdq3ihiez0  lvs         0/2       inits/lvs
[root@centos-node4 ~]# docker service tasks helloworld
ID                         NAME          SERVICE     IMAGE   LAST STATE          DESIRED STATE  NODE
eul3bus45qz3b555wekotdmo5  lvs.1  helloworld  alpine  Running 14 seconds  Running        centos-node5
55uhq6xxcv53xlkqv2f0be9b9  lvs.2  helloworld  alpine  Running 14 seconds  Running        centos-node4

分別在運行兩個節點上查看容器運行情況

#ssh 172.18.30.29
[root@H-T-29 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 389f9eefe455 inits/lvs:latest "/usr/sbin/sshd -D" 15 minutes ago Up 15 minutes 22/tcp lvs.1.aco0uuf1of90tl31skh6a6ndv
#ssh 172.18.30.12 [root@H
-C-12 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES af573b0ae945 inits/lvs:latest "/usr/sbin/sshd -D" 15 minutes ago Up 15 minutes 22/tcp lvs.2.0a1s4la7prc3qmfdfdqazitsn

其他

docker service ls 查看集群列表
docker service ps lvs 查看集群下所有節點狀態
docker service rm lvs 刪除集群
docker service inspect --pretty lvs 集群屬性
docker service scale lvs=4 #擴容集群節點數量

測試兩個主機的網絡是否能互通

# docker exec -ti lvs.2.0a1s4la7prc3qmfdfdqazitsn sh
/ # ping lvs.1.aco0uuf1of90tl31skh6a6ndv
PING lvs.1.aco0uuf1of90tl31skh6a6ndv (10.0.9.3): 56 data bytes
64 bytes from 10.0.9.3: seq=0 ttl=64 time=0.514 ms
64 bytes from 10.0.9.3: seq=1 ttl=64 time=0.508 ms
64 bytes from 10.0.9.3: seq=2 ttl=64 time=0.381 ms
64 bytes from 10.0.9.3: seq=3 ttl=64 time=0.408 ms
^C
--- lvs.1.aco0uuf1of90tl31skh6a6ndv ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.381/0.452/0.514 ms

同理去另一台主機測試網絡是否正常

或已暴露22端口,直接

ssh 172.18.30.29 -p 2222 
ifconfig
172.18.30.29內部ip
ping 172.18.30.12內部ip
ssh 172.18.30.12 -p 2222 
ifconfig
172.18.30.12內部ip
ping 172.18.30.29內部ip

dokcer swarm自帶的負載均衡

創建一組服務

docker service create --replicas 2 --name nginx -p 80:80 --network=docker-net inits/nginx

測試服務

瀏覽器訪問:
http://172.18.30.29
刷新瀏覽器 系統將輪詢訪問集群節點下服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM