• 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





  • 相关阅读:
    x86 hook跳转内存地址转换计算框架
    win10180317134配合VS2017搭建WDK驱动开发环境
    C/C++字节特征码转换自动格式化文本工具算法源码
    jar包直接拷贝到WEBINF/lib下和以userLibrary引入的区别
    java.io.IOException: Cannot rename original file to %TOMCAT_HOME%\conf\tomcatusers.xml.old
    Tomcat5 和 Tomcat6 类加载器架构
    Tomcat version * only supports J2EE * Web modules
    tomcat启动时报错:org.apache.catalina.core.AprLifecycleListener init
    tomcat 不能正常启动,双击 startup.bat 一闪而过
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/mhc-fly/p/6752384.html
Copyright © 2020-2023  润新知