【发布时间】:2017-05-23 15:38:51
【问题描述】:
我正在尝试将容器部署到由多个节点组成的分布式系统上,最终目标是让每个容器都绑定到自己特定的可路由 IP 地址。这是因为我想为我的 docker 容器使用硬件负载均衡器,这需要单独的 IP 地址。
我可以通过使用 docker 命令行工具来启动在具有多个网络接口(eth0:0、eth0:1、eth0:2、eth1、eth2、eth3 等)的服务器上运行的容器,从而实现具有可路由 IP 地址的容器。 .) 每个都有自己的可路由 IP 地址。然后,每个容器可以使用特定的-p 选项将自己附加到其中一个接口的可用 IP 地址。
例如,如果我在eth0:2 上有一个IP 为1.2.3.4,我想附加一个nginx 容器,我可以使用以下命令附加它:
docker run -d -p 1.2.3.4:80:80 nginx
这样做的限制是每个运行 docker 的实例都有一个特定的可路由 IP 地址池。我的编排工具必须只能使用该池中的 IP 地址,并且每个 IP 地址只能使用一次。 (不用担心这个扩展问题,更多的 IP 地址总是可以从一个 openstack 管理节点添加)。
到目前为止,我一直尝试使用 docker swarm 1.12 来实现这一点,使用 docker 服务,但很明显,这不是该编排工具的预期用例。
所以我正在寻找一种新的编排工具,它可以让我执行以下操作:
- 将多台服务器上的 docker 容器绑定到特定的 IP 地址,在创建 docker 容器时定义。
- 知道每台服务器都有一个特定的 IP 地址池可供选择,并且知道每个节点上的池都不同。
- 不会覆盖自身并尝试将两个正在运行的容器绑定到同一个 IP 地址。
它还必须提供容器编排工具的一些更常见的方面,例如:
- 在发生节点故障时提供自动容器重新调度。
- 提供自我修复,创建新容器来替换已死亡的旧容器。
- 为容器部署提供一个简单的系统。
我还应该注意,我的每台服务器也是 consul 集群的一部分。对我来说,根据我非常具体的网络要求,似乎最好的解决方案是结合使用 consul watch、consul 健康检查和 consul 键值来管理整个系统(可能使用旧的容器化版本的 docker swarm)在每个运行 docker 的实例上运行个人编写的脚本,以确定任何一台服务器应该采取的正确行动。
但是,出于我的目的,我宁愿使用通用的容器编排工具。所以我想知道是否有任何其他容器编排工具(如 mesos、kubernetes、nomad 等)允许这种级别的 docker 端口映射定制?还是我最好只使用自定义领事健康检查和手表?
另外请注意,我在私有的 openstack 云中运行我的系统,在 ubuntu 14.04 服务器上(所以舰队不是一个选项)。
【问题讨论】:
-
这对于DevOps proposal 来说可能是一个很好的问题,因为您正在尝试解决具体的部署问题。
-
好的,我已经标记了要移动的帖子。
-
DevOps 站点“仅”处于提案阶段,因此您不能将帖子移到那里,但也许您可以在 cmets 中添加您的问题标题和指向该问题的链接。
标签: docker consul orchestration docker-networking