通过mesos-marathon部署容器化的node.JS应用程序

时间:2016-05-12 07:37:52

标签: node.js docker mesos marathon

我正在使用Marathon来部署我的Docker容器化node.js应用程序。我的Marathon app规范如下:

 {
  "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 个答案:

答案 0 :(得分:1)

基本上,我认为Node应用程序存在问题,如果它显示内存泄漏行为。这是我要解决的第一点。

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

此外,您可以实现Marathon health endpoint,以便Marathon可以识别应用程序确实存在问题。

为了达到一定的冗余度,我强烈建议您运行至少两个应用程序实例,并在公共从属节点上使用Mesos DNSmarathon-lb之类的负载均衡器(s ),它将负责路由。如果您愿意,这也允许您使用桥接网络。