【问题标题】:Deploying containerised node.JS application through mesos-marathon通过 mesos-marathon 部署容器化的 node.JS 应用
【发布时间】:2016-05-12 18:42:46
【问题描述】:

我正在使用 Marathon 部署我的 Docker 容器化 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 可以在不重新启动/关闭服务器的情况下重新生成它?或者有没有其他方法可以在不使用--net=host 的情况下使 Docker 容器可路由到外部世界?

【问题讨论】:

    标签: node.js docker mesos marathon


    【解决方案1】:

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

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

    此外,您可以实现Marathon health endpoint,以便 Marathon 能够识别出应用程序实际上存在问题。

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

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多