mesos容器映射端口限制

mesos 容器映射端口限制

介绍

mesos 在启动容器的时候,理念是容器内的端都映射到宿主的随机端口。
在容器的时代,其实这样的理念是很好,当容器多的时候,固定端口肯定是有一定的局限性的。可以通过注册中心、mesos-dns、marathon-lb等服务来找到你要的服务地址和端口。
但是有时候有一些服务需要一些固定端口。比如cadvisor、还有我们自己写的容器,可能会映射一些其他端口。

默认端口限制

默认mesos的端口也是可以指定的,只是范围比较小。

1
31000 - 32000

marahotn 的json 文件中,你可以写。

1
2
3
4
5
6
7
8
"portMappings": [
{
"containerPort": 80,
"hostPort": 31000, # 一般设置 0 为随机端口,
"servicePort": 0,
"protocol": "tcp"
}
]

docker 启动时候就是

1
2
3
[root@test00 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70314cd31714 nginx-nettools:1.13 "nginx -g 'daemon ..." 24 minutes ago Up 24 minutes 443/tcp, 0.0.0.0:31000->80/tcp mesos-07a768f1-f635-4517-9b60-4e86bfef658e

配置mesos

yum 安装的meoss 添加配置

1
echo "ports(*):[1024-65534]" > /etc/mesos-slave/resources

重启 mesos-slave 服务

1
systemctl restart mesos-slave

二进制安装的mesos 在启动命令中添加

1
--resources=ports(*):[1024-65534]

这样你的端口就是在 1024 - 65524 中间随意指定了。

测试

marathon json文件

1
2
3
4
5
6
7
8
"portMappings": [
{
"containerPort": 80,
"hostPort": 8080,
"servicePort": 0,
"protocol": "tcp"
}
]

docker 启动时候是

1
2
3
[root@test00 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1235513ee658 nginx-nettools:1.13 "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 443/tcp, 0.0.0.0:8080->80/tcp mesos-655d4923-0d1f-4130-8d61-aab824df3f25-S13.9e0c2cfb-3d07-467f-ac47-08e492703263

Q&A

如果mesos上运行过容器,在你修改配置文件之后重启会有问题。

1
2
3
4
你可以通过
journalctl -xe

查看mesos的log日志 找到问题

解决方法: 日志中会有提示

1
2
3
4
To remedy this do as follows:
Step 1: rm -f /home/mtime/mesos/meta/slaves/latest
This ensures agent doesn't recover old live executors.
ep 2: Restart the agent.

rm -f /home/mtime/mesos/meta/slaves/latest
删除之后在重启即可。

感谢您的支持!