mesos无执行器启动docker

生成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
				
时间: 2024-10-05 13:32:02

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

使用Mesos和Marathon管理Docker集群

分布式系统是难于理解.设计.构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现.SLA(服务水平协议)是衡量停机和/或性能下降的标准,大多数现代应用程序有一个期望的弹性SLA水平,通常按"9"的数量增加(如,每月99.9或99.99%可用性).每个额外的9变得越来越难实现. 分布式系统通常是以静态分区,比如Akka/Play. Spark/Hadoop.Storm和 Redis各自分区分组划分.静态分区带来的缺点是增加复杂性,随着机器数量增加,软

docker云方案——搭建Mesos+Zookeeper+Marathon的Docker管理平台

服务器架构 机器信息: 这里部属的机器为3个Master控制节点,3个slave运行节点,其中: zookeeper.Mesos-master.marathon运行在Master端:Mesos-slave和docker运行在Slave端:需要修改zk的内容来保证slave能够被发现和管理 构建环境 配置mesos-master(3台master节点都要操作) # 关闭selinux [[email protected] ~]# sed -i '/SELINUX/s/enforcing/disab

一步一步搭建ZooKeeper + Mesos + Marathon平台管理Docker集群

最近在Youtube看Docker视频的过程中不幸看到了Mesos的介绍,然后就有一种一见如故的感觉,最终根据mesosphere官网的文档在IBM的Bluemix虚拟机上搭建了基于ZooKeeper + Mesos + Marathon的平台. 搭建之前先简单了解下各个组件是做什么的.(来自wikipedia及其他网络) ZooKeeper:Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.

无插件启动谷歌浏览器

2017-02-13 有时候想暂时不需要插件,又不想去设置面板一个一个关闭,怎么办?毕竟插件会嵌入一些js什么的. …… start "" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-plugins pauseexit命令一: "D:\xwapp\googlechrome_dev\googlechrome_dev\chrome.exe" --dis

除了默认的docker0网桥,启动Docker服务怎么指定使用的网桥

自定义网桥 除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器. 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥. 如果服务已经运行,那需要先停止服务,并删除旧的网桥. $ sudo service docker stop $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0 然后创建一个网桥 bridge0. $ sudo brctl addbr

Mesos原理与代码分析(2): Mesos Master的启动之一

Mesos Master的启动参数如下: /usr/sbin/mesos-master --zk=zk://127.0.0.1:2181/mesos --port=5050 --log_dir=/var/log/mesos --hostname=192.168.56.101 --hostname_lookup=false --ip=192.168.56.101 --quorum=1 --registry=replicated_log --work_dir=/var/lib/mesos/maste

Virtualbox网络设置和无UI启动

因工作需要,在Macbook上安装Ubuntu 14.04.2虚拟机,需要ssh连接操作. 一番查找资料,实践后可以正常工作了,记录一些信息以备用 无UI启动虚拟机,可使用以下命令: VBoxManage startvm Docker-Registry --type headless 网络设置(这里NAT做简单端口映射):

CentOS7下如何正确安装并启动Docker(图文详解)

我使用了CentOS 7操作系统,可以非常容易地安装Docker环境.假设,下面我们都是用root用户进行操作,执行如下命令进行准备工作: yum install -y yum-utils yum-config-manager --add-repo https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo yum makecache fast 上面首先安装了yum-utils,它提供了yum-c

【亲测有效】Centos安装完成docker后启动docker报错docker: unrecognized service的两种解决方案

今天在学习Docker的时候 使用yum install docker安装完后启动不了,报错如下: [[email protected] ~]# service docker start docker: unrecognized service 一直停留在以上步骤,如果有遇到和我一样类似问题的小伙伴可以按照如下方法进行安装,即可安装成功~~ 方法一: 先移除docker [[email protected] ~]# yum remove docker 再移除docker-selinux(如果你之