我正在寻找在DC/OS上运行Docker容器时是否使用Marathon和Chronos,Docker Swarm或Kubernetes的一些优缺点.
例如,何时使用Marathon/Chronos比使用Kubernetes更好,反之亦然?
现在我主要是进行实验,但希望我们在夏天之后开始在生产中使用这些服务之一.这可能会使Docker Swarm失去资格,因为我不确定它是否会在那时生产.
我喜欢Docker Swarm的原因是它本质上只是"Docker命令",你不需要学习全新的东西.我们已经在使用docker-compose
,它将与Docker Swarm一起开箱即用(至少在理论上),这将是一个很大的优势.我对Docker Swarm的主要关注是它是否涵盖了在生产中运行系统所需的所有用例.
Marathon和Aurora都是基于Mesos构建的,据称可以运行长期运行的服务.我的问题是:
谢谢!
到目前为止,我已经取得了巨大的成功,使用Mesos,Marathon和Docker来管理一系列服务器以及我正在放置的容器.但是,我现在想更进一步,开始做一些事情,比如自动将haproxy容器链接到每个启动的主要docker服务,或者提供其他基于守护进程和容器化的服务,这些服务是链接的,只能用于单个父容器.
通常情况下,我首先使用某个名称启动帮助程序服务,然后当我启动真正的服务时,我会将其链接到帮助程序,一切都会好的.这个模型如何适应Marathon和Mesos?至少现在看来,集装箱化是一个单一的集装箱.
我有一个想法,首先启动帮助程序服务,在它可以找到的任何主机上,然后向hostname =帮助程序服务的主机名的实际服务添加约束,但这似乎会导致资源提供和竞争条件的问题那些资源.
我还想过为docker或启动docker容器的执行程序脚本提供"嵌入"或"深层链接"功能.
在我走下任何这些路径之前,我想知道是否有其他人已经解决了这个问题,或者我是否只是在思考问题.
谢谢!
我正在尝试将Mesos奴隶连接到它的主人.当从属设备尝试连接到主设备时,我收到以下消息:
I0806 16:39:59.090845 935 hierarchical.hpp:528] Added slave 20150806-163941-1027506442-5050-921-S3 (debian) with cpus(*):1; mem(*):1938; disk(*):3777; ports(*):[31000-32000] (allocated: )
E0806 16:39:59.091384 940 socket.hpp:107] Shutdown failed on fd=25: Transport endpoint is not connected [107]
I0806 16:39:59.091508 940 master.cpp:3395] Registered slave 20150806-163941-1027506442-5050-921-S3 at slave(1)@127.0.1.1:5051 (debian) with cpus(*):1; mem(*):1938; disk(*):3777; ports(*):[31000-32000]
I0806 16:39:59.091747 940 master.cpp:1006] Slave 20150806-163941-1027506442-5050-921-S3 at slave(1)@127.0.1.1:5051 (debian) disconnected
I0806 16:39:59.091868 940 master.cpp:2203] Disconnecting slave 20150806-163941-1027506442-5050-921-S3 at slave(1)@127.0.1.1:5051 (debian)
I0806 16:39:59.092031 940 master.cpp:2222] Deactivating slave 20150806-163941-1027506442-5050-921-S3 at slave(1)@127.0.1.1:5051 (debian)
I0806 16:39:59.092248 939 hierarchical.hpp:621] Slave …
Run Code Online (Sandbox Code Playgroud) 我是Service Discovery和集群系统的新手.我开始尝试使用Mesos和Marathon来部署Docker容器,Marathon REST API和UI似乎做得很好.
我的问题是部署服务的实际发现.出于测试目的,我通过Marathon部署了一个缩放到3个实例的Kafka集群,因为我使用了MongoDB测试集群.Mesos-DNS客户端给我一个类似的记录kafka.marathon.mesos
,mongo.marathon.mesos
它暗示了从主机到容器的动态映射端口.问题是,我的客户端明确需要有关目标端口的信息.是否有一种通用方法可以自动和动态地从服务中获取这些端口信息?暴露多个端口的应用程序怎么样?
到目前为止我的想法: - 做一个REST调用以获取有关已部署应用程序的状态并以某种方式提取相关数据 - 执行DNS SRV查找并以某种方式提取相关数据 - 拥有某种"主",静态绑定到端口,拥有动态的"客户".
我搜索了很多这些信息,但最后大部分教程以手动查找结束,这不是我的目标.
我正在使用mesos + marathon + docker很长一段时间但我在某个时候陷入了困境.目前我尝试处理持久性容器,我尝试使用"volume-from"参数,但我无法使其工作,因为我不知道如何弄清楚要放入的数据框的名称它作为json的关键.我用这里的例子试了一下
{
"id": "privileged-job",
"container": {
"docker": {
"image": "mesosphere/inky"
"privileged": true,
"parameters": [
{ "key": "hostname", "value": "a.corp.org" },
{ "key": "volumes-from", "value": "another-container" },
{ "key": "lxc-conf", "value": "..." }
]
},
"type": "DOCKER",
"volumes": []
},
"args": ["hello"],
"cpus": 0.2,
"mem": 32.0,
"instances": 1
}
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何一种帮助:-)
我正在尝试用Marathon运行一次性任务.我能够让任务容器运行,但在任务命令完成后,马拉松运行另一个任务,依此类推.如何防止Marathon运行多个任务/命令?
或者,如果使用Marathon无法做到这一点,我该如何实现所需的行为?
当我将一个docker容器作为马拉松作业运行时,它会在active mesos slave系统中创建一个docker容器.当暂停或销毁docker作业时,我希望marathon应该删除docker容器,因为它不再需要.但容器不会被删除.每次马拉松重启docker容器作业时,我都必须手动删除它们.
有没有办法自动删除这些不需要的容器?
编辑: 添加json文件以启动马拉松作业
{
"id": "pga-docker",
"cmd":"sh pga-setup.sh",
"cpus": 0.5,
"mem": 1024.0,
"container": {
"type": "DOCKER",
"docker": {
"image": "pga:test",
"parameters": [
{ "key": "env", "value": "SERVER_HOST=value" },
{ "key": "env", "value": "SERVER_PORT=value" }
],
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 80, "hostPort": 0}
]
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个小的Mesos集群,我正在使用Marathon来管理一组长期运行的服务,每个服务具有可变数量的实例.
我希望能够根据业务需求启动新节点或终止其中一些节点.但是,当终止节点时,我意识到存在一个潜在的问题:当我关闭Mesos从站时,会发生某些服务的实例数暂时低于定义的数量minimumHealthCapacity
.例如,如果要停止的机器正在运行仅具有一个实例的服务,则可能导致一些停机.
请考虑以下简化方案:节点1正在运行服务A,节点2正在运行服务B而节点3正在运行服务C. minimumHealthCapacity
对于所有服务都是1.我想终止节点1并且只留下2和3运行.我不希望服务A停机.预期行为的一个例子是将服务A扩展到2然后安全地终止节点1.
我该怎么做才能确保没有服务低于minimumHealthCapacity
?
理想情况下,我会有一个滚动更新启发过程 - 替换是在单独的机器中启动,然后终止要关闭的机器中的服务.我希望至少有一个自动化的过程来做到这一点,所以缩小是一个简单的脚本.我没有要求花费这么多时间,即只有在我确定Marathon迁移完成并成功之后我才能关闭Mesos奴隶.
我正在用马拉松部署一个简单的hello world nginx容器,并且一切正常,除了我有6个不会从领事那里注销的容器。docker ps
显示没有容器在运行。
我尝试使用/v1/catalog/deregister
端点注销服务,但它们仍会返回。然后,我杀死了注册容器,并尝试再次注销。他们回来了。
我正在与
docker run -d --name agent-registrator -v /var/run/docker.sock:/tmp/docker.sock --net=host gliderlabs/registrator consul://127.0.0.1:8500 -deregister-on-success -cleanup
Run Code Online (Sandbox Code Playgroud)
有1个领事代理正在运行。
重新启动计算机(这是在本地vm上进行的单节点安装)不会使服务消失。
如何使这些容器消失?
marathon ×10
mesos ×8
docker ×5
mesosphere ×3
aurora ×1
consul ×1
dcos ×1
debian ×1
dns ×1
docker-swarm ×1
kubernetes ×1
linux ×1
registration ×1
virtualbox ×1