首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在桥接模式下运行Chronos码头图像

在桥接模式下运行Chronos码头图像
EN

Stack Overflow用户
提问于 2015-10-09 10:43:48
回答 2查看 836关注 0票数 2

我已经建立了一个POC /马拉松系统,我用它来启动和控制码头图像。

我有一个运行在VirtualBox中的Vagrant虚拟机,在它上运行的是码头、马拉松、动物园管理员、mesos-主进程和从进程,一切都按预期工作。

我决定将Chronos添加到mix中,一开始我将它作为一个服务运行在流浪VM上,但随后选择使用mesosphere/chronos映像在一个码头容器中运行它。

当我为容器指定主机网络模式时,我发现可以成功地启动和运行容器映像,但是当我更改为桥接模式时,会遇到问题。

在桥模式下,the框架成功地向mesos注册(我可以在mesos的框架页面上看到条目),但是框架本身似乎不知道注册是否成功。如果mesos主日志中满是消息,则如下所示:

代码语言:javascript
复制
strong textI1009 09:47:35.876454  3131 master.cpp:2094] Received SUBSCRIBE call for framework 'chronos-2.4.0' at scheduler-16d21dac-b6d6-49f9-90a3-bf1ba76b4b0d@172.17.0.59:37318
I1009 09:47:35.876832  3131 master.cpp:2164] Subscribing framework chronos-2.4.0 with checkpointing enabled and capabilities [  ]
I1009 09:47:35.876924  3131 master.cpp:2174] Framework 20151009-094632-16842879-5050-3113-0001 (chronos-2.4.0) at scheduler-16d21dac-b6d6-49f9-90a3-bf1ba76b4b0d@172.17.0.59:37318 already subscribed, resending acknowledgement

这意味着某种类型的配置/通信问题,但我无法确切地找出问题的根源。我不确定是否有任何方法来确认来自mesos的确认是否使其返回时间,或者检查组件之间的通信通道的状态。

我已经做了很多搜索,我可以找到一些民间谁曾遇到同样的问题,但我还没有找到一个详细的解释,需要做什么来纠正它。

例如,我发现以下职位提到了一个已经解决的问题,这意味着用户在桥模式下成功地运行了他们的时间序列容器,但是他们对解析的描述是模糊的。也有这个职位,但改变建议确实解决了我所看到的问题。

最后,在ILM中有一个帖子,他的声音和我的问题完全一样,而这个解决方案似乎涉及修复Mesos,引入两个新的环境变量LIBPROCESS_ADVERTISE_IP和LIBPROCESS_ADVERTISE_PORT (在LIBPROCESS_IP和LIBPROCESS_PORT之上),但是我无法找到一个很好的解释,说明应该为这些变量分配哪些值,所以还没有确定更改是否会解决我正在处理的问题。

也许值得一提的是,我还在时间调度器组上发布了几个问题,但我还没有得到任何回应。

如果有任何帮助,我正在运行的软件版本如下(卷挂载允许我提供其他参数的值,例如,zk_hosts作为文件,而不必一直更改JSON):

代码语言:javascript
复制
Vagrant:    1.7.4
VirtualBox: 5.0.2
Docker:     1.8.1
Marathon:   0.10.1
Mesos:      0.24.1
Zookeeper:  3.4.5

我用来启动chronos容器的JSON如下所示:

代码语言:javascript
复制
{
  "id": "chronos",
  "cpus": 1,
  "mem": 1024,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "mesosphere/chronos",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 4400,
          "hostPort": 0,
          "servicePort": 4400,
          "protocol": "tcp"
        }
      ]
    },
    "volumes": [
      {
        "containerPath": "/etc/chronos/conf",
        "hostPath": "/vagrant/vagrantShared/chronos",
        "mode": "RO"
      }
    ]
  },
  "cmd": "/usr/bin/chronos --http_port 4400",
  "ports": [
    4400
  ]
}

如果有人有在这样的配置中使用时间序列的经验,那么我希望您能在解决这个问题方面提供任何帮助。

致以敬意,

保罗·马特尔

EN

回答 2

Stack Overflow用户

发布于 2015-10-09 14:11:08

我设法找到了我的问题的答案(在示例框架这里的帮助下),所以我想我应该发布一个解决方案来帮助其他遇到同样问题的人。

chronos服务(以及示例框架)被配置为在与主机(流浪者) VM上的docker0接口相关联的IP上与动物园管理员通信(在本例中为172.17.42.1)。

动物园管理员将报告主机在127.0.1.1上可用,这是启动mesos-主进程的主机VM的IP地址,但尽管可以从容器中单击此IP地址,但任何连接特定端口的尝试都将被拒绝。

解决方案是使用--advertise_ip参数启动mesos-主程序,并指定docker0接口的IP。这意味着,尽管服务在主机上启动,但它似乎是在docker0电离面上启动的。

一旦完成,mesos和tasks框架之间的通信就开始完成,并成功地运行了时间序列中调度的任务。

票数 2
EN

Stack Overflow用户

发布于 2017-12-15 10:22:30

通过运行Mesos 1.1.0和Chronos 3.0.1,我能够在BRIDGE模式下成功地配置Chronos,方法是显式地设置LIBPROCESS_ADVERTISE_IPLIBPROCESS_ADVERTISE_PORT,并将其第二个端口固定在hostPort上,这并不理想,但这是使它正确地向Mesos发布其端口广告的唯一方法:

代码语言:javascript
复制
{
  "id": "/core/chronos",
  "cmd": "LIBPROCESS_ADVERTISE_IP=$(getent hosts $HOST | awk '{ print $1 }') LIBPROCESS_ADVERTISE_PORT=$PORT1 /chronos/bin/start.sh --hostname $HOST --zk_hosts master-1:2181,master-2:2181,master-3:2181 --master zk://master-1:2181,master-2:2181,master-3:2181/mesos --http_credentials ${CHRONOS_USER}:${CHRONOS_PASS}",
  "cpus": 0.1,
  "mem": 1024,
  "disk": 100,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "mesosphere/chronos:v3.0.1",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 9900,
          "hostPort": 0,
          "servicePort": 0,
          "protocol": "tcp",
          "labels": {}
        },
        {
          "containerPort": 9901,
          "hostPort": 9901,
          "servicePort": 0,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": true,
      "parameters": [],
      "forcePullImage": true
    }
  },
  "env": {
    "CHRONOS_USER": "admin",
    "CHRONOS_PASS": "XXX",
    "PORT1": "9901",
    "PORT0": "9900"
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33036214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档