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
默认的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负责管理分配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这个环境变量里面已经配置了。
最后还需要navstar服务来实现跨节点之间的IP互访问
每个mesos-agent的机器上都有opt/mesosphere/packages/navstar--589afdaef03114a17576ee648ae433a052f7a4b9/,都会运行一个navstar进程。
每个机器上都会创建网卡d-dcos,如果Docker容器使用CNI获取IP的容器都Attach到这个网卡上,而非docker0上。
每个机器上都会创建网卡m-dcos,如果mesos容器使用CNI获取IP的容器都Attach到这个网卡上。
每台机器的d-dcos和m-dcos的网段都不同。
每台机器都会创建一个vtep1024的网卡,作为VTEP,背后是vxlan。
每台机器都会创建默认的路由表,从本节点连接到其他的节点默认走vtep1024这个网卡。
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的网络的配置在/opt/mesosphere/etc/dcos/network/cni路径下
为了试验这两个新的功能,我们首先创建一个使用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网段的。
然后我们再启动一个使用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网段的,而非docker0网段的。