2016-05-12 7 views
1

私はMarathonを使用してDockerコンテナ化された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を使用しています。

メモリを解放してサーバーを再起動/シャットダウンせずにMarathonを再起動できるようにタスクを強制終了できますか?または、--net=hostを使用せずにDockerコンテナを外部にルーティングできるようにする他の方法はありますか?

答えて

1

基本的には、メモリリーク動作を示す場合、ノードアプリケーションに問題があると思います。それは私が取り組むべき最初の点です。

第2の問題は、アプリケーションのDockerイメージにpm2のようなものを使用して、問題が発生したときにアプリケーションを(コンテナ自体に)再起動することです。

さらに、Marathon health endpointを実装して、Marathonがアプリケーションに実際に問題があることを認識させることができます。

冗長性を実現するには、少なくとも2つのアプリケーションインスタンスを実行し、marathon-lbのようなロードバランサをMesos DNSとパブリックスレーブノードで使用することを強くお勧めします。 。これにより、必要に応じてブリッジネットワークを使用することもできます。

関連する問題