MESOS_DOCKER_REMOVE_DELAY=1hrs
MESOS_DOCKER_STOP_TIMEOUT=20secs
MESOS_DOCKER_STORE_DIR=/var/lib/mesos/slave/store/docker
MESOS_GC_DELAY=2days
MESOS_HOSTNAME_LOOKUP=false
GLOG_drop_log_memory=false
默認(rèn)的mesos-containerizer的隔離只包括cpu和memory,然而在最新的mesos版本里面,多了provisioner這一層,在上面的配置里面隔離了MESOS_ISOLATION=cgroups/cpu,cgroups/mem,disk/du,network/cni,filesystem/linux,docker/runtime,docker/volume,從而可以啟動docker的鏡像了。
第二個最重要的功能是CNI, container network interface。

CNI要工作需要三部分:
首先DC/OS不需要外置的IPAM,而是由mesos-master的replicated_log負(fù)責(zé)管理分配IP地址,Mesos需要啟動的時候,載入overlay network的modules。
在路徑/opt/mesosphere/etc/mesos-slave-modules下面有文件overlay_slave_modules.json
ip-10-0-1-78 mesos-slave-modules # cat overlay_slave_modules.json
{
"libraries":
[
{
"file": "/opt/mesosphere/active/mesos-overlay-modules/lib/mesos/libmesos_network_overlay.so",
"modules":
[
{
"name": "com_mesosphere_mesos_OverlayAgentManager",
"parameters" :
[
{
"key": "agent_config",
"value" : "/opt/mesosphere/etc/overlay/config/agent.json"
}
]
}
]
}
]
}
其次需要載入CNI isolator,這個在MESOS_ISOLATION這個環(huán)境變量里面已經(jīng)配置了。
最后還需要navstar服務(wù)來實(shí)現(xiàn)跨節(jié)點(diǎn)之間的IP互訪問
每個mesos-agent的機(jī)器上都有opt/mesosphere/packages/navstar--589afdaef03114a17576ee648ae433a052f7a4b9/,都會運(yùn)行一個navstar進(jìn)程。
每個機(jī)器上都會創(chuàng)建網(wǎng)卡d-dcos,如果Docker容器使用CNI獲取IP的容器都Attach到這個網(wǎng)卡上,而非docker0上。
每個機(jī)器上都會創(chuàng)建網(wǎng)卡m-dcos,如果mesos容器使用CNI獲取IP的容器都Attach到這個網(wǎng)卡上。
每臺機(jī)器的d-dcos和m-dcos的網(wǎng)段都不同。
每臺機(jī)器都會創(chuàng)建一個vtep1024的網(wǎng)卡,作為VTEP,背后是vxlan。
每臺機(jī)器都會創(chuàng)建默認(rèn)的路由表,從本節(jié)點(diǎn)連接到其他的節(jié)點(diǎn)默認(rèn)走vtep1024這個網(wǎng)卡。
9.0.0.0/24 via 44.128.0.1 dev vtep1024
9.0.1.0/24 via 44.128.0.2 dev vtep1024
9.0.3.0/24 via 44.128.0.4 dev vtep1024
對DC/OS的網(wǎng)絡(luò)的配置在/opt/mesosphere/etc/dcos/network/cni路徑下

為了試驗(yàn)這兩個新的功能,我們首先創(chuàng)建一個使用CNI的Mesos容器,但是啟動的是Docker的Image nginx
{
"id":"nginxmesos",
"cmd":"env; ip -o addr; sleep 3600",
"cpus":0.10,
"mem":512,
"instances":1,
"ipAddress":{
"networkName":"dcos"
},
"container":{
"type":"MESOS",
"docker":{
"network":"USER",
"image":"nginx",
"portMappings":[
{
"host_port": 0,
"container_port": 80,
"protocol": "tcp"
}
]
}
}
}
在日志里面,打印出來容器的IP地址是m-dcos網(wǎng)段的。

然后我們再啟動一個使用CNI的Docker容器
{
"id":"nginxmesos1",
"cmd":"env; ip -o addr; sleep 3600",
"cpus":0.10,
"mem":512,
"instances":1,
"ipAddress":{
"networkName":"dcos"
},
"container":{
"type":"DOCKER",
"docker":{
"network":"USER",
"image":"nginx",
"portMappings":[
{
"host_port": 0,
"container_port": 80,
"protocol": "tcp"
}
]
}
}
}
從日志我們看出,配置的IP是d-dcos網(wǎng)段的,而非docker0網(wǎng)段的。
