Networking
Marathon 啟動(docker 容器)服務實例的 Mesos 從 IP
我有一個 docker 映像,我想通過 Mesos/Marathon 啟動幾個實例。
我在 docker 中使用 BRIDGE 網路,我想通過 env 將正在啟動容器的 mesos slave / docker 主機的“公共”(即不是容器的 docker0 網路)地址傳遞給啟動容器var 或 param,所以我可以在應用程序響應中宣傳這個 ip(應用程序是一個 Cassandra 節點,我將
broadcast_address
在 cassandra.yaml 中填充這個地址)我的理解是,我可以讓 Mesos 將此地址上的任何特定埠(在配置範圍內)轉發回我正在執行的容器的 docker0 地址。如果這是真的,並且我可以確保應用程序實例(Cassandra 節點)不會從該從屬設備中移出,但有一些限制,我可以擁有一個 mesos 調度的 Cassandra 集群。
我的問題是:如何在啟動 Marathon 應用程序實例時獲取從屬(docker 主機)IP 地址?
在 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
則HOST
和LIBPROCESS_IP
ENV 變數都將設置為主機地址。對於 Mesosphere 包:echo "192.168.1.2" > /etc/mesos-slave/ip
並重新啟動奴隸。
另一種選擇是在 Docker 容器中解析代理的 IP:
AGENT_IP=$(getent hosts ${HOST} | awk '{ print $1 }')