我正在使用marathon部署docker containerised node.js应用程序。我的马拉松应用程序规范如下:
{
"id": "<some-name>",
"cmd": null,
"cpus": 1,
"mem": 2800,
"disk": 30720,
"instances": 1,
"container": {
"docker": {
"image": "<some-docker-registry-IP>:5000/<repo>",
"network": "BRIDGE",
"privileged": true,
"forcePullImage": true,
"parameters": [
{
"key": "net",
"value": "host"
}
],
"portMappings": [
{
"containerPort": <some-port>,
"hostPort": <some-port>,
"protocol": "tcp",
"name": null
}
]
},
"type": "DOCKER"
}
}
但问题是,一旦内存不足,就会重新启动部署应用程序的服务器。我需要我的服务来监听主机的私有ip,这就是我使用 --net=host
.
是否可以通过释放内存来终止任务,以便marathon可以在不重新启动/关闭服务器的情况下重新生成它?或者有没有其他方法可以让docker容器无需使用 --net=host
?
1条答案
按热度按时间yrwegjxp1#
基本上,如果节点应用程序显示内存泄漏行为,我认为它有问题。这是我要说的第一点。
第二种方法是在应用程序的docker映像中使用类似pm2的东西,当应用程序遇到问题时,它将负责重新启动应用程序(在容器本身中)。
此外,您可以实现一个marathon健康端点,以便marathon能够识别应用程序实际存在的问题。
为了达到一些冗余,我强烈建议您至少运行两个应用程序示例,并在公共从属节点上使用mesos dns和类似marathon lb的负载平衡器,它们将负责路由。这也允许您使用桥接网络,如果你想。