介绍
mesos 在启动容器的时候,理念是容器内的端都映射到宿主的随机端口。
在容器的时代,其实这样的理念是很好,当容器多的时候,固定端口肯定是有一定的局限性的。可以通过注册中心、mesos-dns、marathon-lb等服务来找到你要的服务地址和端口。
但是有时候有一些服务需要一些固定端口。比如cadvisor、还有我们自己写的容器,可能会映射一些其他端口。
默认端口限制
默认mesos的端口也是可以指定的,只是范围比较小。
31000 - 32000
marahotn 的json 文件中,你可以写。
"portMappings": [
{
"containerPort": 80,
"hostPort": 31000, # 一般设置 0 为随机端口,
"servicePort": 0,
"protocol": "tcp"
}
]
docker 启动时候就是
[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 添加配置
echo "ports(*):[1024-65534]" > /etc/mesos-slave/resources
重启 mesos-slave 服务
systemctl restart mesos-slave
二进制安装的mesos 在启动命令中添加
--resources=ports(*):[1024-65534]
这样你的端口就是在 1024 - 65524 中间随意指定了。
测试
marathon json文件
"portMappings": [
{
"containerPort": 80,
"hostPort": 8080,
"servicePort": 0,
"protocol": "tcp"
}
]
docker 启动时候是
[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上运行过容器,在你修改配置文件之后重启会有问题。
你可以通过
journalctl -xe
或
查看mesos的log日志 找到问题
解决方法: 日志中会有提示
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
删除之后在重启即可。
我的 github 博客https://sukbeta.github.io/mesos-container-port-limit/
网友评论