生成taskInfo

task = mesos_pb2.TaskInfo()
task_id = name
task.task_id.value = task_id
task.slave_id.value = offer.slave_id.value
task.name = name
task.data = "Hello from task {}!".format(task_id)

cpus = task.resources.add()
cpus.name = 'cpus'
cpus.type = mesos_pb2.Value.SCALAR
cpus.scalar.value = float(cpu)

mem = task.resources.add()
mem.name = 'mem'
mem.type = mesos_pb2.Value.SCALAR
mem.scalar.value = 1

disk = task.resources.add()
disk.name = 'disk'
disk.type = mesos_pb2.Value.SCALAR
disk.scalar.value = 1

command = get_command_info("while true; do echo 'hahah'; sleep 2; done")
task.command.MergeFrom(command)

container = get_container_info()
task.container.MergeFrom(container)

函数:

"""
message CommandInfo {
message URI {
required string value = 1;
optional bool executable = 2;

// In case the fetched file is recognized as an archive, extract
// its contents into the sandbox. Note that a cached archive is
// not copied from the cache to the sandbox in case extraction
// originates from an archive in the cache.
optional bool extract = 3 [default = true];

// If this field is "true", the fetcher cache will be used. If not,
// fetching bypasses the cache and downloads directly into the
// sandbox directory, no matter whether a suitable cache file is
// available or not. The former directs the fetcher to download to
// the file cache, then copy from there to the sandbox. Subsequent
// fetch attempts with the same URI will omit downloading and copy
// from the cache as long as the file is resident there. Cache files
// may get evicted at any time, which then leads to renewed
// downloading. See also "docs/fetcher.md" and
// "docs/fetcher-cache-internals.md".
optional bool cache = 4;

// The fetcher's default behavior is to use the URI string's basename to
// name the local copy. If this field is provided, the local copy will be
// named with its value instead. If there is a directory component (which
// must be a relative path), the local copy will be stored in that
// subdirectory inside the sandbox.
optional string output_file = 5;
}

repeated URI uris = 1;

optional Environment environment = 2;

// There are two ways to specify the command:
// 1) If 'shell == true', the command will be launched via shell
// (i.e., /bin/sh -c 'value'). The 'value' specified will be
// treated as the shell command. The 'arguments' will be ignored.
// 2) If 'shell == false', the command will be launched by passing
// arguments to an executable. The 'value' specified will be
// treated as the filename of the executable. The 'arguments'
// will be treated as the arguments to the executable. This is
// similar to how POSIX exec families launch processes (i.e.,
// execlp(value, arguments(0), arguments(1), ...)).
// NOTE: The field 'value' is changed from 'required' to 'optional'
// in 0.20.0. It will only cause issues if a new framework is
// connecting to an old master.
optional bool shell = 6 [default = true];
optional string value = 3;
repeated string arguments = 7;

// Enables executor and tasks to run as a specific user. If the user
// field is present both in FrameworkInfo and here, the CommandInfo
// user value takes precedence.
optional string user = 5;
}
"""
def get_command_info(cmd):
command = mesos_pb2.CommandInfo()
command.value = cmd

return command

