2016-05-12 41 views
1

我使用Marathon部署我的Docker集装箱化的node.js应用程序。我的马拉松应用的规格如下:通过mesos-marathon部署集装箱化的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

基本上,我认为如果Node应用程序显示内存泄漏行为,那么您的Node应用程序有问题。这是我要说的第一点。

第二个问题是,您应该在您的应用程序的Docker镜像中使用类似pm2的东西,这将在您遇到问题时重新启动应用程序(在容器本身中)。

此外,您可以实现Marathon health endpoint,以便Marathon可以识别应用程序确实存在问题。为了达到一定的冗余度,我强烈建议您至少运行两个应用程序实例,并在公共从属节点上使用Mesos DNS和负载平衡器,如marathon-lb,这将负责路由。这也可以让你使用桥接网络,如果你想。

相关问题