2016-05-12 4 views
1

Я использую марафон для развертывания моего приложения-контейнера node.js для докеров. Мой марафон приложение спецификация выглядит следующим образом:Развертывание контейнеризованного приложения node.JS через mesos-marathon

{ 
    "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.

Можно ли просто убить задачу, освобождая память, чтобы марафон мог повторно запустить ее без перезапуска/остановки сервера? Или есть ли другой способ сделать контейнер Docker маршрутизируемым во внешний мир без использования --net=host?

ответ

1

В принципе, я думаю, что есть проблема с приложением Node, если он показывает поведение утечки памяти. Это первый пункт, который я бы назвал.

Во-вторых, вы должны использовать что-то вроде pm2 в изображении Docker вашего приложения, которое позаботится о перезапуске вашего приложения (в самом контейнере), когда у него возникнет проблема.

Кроме того, вы можете реализовать Marathon health endpoint, чтобы марафон мог распознать, что приложение действительно имеет проблемы.

Для достижения некоторой избыточности, я настоятельно рекомендую вам работать по крайней мере два экземпляр приложения, и использовать Mesos DNS и балансировку нагрузки, как marathon-lb на узле (ах) общественных подчиненного, который будет заботиться о маршрутизации , Это также позволяет использовать мостовую сеть, если хотите.