我已经建立了一个POC /马拉松系统,我用它来启动和控制码头图像。
我有一个运行在VirtualBox中的Vagrant虚拟机,在它上运行的是码头、马拉松、动物园管理员、mesos-主进程和从进程,一切都按预期工作。
我决定将Chronos添加到mix中,一开始我将它作为一个服务运行在流浪VM上,但随后选择使用mesosphere/chronos映像在一个码头容器中运行它。
当我为容器指定主机网络模式时,我发现可以成功地启动和运行容器映像,但是当我更改为桥接模式时,会遇到问题。
在桥模式下,the框架成功地向mesos注册(我可以在mesos的框架页面上看到条目),但是框架本身似乎不知道注册是否成功。如果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的确认是否使其返回时间,或者检查组件之间的通信通道的状态。
我已经做了很多搜索,我可以找到一些民间谁曾遇到同样的问题,但我还没有找到一个详细的解释,需要做什么来纠正它。
例如,我发现以下职位提到了一个已经解决的问题,这意味着用户在桥模式下成功地运行了他们的时间序列容器,但是他们对解析的描述是模糊的。也有这个职位,但改变建议确实解决了我所看到的问题。
最后,在ILM中有一个帖子,他的声音和我的问题完全一样,而这个解决方案似乎涉及修复Mesos,引入两个新的环境变量LIBPROCESS_ADVERTISE_IP和LIBPROCESS_ADVERTISE_PORT (在LIBPROCESS_IP和LIBPROCESS_PORT之上),但是我无法找到一个很好的解释,说明应该为这些变量分配哪些值,所以还没有确定更改是否会解决我正在处理的问题。
也许值得一提的是,我还在时间调度器组上发布了几个问题,但我还没有得到任何回应。
如果有任何帮助,我正在运行的软件版本如下(卷挂载允许我提供其他参数的值,例如,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
]
}如果有人有在这样的配置中使用时间序列的经验,那么我希望您能在解决这个问题方面提供任何帮助。
致以敬意,
保罗·马特尔
发布于 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框架之间的通信就开始完成,并成功地运行了时间序列中调度的任务。
发布于 2017-12-15 10:22:30
通过运行Mesos 1.1.0和Chronos 3.0.1,我能够在BRIDGE模式下成功地配置Chronos,方法是显式地设置LIBPROCESS_ADVERTISE_IP、LIBPROCESS_ADVERTISE_PORT,并将其第二个端口固定在hostPort上,这并不理想,但这是使它正确地向Mesos发布其端口广告的唯一方法:
{
"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"
}
}https://stackoverflow.com/questions/33036214
复制相似问题