1. 程式人生 > >docker swarm 叢集的簡單實現

docker swarm 叢集的簡單實現

1、系統環境:三臺CENTOS7的機器

192.168.156.75 管理節點

192.168.156.72 工作節點

192.168.156.77 工作節點

2、分別在三臺機器安裝docker

yum install docker-io -y

docker pull swarm

修改/lib/systemd/system/docker.service

在中間修改一行

[[email protected] tmp]# cat /lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

 

修改/etc/sysconfig/docker-storage

[[email protected] tmp]# cat /etc/sysconfig/docker-storage | grep -v ^#


DOCKER_STORAGE_OPTIONS="--storage-driver overlay"

 

3、在管理節點上初始化叢集

Status: Downloaded newer image for docker.io/swarm:latest
[[email protected] ~]# docker swarm init --advertise-addr 192.168.156.75
Swarm initialized: current node (842qfz9f65cue2cxavyj57p65) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-212t8ykaqawrwjb6v4yk7xwas0tyuvuuitxza0r2z9klzcwx9z-7e36rbznzdraxo3n4vtz0hc88 \
    192.168.156.75:2377

#上面這一行用於節點加入群集,token是全球唯一的

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

此時群集已經啟用,並且只有自身一個節點

[[email protected] ~]# docker info|grep -i swarm
  WARNING: You're not using the default seccomp profile
Swarm: active
[[email protected] ~]#  netstat -tnlp|grep docker
tcp6       0      0 :::2377                 :::*                    LISTEN      8329/dockerd-curren 
tcp6       0      0 :::7946                 :::*                    LISTEN      8329/dockerd-curren 
[[email protected] ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
69f2aa51355f        bridge              bridge              local
96f7efaa2b9b        docker_gwbridge     bridge              local
1ec550fc11c2        host                host                local
p4wufy9vhwsm        ingress             overlay             swarm
212782e1b92b        none                null                local
[[email protected] ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
842qfz9f65cue2cxavyj57p65 *  v75       Ready   Active        Leader
[[email protected] ~]# ls /var/lib/docker/swarm
certificates  docker-state.json  raft  state.json  worker

 

4、找到剛才群集初始化的輸出,在兩臺節點機器上執行,加入群集

[[email protected] shell]# docker swarm join --token SWMTKN-1-212t8ykaqawrwjb6v4yk7xwas0tyuvuuitxza0r2z9klzcwx9z-7e36rbznzdraxo3n4vtz0hc88 192.168.156.75:2377
This node joined a swarm as a worker.

此時在群集上面能看到三個節點了

[[email protected] ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
842qfz9f65cue2cxavyj57p65 *  v75       Ready   Active        Leader
ojdjeddpgcgfwvndwfwxh4amw    vm        Ready   Active        
vje0xnfw59zxb0qyjl37s1qcm    v72       Ready   Active        

 

5、建立服務

[[email protected] ~]# docker service create --name webs --mode global nginx        
xupykl4zucj1018cyazqgq7e3

服務名:webs  模式:global在三個節點上面跑  映象:nginx

將會自動下載映象啟動容器

[[email protected] ~]# docker service ps webs
ID            NAME                                IMAGE         NODE  DESIRED STATE  CURRENT STATE            ERROR                             PORTS
sa3pt1g93y1x  webs.vje0xnfw59zxb0qyjl37s1qcm      nginx:latest  v72   Running        Running 25 minutes ago                                     
rsn23lc0rwwr  webs.842qfz9f65cue2cxavyj57p65      nginx:latest  v75   Running        Running 25 minutes ago                                     
8soldedzagn2  webs.ojdjeddpgcgfwvndwfwxh4amw      nginx:latest  vm    Running        Running 25 minutes ago        

 

6、新增到容器到主機的埠對映

[[email protected] ~]# docker service update --publish-add 8001:80 webs    
webs

此時通過節點所有主機的IP地址加對映的8001埠,都能訪問到容器的80埠 ,只要容器有例項在任意一臺機器上面跑即可