Docker swarm mode

Swarm是Docker内置的一款集群管理工具,其作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,功能也较kubernetes更少一些。

Swarm的优点和缺点都是使用标准的Docker接口,使用简单,容易集成到现有系统,但是更困难支持更复杂的调度,比如以定制接口方式定义的调度。

Kubernetes 是自成体系的管理工具,有自己的服务发现和复制,需要对现有应用的重新设计,但是能支持失败冗余和扩展系统。

稳定性方面,Kubenetes 更稳定。


一、创建集群

swarm集群内节点分为三种角色:领导者(Leader),被选举者(Reachable),工作节点(Worker)。领导者和被选举者其实都是manager,swarm集群中至少得有2个可用的被选举节点才能选举主节点出来,否则集群将无法执行操作。

创建管理节点:

[root@Python ~]# docker swarm init --advertise-addr 192.168.3.24
Swarm initialized: current node (bs9ozmncagtsvmqzcb74o4l95) is now a manager.

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

    docker swarm join --token SWMTKN-1-40rwtcdq31zm2jp14hynt4rlwzleh6n5ewll7mylo1nfvxy7ft-02vm2piktpm05qul0cvdvo10e 192.168.3.24:2377

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

 查看token令牌:

[root@Python ~]# docker swarm join-token worker
# 查看加入工作节点token令牌
[root@Python ~]# docker swarm join-token manager
# 查看加入管理节点token令牌

创建工作节点dockerone:

[root@dockerone ~]# docker swarm join --token SWMTKN-1-40rwtcdq31zm2jp14hynt4rlwzleh6n5ewll7mylo1nfvxy7ft-02vm2piktpm05qul0cvdvo10e 192.168.3.24:2377
This node joined a swarm as a worker.

创建工作节点dockertwo:

[root@dockertwo ~]# docker swarm join --token SWMTKN-1-40rwtcdq31zm2jp14hynt4rlwzleh6n5ewll7mylo1nfvxy7ft-02vm2piktpm05qul0cvdvo10e 192.168.3.24:2377
This node joined a swarm as a worker.

在管理节点上查看swarm集群:

