0

我正在尝试将容器部署到多个节点的分布式系统上,最终目标是将每个容器绑定到其自己的特定可路由 IP 地址。这是因为我想为我的 docker 容器使用硬件负载均衡器,这需要单独的 IP 地址。

我可以通过使用 docker 命令行工具来启动在具有多个网络接口(eth0:0.eth0:1、eth0:2、eth1、eth2、eth3 等)的服务器上运行的容器,从而实现具有可路由 IP 地址的容器其中有自己的可路由 IP 地址。然后,每个容器都可以使用特定-p选项将自己附加到其中一个接口的可用 IP 地址。

例如,如果我有一个 IP 1.2.3.4eth0:2我想将一个 nginx 容器附加到我可以使用以下命令附加它:

docker run -d -p 1.2.3.4:80:80 nginx

这样做的限制是每个运行 docker 的实例都有一个特定的可路由 IP 地址池。我的编排工具必须只能使用该池中的 IP 地址,并且每个 IP 地址只能使用一次。(不要担心这个扩展问题,更多的 IP 地址总是可以从一个 openstack 管理节点添加)。

到目前为止,我已经尝试使用 docker swarm 1.12 来实现这一点,使用 docker 服务,但很明显这不是该编排工具的预期用例。

因此,我正在寻找一种新的编排工具,它可以让我执行以下操作:

  1. 将多个服务器上的 docker 容器绑定到特定的 IP 地址,在创建 docker 容器时定义。
  2. 知道每台服务器都有一个特定的 IP 地址池可供选择,并且知道每个节点上的池都是不同的。
  3. 不会覆盖自身并尝试将两个正在运行的容器绑定到同一个 IP 地址。

它还必须提供容器编排工具的一些更常见的方面,例如:

  1. 在节点发生故障时提供自动容器重新调度。
  2. 提供自我修复,创建新容器以替换已死亡的旧容器。
  3. 提供一个简单的容器部署系统。

我还应该注意,我的每台服务器也是领事集群的一部分。对我来说,根据我非常具体的网络要求,似乎最好的解决方案是结合使用 consul watch、consul 健康检查和 consul 键值来管理整个系统(可能使用旧的容器化版本的 docker swarm)在每个运行 docker 的实例上运行个人编写的脚本,以确定任何一台服务器应采取的正确行动。

但是,出于我的目的,我宁愿使用通用的容器编排工具。所以我想知道是否有任何其他容器编排工具(如 mesos、kubernetes、nomad 等)允许这种级别的 docker 端口映射定制?还是我最好只使用自定义领事健康检查和手表?

另请注意,我在私有 openstack 云中运行我的系统,在 ubuntu 14.04 服务器上(所以舰队不是一个选项)。

4

1 回答 1

-1

检查Docker 群

https://docs.docker.com/swarm/

Kubernetes

http://kubernetes.io/docs/

于 2016-07-18T08:13:59.177 回答