【发布时间】:2017-12-15 18:22:30
【问题描述】:
我一直在构建一个 POC mesos/marathon 系统,用于启动和控制 docker 映像。
我有一个在 VirtualBox 中运行的 Vagrant 虚拟机,我在其上运行 docker、marathon、zookeeper、mesos-master 和 mesos-slave 进程,一切都按预期运行。
我决定将 Chronos 添加到组合中,最初我将它作为服务在 vagrant VM 上运行,但后来选择切换到使用 mesosphere/chronos 在 docker 容器中运行它图片。
我发现当我为容器指定 HOST 网络模式时,我可以让容器镜像启动并成功运行,但是当我更改为 BRIDGE 模式时,我遇到了问题。
在BRIDGE模式下,chronos框架向mesos注册成功(我可以在mesos UI的frameworks页面上看到条目),但看起来框架本身并不知道注册成功。 mesos 主日志如果充满了如下消息:
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 的确认是否使其返回 chronos 或检查组件之间的通信通道的状态。
我做了很多搜索,我可以找到遇到相同问题的人的帖子,但我没有找到关于需要做什么来纠正它的详细说明。
例如,我发现following post 提到了一个已解决的问题,这意味着用户在桥接模式下成功运行了他们的 chronos 容器,但他们对解决方案的描述含糊不清。还有this post,但建议的更改确实解决了我看到的问题。
最后,ILM 的某个人提出了post,他的问题听起来完全是我的问题,解决方案似乎涉及对 Mesos 的修复,以引入两个新的环境变量 LIBPROCESS_ADVERTISE_IP 和 LIBPROCESS_ADVERTISE_PORT(在 LIBPROCESS_IP 和 LIBPROCESS_PORT 之上)但是对于应该为这些变量中的任何一个分配什么值,我找不到一个体面的解释,因此尚未确定更改是否会解决我遇到的问题。
可能值得一提的是,我还在 chronos-scheduler 组上发布了几个问题,但我还没有收到任何回复。
如果有任何帮助,我正在运行的软件版本如下(卷安装允许我提供其他参数的值 [例如 master、zk_hosts] 作为文件,而无需不断更改 JSON):
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 如下:
{
"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
]
}
如果有人有在这样的配置中使用 chronos 的经验,那么我将不胜感激您在解决此问题时可能提供的任何帮助。
问候,
保罗·马特
【问题讨论】: