码头装卸槽
deimos的Python项目详细描述
Deimos是Mesos的Docker插件,提供外部容器化 在MESOS-816中描述。
将参数传递给Docker
在mesos中,每一个成功的资源提供最终都会有一个 TaskInfo描述要完成的工作。在TaskInfo中是 CommandInfo在CommandInfo中有一个ContainerInfo (在MESOS-816之后)。ContainerInfo结构允许规范 一个image URL和container选项的例如:
{container=ContainerInfo{image="docker:///ubuntu"options=["-c","10240"]}}
deimos通过剥离 前缀并使用余数作为图像名称。容器选项是 任务启动时传递给docker run。如果在 选项列表中,以下所有参数都将附加到 运行命令。这在使用定义了入口点的图像时非常有用。 例如:
{container=ContainerInfo{image="docker:///flynn/slugrunner"options=["//","start","web"]}}
如果任务中不存在ContainerInfo,则deimos仍将包含 它使用传递给从机的--default_container_image,或者 基于宿主的分布和发布的合理猜测。
Docker的一些选项,比如-H,并不只适用于docker run。 这些选项应该在deimos配置文件中设置。
DEIMOS识别指定端口、CPU和内存以及 将它们转换为适当的docker选项。
通过马拉松传递参数
marathon有一个rest api来提交json格式的请求以运行长时间运行的命令。
在这个json对象中,deimos使用以下键:
- container一个嵌套对象,包含要运行的docker映像的详细信息
- image运行哪个Docker映像,它可能有一个自定义注册表,但是 必须有版本标记
- options要添加到Docker调用的额外选项列表
- cmd在映像中使用Docker运行什么命令。德伊莫斯 自动将/bin/sh -c添加到前面
- env要传递给docker映像的额外环境变量
- cpus要给容器多少CPU共享,可以是小数, 乘以1024并加上docker run -c
- mem要给容器多少内存,以兆字节为单位
curl -v -X POST http://mesos1.it.corp:8080/v2/apps \ -H Content-Type:application/json -d '{ "id": "marketing", "container": { "image": "docker:///registry.int/marketing:latest", "options": ["-v", "/srv:/srv"] }, "cmd": "/webapp/script/start.sh", "env": {"VAR":"VALUE"}, "cpus": 2, "mem": 768.0, "instances": 2 }'
这变成一个docker执行行,类似于:
docker run --sig-proxy --rm \ --cidfile /tmp/deimos/mesos/10330424-95c2-4119-b2a5-df8e1d1eead9/cid \ -w /tmp/mesos-sandbox \ -v /tmp/deimos/mesos/10330424-95c2-4119-b2a5-df8e1d1eead9/fs:/tmp/mesos-sandbox \ -v /srv:/srv -p 31014:3000 \ -c 2048 -m 768m \ -e PORT=31014 -e PORT0=31014 -e PORTS=31014 -e VAR=VALUE \ registry.int/marketing:latest sh -c "/webapp/script/start.sh"
日志记录
当以交互方式运行时,deimos记录到控制台,当在 背景。可以在deimos配置中显式配置日志记录 文件。
配置
example.cfg中有一个示例配置文件,它记录了所有 配置选项。可能是 在生产中很重要的是:
- [docker]:全局docker选项(--host)
- [log]:日志记录设置
按以下顺序搜索配置文件:
./deimos.cfg ~/.deimos /etc/deimos.cfg /usr/etc/deimos.cfg /usr/local/etc/deimos.cfg
只加载一个配置文件(找到的第一个)看看是什么 deimos认为它的配置是,运行deimos config。
州目录
deimos为每个容器创建一个状态目录,默认情况下 /tmp/deimos,它跟踪容器的状态、开始时间和pid。 为每个容器维护文件锁,以协调对 启动、停止和探测容器的装置。
< >清除属于已退出容器的状态目录,调用DEIMOS 如下所示:deimos state --rm
此任务可以从cron以固定的间隔安全运行。未来, deimos不需要单独调用 常规操作。
配置mesos以使用deimos
只需要配置从机。设置这些选项:
--containerizer_path=/usr/local/bin/deimos --isolation=external
Mesos的打包版本还可以从文件中加载以下选项:
echo /usr/local/bin/deimos > /etc/mesos-slave/containerizer_path echo external > /etc/mesos-slave/isolation