docker swarm基础

Docker Swarm介绍

docker swarm是由一个或者多个Docker节点组成。这些节点可以是物理服务器、虚拟机、树莓派(Raspberry Pi)或云实例。唯一的前提就是要求所有节点通过可靠的网络相连。
节点会被配置为管理节点(Manager)或工作节点(Worker)。管理节点负责集群控制面(Control Plane),进行诸如监控集群状态、分发任务至工作节点等操作。工作节点接收来自管理节点的任务并执行。

Docker Swarm集群搭建

1. 网络条件

需要在路由器和防火墙中开放如下端口。

  • 2377/tcp:用于客户端与 Swarm 进行安全通信。
  • 7946/tcp 与 7946/udp:用于控制面 gossip 分发
  • 4789/udp:用于基于 VXLAN 的覆盖网络。
2.初始化一个docker swarm 集群
[root@localhost ~]# docker swarm init  --advertise-addr 192.168.3.21:2377
Swarm initialized: current node (1ounn2qr62r50m2x8oso0l0nu) is now a manager.

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

    docker swarm join --token SWMTKN-1-1h9lh31ewg4pqku6kcnz5b7v4my28ixm3kqxh8g37idby4t5m1-1r95q74re7etke0objpa2iclt 192.168.3.21:2377

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

命令解析:
docker swarm init: Docker 来初始化一个新的 Swarm,并将自身设置为第一个管理节点。同时也会使该节点开启 Swarm 模式。
–advertise-addr : 指定其他节点用来连接到当前管理节点的 IP 和端口。这一属性是可选的,当节点上有多个 IP 时,可以用于指定使用哪个IP。此外,还可以用于指定一个节点上没有的 IP,比如一个负载均衡的 IP。

3.列出Swarm中的节点
[root@localhost ~]# docker node ls
ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
1ounn2qr62r50m2x8oso0l0nu *   localhost.localdomain   Ready               Active              Leader              18.09.6

4. 将节点加入到集群中
  • ssh到要加入的集群的节点上
  • 运行创建swarm集群时候产生的命令来将woker1加入到集群中:
[root@localhost ~]#ocker swarm join --token SWMTKN-1-1h9lh31ewg4pqku6kcnz5b7v4my28ixm3kqxh8g37idby4t5m1-1r95q74re7etke0objpa2iclt 192.168.3.21:2377
This node joined a swarm as a worker.
  • 如果你找不到加入命令了,可以在管理节点运行下列命令找回加入命令:
[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1h9lh31ewg4pqku6kcnz5b7v4my28ixm3kqxh8g37idby4t5m1-1r95q74re7etke0objpa2iclt 192.168.3.21:2377

  • 可以ssh到管理节点查看节点是否加入成功
[root@localhost ~]# docker node ls
ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xzbl21fhfflll1afowmt4cd01     localhost.localdomain   Ready               Active                                  19.03.0
1ounn2qr62r50m2x8oso0l0nu *   manageer                Ready               Active              Leader              18.09.6

ID名带有*号的为管理节点

Docker Swarm 服务部署

1.创建服务
[root@localhost ~]# docker service create --name nginx --replicas 2 -p:80:80 -d nginx
2zi34oq4c31tyy4movs73rmp7

命令解析:
docker service creale : 命令告知 Docker 正在声明一个新服务,
–name: 参数将其命名为 nginx。
-p 80:80: 将每个节点上的 80 端口映射到服务副本内部的 80 端口。
–replicas : 参数告知 Docker 应该总是有 52个此服务的副本。
-d nginx: 告知 Docker 哪个镜像用于副本,重要的是,要了解所有的服务副本使用相同的镜像和配置。

2.查看服务
  • docker service ls 命令可以查看 Swarm 中所有运行中的服务。
[root@localhost ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2zi34oq4c31t        nginx               replicated          2/2                 nginx:latest        *:80->80/tcp

  • docker service ps 命令可以查看服务副本列表及各副本的状态
[root@localhost ~]# docker service ps nginx
ID                  NAME                IMAGE               NODE                    DESIRED STATE       CURRENT STATE           ERROR               PORTS
clvy0gbzqo06        nginx.1             nginx:latest        manageer                Running             Running 7 minutes ago                       
oqzxq01dnyvs        nginx.2             nginx:latest        localhost.localdomain   Running             Running 7 minutes ago                       

  • docker service inspect 命令查看服务更为详细的信息
[root@localhost ~]# docker service inspect --pretty nginx

ID:		2zi34oq4c31tyy4movs73rmp7
Name:		nginx
Service Mode:	Replicated
 Replicas:	2
Placement:
UpdateConfig:
 Parallelism:	1
 On failure:	pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:	1
 On failure:	pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:		nginx:latest@sha256:53ddb41e46de3d63376579acf46f9a41a8d7de33645db47a486de9769201fec9
 Init:		false
Resources:
Endpoint Mode:	vip
Ports:
 PublishedPort = 80
  Protocol = tcp
  TargetPort = 80
  PublishMode = ingress 

3.服务的扩容

假设业务呈爆发式增长,则 Web 前端服务接收到双倍的流量压力。所幸通过一个简单的 docker service scale 命令即可对 nginx 服务进行扩容。

[root@localhost ~]# docker service scale nginx=3
nginx scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

4. 删除服务
[root@localhost ~]# docker service rm nginx
nginx

Docker Swarm服务日志

docker service logs <service-name>

Docker Swarm下线和恢复集群中的节点

  • 下线集群中的节点
docker node update --availability drain NODE_NAME
  • 回复集群中的某个节点
docker node update --availability active NODE_NAME
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值