dcos 作为运行docker的底层支撑平台, 是我们的工作量减少不少,但是由于docker数量众多,即使有了overlay的网络,可是ip地址呀端口号呀那么多,我们可如何是好呢?
对喽,这个时候 marathon-lb就出现了,大致过程如下:
1. 我们运行docker, 打出一个随机端口A,而且告知zk我们希望我们拥有哪个端口B可以被别人访问
2. marathon-lb 会去zk找这个端口B,然后作为负载均衡设备,供别人访问lb的B端口导向实际appdocker的B端口
3. 那么ip地址是哪个来,marathon-lb在运行后,会在zk进行注册,域名 marathon-lb-internal.marathon.mesos或者其他的域名,不错吧,当然解析需要把本地的nslookup server指向 dcos master。
APP docker的配置json
{
"id": "nginx-internal",
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx:1.9.14",
"network": "BRIDGE",
"portMappings": [
{ "hostPort": 0, "containerPort": 80, "servicePort": 10001 }
],
"forcePullImage":true
}
},
"instances": 1,
"cpus": 0.1,
"mem": 65,
"healthChecks": [{
"protocol": "HTTP",
"path": "/",
"portIndex": 0,
"timeoutSeconds": 10,
"gracePeriodSeconds": 10,
"intervalSeconds": 2,
"maxConsecutiveFailures": 10
}],
"labels":{
"HAPROXY_GROUP":"internal"
}
}
# 内外部-nginx
{
"id": "nginx-everywhere",
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx:1.7.7",
"network": "BRIDGE",
"portMappings": [
{ "hostPort": 0, "containerPort": 80, "servicePort": 10002 }
],
"forcePullImage":true
}
},
"instances": 1,
"cpus": 0.1,
"mem": 65,
"healthChecks": [{
"protocol": "HTTP",
"path": "/",
"portIndex": 0,
"timeoutSeconds": 10,
"gracePeriodSeconds": 10,
"intervalSeconds": 2,
"maxConsecutiveFailures": 10
}],
"labels":{
"HAPROXY_GROUP":"external,internal"
}
}
marathon-lb-internal的json
# 做一个internal marathon-lb
{
"marathon-lb":{
"name":"marathon-lb-internal",
"haproxy-group":"internal",
"bind-http-https":false,
"role":""
}
}
dcos package install --options=options.json marathon-lb
测试
curl http://marathon-lb-internal.marathon.mesos:10001/
- marathon-lb-internal的管理地址
- marathon-lb-internal.marathon.mesos:9090/haproxy?stats