Chapter 2 Swarm管理Docker集群

1 概述

Docker Swarm是Docker公司在2014年初发布的一套管理Docker集群的工具,其可将一群Docker宿主机集群成一个单一、虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问接口,各种形式的Docker工具和指令都能很容易与其集成。但是,和Google的Kubernetes相比,其功能较少,在生产环境中的应用也较少。

Docker Swarm的结构图如下,在使用Swarm管理Docker集群时,会有一个主机充当swarm manager角色以及若干的swarm node,而swarm manager本身也属于一个swarm node。swarm manager上运行swarm daemon,用户只需要跟swarm manager通信,而swarm manager再根据discovery service的信息选择一个swarm node来运行container。值得注意的是,swarm daemon只是一个任务调度器(scheduler)和路由器(router),它本身不运行容器,它只接受Docker client 发送过来的请求,调度合适的swarm node来运行container。这意味着,即使swarm daemon由于某些原因挂掉了,已经运行起来的容器也不会有任何影响。

在利用Swarn管理Docker集群时,有以下两点需要注意:

(1)集群中的每台节点上面的 Docker 的版本都不能小于1.4
(2)为了让 swarm manager 能够跟每台 swarm node 进行通信,集群中的每台节 点的 Docker daemon 都必须监听同一个网络接口。 

2 安装

2.1 拉取Swarm镜像

sudo docker pull swarm

在国内拉取Docker Hub上的镜像可能有点问题,此时可以使用下列指令拉取daocloud上的镜像

sudo docker pull daocloud.io/swarm

查看是否安装成功

sudo docker run --rm daocloud.io/swarm -v

输出类似下列信息表示安装成功

swarm version 1.2.5 (27968ed)

2.2 修改集群中节点的docker deamon监听方式

在所有需要被Swarm管理的节点主机上修改Docker配置文件:vim /etc/default/docker

在文件结尾添加:DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock" 

重启Docker:sudo service docker restart

2.3 服务发现(Discovery service backend)功能 

Docker集群管理需要使用服务发现(Discovery service backend)功能,Swarm主要支持以下几种方式:DockerHub提供的服务发现功能,本地的文件,etcd,counsel,zookeeper和IP列表等,这里主要介绍第一种方式,其他的用法都是大同小异

这里的实验环境如下:

使用三台云主机:10.4.230.62,10.4.228.219,10.4.230.16,其中第一台同时充当swarm manager角色

2.3.1 创建集群token

在三台机器上的任何一台执行create命令来获取集群的唯一token,用来标识要管理的集群

sudo docker run --rm daocloud.io/swarm create

这里,在第一台云主机上(其实每一台节点主机都可以,并不一定要在充当swarm manager的主机上)执行该命令,输出如下:

[root@docker ~]# sudo docker run --rm daocloud.io/swarm create
d5e1c2c733eb8968a72dfadefbf48a7f

命令的返回值:d5e1c2c733eb8968a72dfadefbf48a7f就是上面说到的token,这个token需要在后面的操作中反复用到

2.3.2 加入集群

在所有需要被管理的节点主机上执行join命令来使其加入集群中,例如,在第一台云主机上执行:

sudo docker run -d daocloud.io/swarm join --addr=10.4.230.62:2375 token://d5e1c2c733eb8968a72dfadefbf48a7f

可以看到,这里用到了上一步产生的token,在另外两台主机上只要将ip改成其对应的主机ip即可

2.3.3 启动swarm manager

在需要充当swarm manager的主机上执行manage命令:

sudo docker run -d -p 2376:2375 daocloud.io/swarm manage token://d5e1c2c733eb8968a72dfadefbf48a7f 

这里再次用到了token,其中的2376表示映射端口,它可以是除了2375以外未被占用的端口

2.3.4 验证集群创建是否成功

在任何一台节点主机上执行list命令可以验证集群是否创建成功,这里在第二台主机(ip为10.4.228.219)执行:

[root@docker0 ~]# sudo docker run --rm daocloud.io/swarm join list token://d5e1c2c733eb8968a72dfadefbf48a7f

10.4.230.62:2375

 10.4.228.219:2375

 10.4.230.16:2375

输出的3个ip即为加入集群的节点主机的ip,表示集群创建成功

2.3.5 操作集群

现在可以在任何一台节点主机上执行docker命令了(命令需要通过-H参数指明swarm manager节点主机的ip),例如,在第二台主机上执行docker info命令查看集群中节点信息

[root@docker0 ~]# sudo docker -H 10.4.230.62:2376 info

输出下列关于集群的信息,可以看到节点数为3(Nodes参数),集群调度策略(后面会介绍)为spread(Strategy参数)等

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: swarm/1.2.5
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 3
 (unknown): 10.4.228.219:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ UpdatedAt: 2016-10-28T05:34:52Z
  └ ServerVersion:
 (unknown): 10.4.230.16:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ UpdatedAt: 2016-10-25T02:09:52Z
  └ ServerVersion:
 (unknown): 10.4.230.62:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ UpdatedAt: 2016-10-28T05:10:52Z
  └ ServerVersion:
Plugins:
 Volume:
 Network:
Swarm:
 NodeID:
 Is Manager: false
 Node Address:
Security Options:
Kernel Version: 3.10.0-123.el7.x86_64
Operating System: linux
Architecture: amd64
CPUs: 0
Total Memory: 0 B
Name: b1573f3d6178
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值