Marathon 启动的(docker 容器)服务实例的 Mesos 从属 IP

Marathon 启动的(docker 容器)服务实例的 Mesos 从属 IP

我有一个 docker 镜像,我想通过 Mesos/Marathon 启动几个实例。

我在 docker 中使用 BRIDGE 网络,我想通过 env var 或 param 将启动容器的 mesos 从属/docker 主机的“公共”(即不是容器的 docker0 net)地址传递给启动容器,这样我可以在应用程序响应中宣传这个 ip(该应用程序是一个 Cassandra 节点,我将用broadcast_address这个地址填充 cassandra.yaml)

我的理解是,我可以让 Mesos 将此地址上的任何特定端口(在配置的范围内)转发回我正在运行的容器的 docker0 地址。如果这是真的,并且我可以确保应用程序实例(Cassandra 节点)不会从此从属节点移出,那么在几个约束条件下,我可以拥有一个 mesos-scheduled Cassandra 集群。

我的问题是:在启动 Marathon 应用程序实例时,如何将从属(docker 主机)ip 地址获取到其中?

答案1

在 Marathon 找到适合该任务的主机之前,您不知道 IP 地址。但是,在 Mesos 从属节点启动任务时,一些属性存储在 ENV 变量中:

...
ULIMIT=-n 8192
HOST=slave01.example.com
MESOS_SLAVE_PID=slave(1)@192.168.1.2:5051
MARATHON_APP_RESOURCE_CPUS=0.1
MESOS_TASK_ID=dummy.eb6e1d9a-c2f0-11e5-a58b-00259057db2f

如果您对主机名满意,则可以使用HOST变量或从中提取 IP 地址MESOS_SLAVE_PID

如果mesos-slave以开头--ip=192.168.1.2,则HOSTLIBPROCESS_IPENV 变量都将设置为主机的地址。对于 Mesosphere 包:

echo "192.168.1.2" > /etc/mesos-slave/ip

并重新启动从站。

另一个选择是解析 Docker 容器内的代理 IP:

AGENT_IP=$(getent hosts ${HOST} | awk '{ print $1 }')

相关内容