[root@Python ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
bs9ozmncagtsvmqzcb74o4l95 *   Python              Ready               Active              Leader              18.09.3
1biq9wn6tsgllzdxxgbfq1e5o     dockerone           Ready               Active                                  18.09.3
momahk8groojvrpucbdtemh3d     dockertwo           Ready               Active                                  18.09.3

 查看端口情况:(2375 是 docker 守护进程的端口,2377 是 swarm mode 集群管理的端口,7946 是各集群节点之间通信的端口。

[root@Python ~]# netstat -tnlp|grep docker     
tcp6       0      0 :::2375                 :::*                    LISTEN      16561/dockerd       
tcp6       0      0 :::2377                 :::*                    LISTEN      16561/dockerd       
tcp6       0      0 :::7946                 :::*                    LISTEN      16561/dockerd 

 查看集群网络情况:(初始化集群后,默认会创建一个 overlay 的网络 ingress,还会创建一个桥接的网络docker_gwbridge,overlay 可网络用于节点间通信)

[root@Python ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
ca24e1342650        bridge              bridge              local
a0581eea0bfb        docker_gwbridge     bridge              local
7d4bbf8a2ab7        host                host                local
e1o93ah6zjgc        ingress             overlay             swarm
dc4e5634b90c        none                null                local

 


二、管理集群节点

1、升降级节点角色

[root@Python ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
bs9ozmncagtsvmqzcb74o4l95 *   Python              Ready               Active              Leader              18.09.3
1biq9wn6tsgllzdxxgbfq1e5o     dockerone           Ready               Active                                  18.09.3
momahk8groojvrpucbdtemh3d     dockertwo           Ready               Active                                  18.09.3

[root@Python ~]# docker node promote dockerone
Node dockerone promoted to a manager in the swarm.

[root@Python ~]# docker node ls 
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
bs9ozmncagtsvmqzcb74o4l95 *   Python              Ready               Active              Leader              18.09.3
1biq9wn6tsgllzdxxgbfq1e5o     dockerone           Ready               Active              Reachable           18.09.3
momahk8groojvrpucbdtemh3d     dockertwo           Ready               Active                                  18.09.3

[root@Python ~]# docker node demote Python
[root@dockerone ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
bs9ozmncagtsvmqzcb74o4l95     Python              Ready               Active                                  18.09.3
1biq9wn6tsgllzdxxgbfq1e5o *   dockerone           Ready               Active              Leader              18.09.3
momahk8groojvrpucbdtemh3d     dockertwo           Ready               Active                                  18.09.3

 注:升降级节点角色只能在管理节点上运行,应先升级工作节点为被选举者,再降级领导者为工作节点,然后被选举者成为领导者完成替换;

 

2、让节点退出swarm集群

[root@Python ~]# docker swarm leave
Node left the swarm.

 注:docker swarm leave 命令可在所有节点上运行,值得注意的是,工作节点退出swarm集群后,在管理节点上依然保存着工作节点的节点信息,状态为down,要删除节点信息,可使用docker node rm 命令,当所有的节点都退出并且被删除时,在管理节点上使用docker swarm leave,然后退出整个集群;

3、删除节点信息

[root@dockerone ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
bs9ozmncagtsvmqzcb74o4l95     Python              Down                Active                                  18.09.3
vdb2v23wl7rtyepc0xu9foupj     Python              Ready               Active              Reachable           18.09.3
1biq9wn6tsgllzdxxgbfq1e5o *   dockerone           Ready               Active              Leader              18.09.3
momahk8groojvrpucbdtemh3d     dockertwo           Ready               Active                                  18.09.3
[root@dockerone ~]# docker node rm bs9ozmncagtsvmqzcb74o4l95
bs9ozmncagtsvmqzcb74o4l95

 三、管理集群服务

1、创建服务

[root@Python ~]# docker service create --replicas 3 -p 80:80 --name My_nginx nginx
vebv2hw2kqd8z3ln1jbzmtbsi
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

--replicas 3  表示在集群中创建三个服务

2、查看集群服务列表

[root@dockerone ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
7i3hnasnka53        My_nginx            replicated          3/3                 nginx:latest        *:80->80/tcp

3、查看某个集群服务详情

[root@dockerone ~]# docker service ps My_nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
mv0zgbylbhu0        My_nginx.1          nginx:latest        Python              Running             Running about a minute ago                       
ynntkki4r0e0        My_nginx.2          nginx:latest        dockerone           Running             Running about a minute ago                       
es5b9p1uwwl6        My_nginx.3          nginx:latest        dockertwo           Running             Running about a minute ago 

4、查看某个服务日志

[root@dockerone ~]# docker service logs My_nginx

5、删除服务

[root@dockerone ~]# docker service rm My_nginx
My_nginx

四、使用docker-compose文件部署集群服务

1、docker-compose.yml 文件准备

[root@Python syz]# cat syztoo.yml 
version: "3"

services:
  wordpress:
    image: wordpress
    ports:
      - 80:80
    networks:
      - overlay
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    deploy:
      mode: replicated
      replicas: 3

  db:
    image: mysql
    networks:
      - overlay
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    deploy:
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

volumes:
  db-data:
networks:
  overlay:

2、部署服务

[root@Python syz]# docker stack deploy -c syztoo.yml wordpress
Creating network wordpress_overlay
Creating network wordpress_default
Creating service wordpress_visualizer
Creating service wordpress_wordpress
Creating service wordpress_db

3、查看服务

[root@Python syz]# docker stack ls
NAME                SERVICES            ORCHESTRATOR
wordpress           3                   Swarm

4、移除服务

[root@Python syz]# docker stack down wordpress
Removing service wordpress_db
Removing service wordpress_visualizer
Removing service wordpress_wordpress
Removing network wordpress_overlay
Removing network wordpress_default

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值