[+]文章目录

Mesos 0.20.0开始支持在docker镜像中运行任务,同时是Docker选项支持的子集,后续版本还会添加更多支持。

用户可以以任务或者执行器的方式加载docker镜像。

下文包含关于Docker支持的详细的API改变和设置Docker的方法。

安装docker

使用docker来运行被控,需要在启动的时候,添加参数,如下:

mesos-slave --containerizers=docker,mesos

docker容器化的被控端,还需要在被控端里安装 Docker 命令行工具客户端(版本 >= 1.0.0)。

若在被控端启用iptables,使用下面规则,以确保iptables允许docker桥连的流量能够通过:

iptables -A INPUT -s 172.17.0.0/16 -i docker0 -p tcp -j ACCEPT

使用docker

版本0.20.0以前,TaskInfo只允许使用 CommandInfo 来加载 一个命令行任务,或ExecutorInfo来加载自定义的Executor任务。

版本0.20.0之后,TaskInfo 和 ExecutorInfo 多了一项 ContainerInfo ,以允许使用容器化工具,比如Docker,来运行任务或者执行器。

以任务方式运行 Docker 镜像,在TaskInfo中必须设置 命令行和container field。因为Docker Containerizer需要使用伴随的命令来加载docker镜像。ContainerInfo必须设类型为Docker,DockerInfo设为所需要加载的docker镜像。

以执行器方式运行Docker镜像,在TaskInfo中必须设置 ExecutorInfo 包含类型为docker的ContainerInfo。CommandInfo 会被用来启动执行器。注意,当docker镜像被当作Mesos执行器加载,会在它启动时注册为被控。

容器工具的作用方式

docker容器工具会把 任务和执行器的加载和销毁命令转换为Docker CLI命令。

docker容器工具在把容器当任务加载时,会:

  1. 把所有 CommandInfo指定的文件载入沙箱。
  2. 从远程仓库里拉取docker镜像。
  3. 用docker执行器运行docker镜像,把沙箱路径指向Docker容器,将目录指向设为环境变量MESOS_SANDBOX的值。执行器同时会把容器日志不断地发往沙箱里的stdout/stderr文件。
  4. 在容器退出或者销毁后,停止或移除docker容器。

docker容器工具通过标示 前缀为 mesos- 后附着被控端slave id (比如mesos-slave1-abcdefghji)的命名规则来加载、停止和销毁容器,并认为所有mesos-前缀开头的容器都是在被控端管理的,可以按需被停止或结束。

当以执行器来加载docker容器的时候,和上面略有不同:不用加载命令行执行器,只需要知道dokcer容器执行器的进程号(PID)。

Note:目前Docker镜像的网络使用默认的主机连接方式,以方便让docker镜像以执行器方式运行。

容器工具也支持强制拉取镜像,当关闭这功能时,若主机上没有镜像时,docker镜像将只被重新更新。

私有Docker仓库

可在 .dockercfg 中指定 URI地址和登录信息,来使用 Docker私用库。 .dockercfg 会被docker容器工具拉入沙箱中,并设为HOME环境变量,以使docker CLI自动应用该配置。

CommandInfo运行Docker镜像

运行docker镜像有两种方式:默认命令行和自设命令入口。

若要使用默认命令行来载入 Docker 镜像的方式(比如 docker run image), 那么CommandInfo配置项则不能设值。因为若设置了,则会覆盖掉默认命令。

若使用自定义命令入口载入docker镜像的方式,CommandInfo的shell项必须设为 false。因为若设为true,docker容器工具将会以 /bin/sh -c 来运行自设命令,同时也会被当作运行镜像的参数。

在slave节点重启时恢复docker容器

Docker容器化工具支持在slave节点重启的时候恢复Docker容器的功能(不论该slave节点是否运行在Docker容器中运行与否)。

当启用 docker_mesos_image配置项的时候,Docker容器化工具会认为自己容器中运行,从而更变其相应的恢复和加载容器机制。


« 前一篇