【问题标题】:Custom mesos executor for docker in chronoschronos 中 docker 的自定义 mesos 执行器
【发布时间】:2014-02-11 14:07:59
【问题描述】:

我正在尝试将 Chronos 配置为使用位于 https://github.com/mesosphere/mesos-docker/ 的自定义 mesos-docker 执行程序。每次我尝试运行命令都会失败。

我使用以下命令创建了任务

echo '{"schedule":"R/2014-02-14T00:52:00Z/PT90M", "name":"testing_docker_executor", "command":"docker_ubuntu_test /root/docker_test.sh", "epsilon":"PT15M", "executor":"/var/lib/mesos/executors/docker" }' | http POST localhost:8080/scheduler/iso8601

我还在执行器中配置了日志记录,下面是我在失败时得到的日志

Feb 11 13:51:36 ip6-localhost docker[13895]: Ready to serve!
Feb 11 13:51:36 ip6-localhost docker[13895]: Registered with Mesos slave
Feb 11 13:51:36 ip6-localhost docker[13895]: Task is: ct:1392126755612:2:testing_docker_executor
Feb 11 13:51:36 ip6-localhost docker[13895]: JSON from framework is rubbish
Feb 11 13:51:36 ip6-localhost docker[13895]: No JSON object could be decoded
Feb 11 13:51:36 ip6-localhost docker[13895]: Traceback (most recent call last):
Feb 11 13:51:36 ip6-localhost docker[13895]:   File "/var/lib/mesos/executors/docker", line 120, in launchTask
Feb 11 13:51:36 ip6-localhost docker[13895]:     self.data = json.loads(task.data) if task.data else {}
Feb 11 13:51:36 ip6-localhost docker[13895]:   File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
Feb 11 13:51:36 ip6-localhost docker[13895]:     return _default_decoder.decode(s)
Feb 11 13:51:36 ip6-localhost docker[13895]:   File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
Feb 11 13:51:36 ip6-localhost docker[13895]:     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
Feb 11 13:51:36 ip6-localhost docker[13895]:   File "/usr/lib/python2.7/json/decoder.py", line 383, in raw_decode
Feb 11 13:51:36 ip6-localhost docker[13895]:     raise ValueError("No JSON object could be decoded")
Feb 11 13:51:36 ip6-localhost docker[13895]: ValueError: No JSON object could be decoded
Feb 11 13:51:36 ip6-localhost docker[13895]: []
Feb 11 13:51:36 ip6-localhost docker[13895]: Traceback (most recent call last):
Feb 11 13:51:36 ip6-localhost docker[13895]:   File "/var/lib/mesos/executors/docker", line 67, in run
Feb 11 13:51:36 ip6-localhost docker[13895]:     img  = self.args[0]
Feb 11 13:51:36 ip6-localhost docker[13895]: IndexError: list index out of range

有什么我想念的吗?我需要在命令中提供 JSON。

【问题讨论】:

    标签: python docker executors mesos mesosphere


    【解决方案1】:

    TaskInfo 中似乎提供了数据,但我不确定这是从哪里来的。 Docker 执行器期望,如果提供了数据,它是由 Marathon 提供的,并且应该是 JSON。显然里面还有别的东西。

    关于第二个错误——list index out of range——这表明docker_ubuntu_test /root/docker_test.sh 没有被传递给 Docker 执行器。这确实很奇怪。

    【讨论】:

    • 在处理函数中添加日志语句打印sys.argv后,我只看到执行器正在传递,没有别的。但是,在 task.data 中,一切都在那里。此外,当我在 launchTask 函数和硬编码 img 和 args 变量中评论大部分部分时,它可以工作。在 handler 和 init pastebin.com/bmFPb8pr 中添加日志后请查看新日志
    【解决方案2】:

    我已经通过@solidsnack 分叉并定制了 mesos-docker 脚本。它可以在 https://github.com/mudasirmirza/chronos-docker

    此脚本在没有 Marathon 的情况下与 Mesos 和 Chronos 完美配合。

    用法和示例在自述文件中。

    【讨论】:

      【解决方案3】:

      您需要提供一个 docker image 以便 mesos 在您的 json 中运行。它应该看起来更像这样。

      { 
          "schedule" : "R5/2014-11-12T05:31:00.000Z/PT10S",  
          "epsilon" : "PT10M",  
          "name" : "ECHO_DATE_DOCKER",
          "container": {
          "type": "DOCKER",
          "image": "libmesos/ubuntu"
          },
          "cpus": "0.5",
          "mem": "256",   
          "command" : "date >> /tmp/ECHO_DATE_01",  
          "owner" : "chronos-user@example.com",  
          "async" : false 
      }
      

      还有更多例子here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 2015-08-12
        相关资源
        最近更新 更多