zoukankan      html  css  js  c++  java
  • 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


    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





  • 相关阅读:
    导数的定义(一些常用函数的求导公式)
    ubuntu后台运行命令行
    数学公式做图网站
    导数可导性与连续性关系
    nutch 二次开发
    matplotlib绘制精美的图表(这是教程哦)
    JS获取今天和上个月的今天
    js修改url参数,无刷新更换页面url
    给网页复制的内容添加东西
    MySQL下载安装详情教程
  • 原文地址:https://www.cnblogs.com/mhc-fly/p/6752384.html
Copyright © 2011-2022 走看看