Chapter 2 Swarm管理Docker集群

来源:互联网 发布:淘宝联盟手安卓版 编辑:程序博客网 时间:2024/06/05 20:16

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: 0Images: 0Server Version: swarm/1.2.5Role: primaryStrategy: spreadFilters: health, port, containerslots, dependency, affinity, constraintNodes: 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_64Operating System: linuxArchitecture: amd64CPUs: 0Total Memory: 0 BName: b1573f3d6178Docker Root Dir:Debug Mode (client): falseDebug Mode (server): falseWARNING: No kernel memory limit support


0 0