欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Docker的swarm集群部署

程序员文章站 2024-03-01 13:51:34
...

一、环境:

vm1        manager
vm2/vm3    node1/node2

二、swarm集群搭建

创建swarm manager

[[email protected] docker]# systemctl start docker
[[email protected] docker]# docker load <swarm.tar 
[[email protected] docker]# docker swarm init --advertise-addr 172.25.79.11
Swarm initialized: current node (fpfznpjxzaanovzsvucxxfhnb) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-4duz28idog1wc1ylc7k6d8zoia4h9ut6n5vz15a7avwtynayy6-79vwi03wx9a5oh6etlrnimqdu \
    172.25.79.11:2377

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

[[email protected] docker]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
fpfznpjxzaanovzsvucxxfhnb *  vm1       Ready   Active        Leader
[[email protected] docker]# docker swarm join --token SWMTKN-1-4duz28idog1wc1ylc7k6d8zoia4h9ut6n5vz15a7avwtynayy6-79vwi03wx9a5oh6etlrnimqdu 172.25.79.11:2377
This node joined a swarm as a worker.
[[email protected] docker]# docker swarm join --token SWMTKN-1-4duz28idog1wc1ylc7k6d8zoia4h9ut6n5vz15a7avwtynayy6-79vwi03wx9a5oh6etlrnimqdu 172.25.79.11:2377
This node joined a swarm as a worker.

为集群添加节点

[[email protected] docker]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
3jon2hx1frkna8obyv5h1u54f    vm2       Ready   Active        
fpfznpjxzaanovzsvucxxfhnb *  vm1       Ready   Active        Leader
qzf7jgabj5u2l0medr89w03xq    vm3       Ready   Active    

给节点开启防火墙策略

[root@vm2 docker]# systemctl start firewalld
[root@vm2 docker]# firewall-cmd --add-port 2377/tcp --permanent
success         ##集群的管理端口      
[root@vm2 docker]# firewall-cmd --add-port 7946/tcp --permanent
success         ##节点之间的通讯端口
[root@vm2 docker]# firewall-cmd --add-port 4789/udp --permanent
success         ##网络overlay的udp端口
[root@vm2 docker]# firewall-cmd --reload
success



[root@vm3 docker]# systemctl start firewalld
[root@vm3 docker]# firewall-cmd --add-port 2377/tcp --permanent
success
[root@vm3 docker]# firewall-cmd --add-port 7946/tcp --permanent
success
[root@vm3 docker]# firewall-cmd --add-port 4789/udp --permanent
success

[root@vm3 docker]# firewall-cmd --reload
success
[root@vm3 docker]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 7946/tcp 2377/tcp 4789/udp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

三、集群的nginx web部署

##联网下载nginx镜像
[[email protected] mnt]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Image is up to date for nginx:latest

[[email protected] mnt]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Image is up to date for nginx:latest

创建nginx集群服务,服务命名为webserver

[root@vm1 mnt]# docker service create --name webserver nginx
[root@vm1 mnt]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS     
fpfznpjxzaanovzsvucxxfhnb *  vm1       Ready   Active        Leader     
[root@vm1 mnt]# docker service ps webserver
ID            NAME         IMAGE         NODE  DESIRED STATE  CURRENT STATE           ERROR  PORTS
kwqrnf6c17oh  webserver.1  nginx:latest  vm3   Running        Running 39 seconds ago     

docker的集群规模控制

[[email protected] mnt]# docker service scale webserver=3
webserver scaled to 3
[[email protected] mnt]# docker service ps webserver
ID            NAME         IMAGE         NODE  DESIRED STATE  CURRENT STATE                   ERROR  PORTS
kwqrnf6c17oh  webserver.1  nginx:latest  vm3   Running        Running about a minute ago             
dgcok6p3y6yg  webserver.2  nginx:latest  vm1   Running        Running less than a second ago         
p47udwopzdo2  webserver.3  nginx:latest  vm2   Running        Running less than a second ago  

当vm1宕机时,swarm服务可以做自动迁移。

[[email protected] mnt]# docker node update --availability drain vm1
vm1
[[email protected] mnt]# docker service ps webserver
ID            NAME             IMAGE         NODE  DESIRED STATE  CURRENT STATE            ERROR  PORTS
kwqrnf6c17oh  webserver.1      nginx:latest  vm3   Running        Running 7 minutes ago           
o9rn76zqm9lj  webserver.2      nginx:latest  vm2   Running        Running 6 seconds ago           
dgcok6p3y6yg   \_ webserver.2  nginx:latest  vm1   Shutdown       Shutdown 34 seconds ago         
zai9s6k3g23z  webserver.3      nginx:latest  vm2   Running        Running 6 seconds ago           

当vm2宕机时,vm3接管vm2的服务

[[email protected] mnt]# systemctl stop docker

[[email protected] mnt]# docker service ps webserver
ID            NAME             IMAGE         NODE  DESIRED STATE  CURRENT STATE                ERROR  PORTS
kwqrnf6c17oh  webserver.1      nginx:latest  vm3   Running        Running 7 minutes ago                ##webserver.1vm3接管
f0lcc0wnt8li  webserver.2      nginx:latest  vm3  Running        Running 46 seconds ago              
o9rn76zqm9lj   \_ webserver.2  nginx:latest  vm2   Shutdown       Running about a minute ago          
dgcok6p3y6yg   \_ webserver.2  nginx:latest  vm1   Shutdown       Shutdown about a minute ago         
mhrqub8p8uzn  webserver.3      nginx:latest  vm3   Running        Running 46 seconds ago              
zai9s6k3g23z   \_ webserver.3  nginx:latest  vm2   Shutdown       Running about a minute ago    

遇到的问题:

基于Docker的swarm集群部署

[root@vm1 docker]# docker service ps webserver
ID            NAME             IMAGE  NODE  DESIRED STATE  CURRENT STATE           ERROR                          PORTS
qygsjxpkd008  webserver.1      nginx  vm1   Running        Running 2 minutes ago                                  
p717xdtel2nw   \_ webserver.1  nginx  vm2   Shutdown       Rejected 2 minutes ago  "No such image: nginx:latest"  
v3cgi34qc7k7   \_ webserver.1  nginx  vm3   Shutdown       Rejected 2 minutes ago  "No such image: nginx:latest"  

查看digest

[[email protected] docker]# docker images --digests
REPOSITORY          TAG                 DIGEST              IMAGE ID            CREATED             SIZE
nginx               latest              <none>              af4b3d7d5401        2 years ago         190 MB
swarm               latest              <none>              a44ce04d6d59        2 years ago 
##获取到digest方可使用
[root@vm2 mnt]# docker pull nginx
[root@vm2 mnt]# docker images --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
nginx               latest              sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424   c82521676580        3 weeks ago         109 MB
swarm               latest              <none>                                                                    a44ce04d6d59        2 years ago         18.1 MB
相关标签: docker