"""
/**
* Describes a container configuration and allows extensible
* configurations for different container implementations.
*
* NOTE: `ContainerInfo` may be specified, e.g., by a task, even if no
* container image is provided. In this case neither `MesosInfo` nor
* `DockerInfo` is set, the required `type` must be `MESOS`. This is to
* address a case when a task without an image, e.g., a shell script
* with URIs, wants to use features originally designed for containers,
* for example custom network isolation via `NetworkInfo`.
*/
message ContainerInfo {
// All container implementation types.
enum Type {
DOCKER = 1;
MESOS = 2;
}

message DockerInfo {
// The docker image that is going to be passed to the registry.
required string image = 1;

// Network options.
enum Network {
HOST = 1;
BRIDGE = 2;
NONE = 3;
USER = 4;
}

optional Network network = 2 [default = HOST];

message PortMapping {
required uint32 host_port = 1;
required uint32 container_port = 2;
// Protocol to expose as (ie: tcp, udp).
optional string protocol = 3;
}

repeated PortMapping port_mappings = 3;

optional bool privileged = 4 [default = false];

// Allowing arbitrary parameters to be passed to docker CLI.
// Note that anything passed to this field is not guaranteed
// to be supported moving forward, as we might move away from
// the docker CLI.
repeated Parameter parameters = 5;

// With this flag set to true, the docker containerizer will
// pull the docker image from the registry even if the image
// is already downloaded on the slave.
optional bool force_pull_image = 6;

// The name of volume driver plugin.
optional string volume_driver = 7 [deprecated = true]; // Since 1.0
}

message MesosInfo {
optional Image image = 1;
}

required Type type = 1;
repeated Volume volumes = 2;
optional string hostname = 4;

// Only one of the following *Info messages should be set to match
// the type.
optional DockerInfo docker = 3;
optional MesosInfo mesos = 5;

// A list of network requests. A framework can request multiple IP addresses
// for the container.
repeated NetworkInfo network_infos = 7;

// Linux specific information for the container.
optional LinuxInfo linux_info = 8;

// (POSIX only) rlimits of the container.
optional RLimitInfo rlimit_info = 9;

// If specified a tty will be attached to the container entrypoint.
optional TTYInfo tty_info = 10;
}
"""

def get_container_info():
container = mesos_pb2.ContainerInfo()
container.type = 1
container.docker.image = "ubuntu:12.04"
return container

注意:Task should have at least one (but not both) of CommandInfo or ExecutorInfo present

查看执行器日志

stderr:

I0423 13:46:38.657913 59463 exec.cpp:162] Version: 1.2.0
I0423 13:46:38.999876 59469 exec.cpp:237] Executor registered on agent e37a74b8-415d-42ae-85d9-addfc03ef44e-S0
I0423 13:46:39.002205 59469 docker.cpp:850] Running docker -H unix:///var/run/docker.sock run --cpu-shares 512 --memory 33554432 --env-file /tmp/NYLbhc -v /var/run/mesos/slaves/e37a74b8-415d-42ae-85d9-addfc03ef44e-S0/frameworks/e37a74b8-415d-42ae-85d9-addfc03ef44e-0012/executors/m4/runs/a290585b-8783-4597-b9c8-f0ea201806b0:/mnt/mesos/sandbox --net host --entrypoint /bin/sh --name mesos-e37a74b8-415d-42ae-85d9-addfc03ef44e-S0.a290585b-8783-4597-b9c8-f0ea201806b0 ubuntu:12.04 -c while true; do echo 'hahah'; sleep 2; done stdout:
--container="mesos-e37a74b8-415d-42ae-85d9-addfc03ef44e-S0.a290585b-8783-4597-b9c8-f0ea201806b0" --docker="docker" --docker_socket="/var/run/docker.sock" --help="false" --initialize_driver_logging="true" --launcher_dir="/usr/local/libexec/mesos" --logbufsecs="0" --logging_level="INFO" --mapped_directory="/mnt/mesos/sandbox" --quiet="false" --sandbox_directory="/var/run/mesos/slaves/e37a74b8-415d-42ae-85d9-addfc03ef44e-S0/frameworks/e37a74b8-415d-42ae-85d9-addfc03ef44e-0012/executors/m4/runs/a290585b-8783-4597-b9c8-f0ea201806b0" --stop_timeout="0ns"
--container="mesos-e37a74b8-415d-42ae-85d9-addfc03ef44e-S0.a290585b-8783-4597-b9c8-f0ea201806b0" --docker="docker" --docker_socket="/var/run/docker.sock" --help="false" --initialize_driver_logging="true" --launcher_dir="/usr/local/libexec/mesos" --logbufsecs="0" --logging_level="INFO" --mapped_directory="/mnt/mesos/sandbox" --quiet="false" --sandbox_directory="/var/run/mesos/slaves/e37a74b8-415d-42ae-85d9-addfc03ef44e-S0/frameworks/e37a74b8-415d-42ae-85d9-addfc03ef44e-0012/executors/m4/runs/a290585b-8783-4597-b9c8-f0ea201806b0" --stop_timeout="0ns"
Registered docker executor on webtest
Starting task m4
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
hahah
Received killTask for task m4

agent 本地必须有镜像
否则起不来任务

