2017-11-27 11 views
0

Dockerコンテナで約100種類のアプリケーションを実行する必要がある状況に直面しています。 1つのハードウェアで100個のコンテナをすべて実行するのは妥当ではないので、複数のマシンにアプリケーションを分散する必要があります。 私が理解している限り、docker-swarmはスケーリング専用です。つまり、コンテナをコンマで走らせると、100個のコンテナすべてが自動的に展開され、ドッカーのすべてのノードで開始されます。しかし、これは私が探しているものではありません。私はアプリケーションを分割し、例えばノード1で50、ノード2で50を実行したいと考えています。Docker-Swarmはフェールオーバーモードでのみ動作できますか?

質問1: 私のアプリケーションは自動的に最もアイドリングリソースを持つノードに派遣される方法でドッカ - 群れを構成するための方法はありますか?

質問2: 1つのノード上のコンテナを停止し、何かがうまくいかない場合には、別の上にそれを起動しようとすることができるドッキングウィンドウの群れでのフェイルオーバー・モードのようなものがありますか?

答えて

1

すべての100のコンテナが自動的に展開され、私のドッキングウィンドウ-群れこれは真実ではありません

のすべてのノード上で開始されます。群れに100のコンテナを配置すると、コンテナは群れの利用可能なノードに分散されます。ほとんどの場合、すべてのノードにコンテナを均等に配布します。

質問1:私のアプリケーションが最もアイドル状態のリソースを持つノードに自動的にディスパッチされるような方法で、docker-swarmを設定する方法はありますか?

Docker swarmは、コンテナをコンテナに展開する前にノードで使用可能なリソース(メモリ、CPUなど)をチェックしません。コンテナの分散は、各ノードのリソースの可用性を考慮せずに、ノードごとにバランスが取れています。

しかし、ノードにコンテナを配布する戦略を構築することはできます。 placement constraintsを使用すると、コンテナの展開先を制限できます。多くのリソースを持つノードにラベルを付けることができ、いくつかの重いコンテナーをこれらのノードでのみ実行するように制限できます。

質問2:1つのノードでコンテナを停止し、何か問題が発生した場合に別のノードでコンテナを停止しようとする、ある種のフェールオーバーモードがありますか?

コンテナがクラッシュした場合、ドッカーの群は新しいコンテナが確実に開始されます。ここでも、新しいコンテナをどのノードに展開するかの決定は事前に決定できません。

+0

これは、サービスの倍率が各ノードで同じ数のインスタンスを開始しないことを意味しますか?少なくともスケールファクタによって定義されたインスタンスの数は、私のノードにも分散されますか?例えば。私は4つのノードと1つのサービスのスケールファクタが2に設定されている場合、要約すると正確に2つのコンテナが4つのノードで実行されますか? – Ralph

+0

@Ralphはい、そうです。 – yamenk

+0

あなたの答えをありがとう。私は以前に[Swarm mode key concepts](https://docs.docker.com/engine/swarm/key-concepts/)を読んでいたはずです。 – Ralph

関連する問題