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埠 ,只要容器有例項在任意一臺機器上面跑即可