[root@localmesos mini]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50dc2110aedc ubuntu:12.04 "/bin/sh -c 'while tr" 19 seconds ago Up 17 seconds mesos-3cff5506-ce4f-4bd7-aa35-fc4f83a45b15-S0.d237b778-c8c2-4d8c-bc09-9d18a9b1301e

												

mesos无执行器启动docker的更多相关文章

  1. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)

    随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...

  2. 使用Mesos和Marathon管理Docker集群

    分布式系统是难于理解.设计.构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现.SLA(服务水平协议)是衡量停机和/或性能下降的标准,大多数现代应用程序有一个期 ...

  3. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)- 负载均衡marathon-lb

    之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡marathon-lb的部署过程: 默认情况 ...

  4. docker集群——搭建Mesos+Zookeeper+Marathon的Docker管理平台

    服务器架构 机器信息: 这里部属的机器为3个Master控制节点,3个slave运行节点,其中: zookeeper.Mesos-master.marathon运行在Master端:Mesos-sla ...

  5. mac 启动 docker daemon

    我是用virtualbox安装的. 有一个小问题就是启动docker服务时会检查boot2docker是不是最新的. 由于github被封了,所以只能手动下 https://github.com/bo ...

  6. Virtualbox网络设置和无UI启动

    因工作需要,在Macbook上安装Ubuntu 14.04.2虚拟机,需要ssh连接操作. 一番查找资料,实践后可以正常工作了,记录一些信息以备用 无UI启动虚拟机,可使用以下命令: VBoxMana ...

  7. centos7 启动docker失败的解决

    控制端使用yum install docker安装完成docker后启动docker失败,出现以下信息: Job for docker.service failed because the contr ...

  8. Centos 配置开机启动脚本启动 docker 容器

    Centos 配置开机启动脚本启动 docker 容器 Intro 我们的 Centos 服务器上部署了好多个 docker 容器,因故重启的时候就会导致还得手动去手动重启这些 docker 容器,为 ...

  9. windows 2008 开机启动 Docker Toolbox 并运行容器

    新建 docker-startup.bat @echo off REM Set the name of the VM configuration where dockerd will be hoste ...

随机推荐

  1. ubuntu 安装时分辨率太小 导致无法继续安装

    当分辨率是800 *600时,底部的按钮无法显示,不能继续安装. 可以在右上角,点击电源按钮,在系统设置中调整显示的分辨率后,继续安装.

  2. TextBox(只允许输入字母或者数字)——重写控件

    实现如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  3. 关于 android 读取当前手机号码

    手机号码不是所有的都能获取.只是有一部分可以拿到.这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码 ...

  4. 退出循环break,在while、for、do...while、循环中使用break语句退出当前循环,直接执行后面的代码。

    在while.for.do...while循环中使用break语句退出当前循环,直接执行后面的代码. 格式如下: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) {break;} ...

  5. Linux下查看系统版本号信息的方法(转载)

    原文出处  http://www.ha97.com/2987.html 1.cat /proc/version [root@localhost ~]# cat /proc/versionLinux v ...

  6. Fix-Dell iDRAC 7 error: RAC0218: The maximum number of user sessions is reached

    Hi Everyone, We came across the following error while performing some preventative maintenance check ...

  7. 用 tornado 做网站 (7)

    转自:http://wiki.jikexueyuan.com/project/start-learning-python/309.html 用 tornado 做网站 (7) 到上一节结束,其实读者已 ...

  8. php 数组函数实例

    数组的概念 数组(array)是 PHP 中一个非常重要的概念,我们可以把数组看做一系列类似的数据的集合,实际上数组是一个有序图. PHP 还提供了超过 70 个内建函数来操作数组. 由于数组在php ...

  9. 根据inode编号来删除文件或目录

    在Linux系统上,有时候会出现文件名为特殊字符的文件或目录,当我们使用rm来删除这样的文件或目录时,就会出错导致删不掉.但是我们可以依据inode号来删除这样的文件,方法如下: (1)执行ls -i ...

  10. solr入门之权重排序方法初探之使用edismax改变权重

    做搜索引擎避免不了排序问题,当排序没有要求时,solr有自己的排序打分机制及sorce字段 1.无特殊排序要求时,根据查询相关度来进行排序(solr自身规则) 2.当涉及到一个字段来进行相关度排序时, ...