0

各コンテナを独自の特定のルーティング可能な IP アドレスにバインドすることを最終目標として、いくつかのノードの分散システムにコンテナを展開しようとしています。これは、個々の IP アドレスを必要とする Docker コンテナーにハードウェア ロード バランサーを使用したいという事実によるものです。

docker コマンド ライン ツールを使用して、複数のネットワーク インターフェイス (eth0:0、eth0:1、eth0:2、eth1、eth2、eth3 など) を持つサーバー上で実行されているコンテナーを起動することで、ルーティング可能な IP アドレスを持つコンテナーを実現できます。そのうち、独自のルーティング可能な IP アドレスがあります。その後、各コンテナーは、特定のオプションを使用して、インターフェイスの 1 つの利用可能な IP アドレスに接続でき-pます。

たとえば、nginx コンテナーをアタッチしたい1.2.3.4onの IP がある場合、次のコマンドでアタッチできます。eth0:2

docker run -d -p 1.2.3.4:80:80 nginx

これの制限は、docker を実行しているインスタンスごとにルーティング可能な IP アドレスの特定のプールがあることです。オーケストレーション ツールは、そのプールの IP アドレスのみを使用でき、各 IP アドレスを 1 回だけ使用できる必要があります。(これのスケーリングの問題について心配する必要はありません。より多くの IP アドレスは、openstack 管理ノードからいつでも追加できます)。

これまで、docker サービスを使用して docker swarm 1.12 でこれを達成しようとしましたが、これがそのオーケストレーション ツールの意図した使用例ではないことは明らかです。

そこで、次のことができる新しいオーケストレーション ツールを探しています。

  1. 複数のサーバー上の docker コンテナーを、docker コンテナーの作成時に定義された特定の IP アドレスにバインドします。
  2. 各サーバーには、選択できる特定の IP アドレスのプールがあること、およびプールがノードごとに異なることを理解してください。
  3. 自分自身をオーバーライドせず、実行中の 2 つのコンテナーを同じ IP アドレスにバインドしようとします。

また、次のようなコンテナ オーキストレーション ツールのより一般的な側面も提供する必要があります。

  1. ノードに障害が発生した場合に、コンテナーの自動再スケジュールを提供します。
  2. 新しいコンテナが作成されて、死んでしまった古いコンテナを置き換える自己修復を提供します。
  3. コンテナ展開用のシンプルなシステムを提供します。

また、各サーバーは領事クラスターの一部でもあることに注意してください。私の非常に具体的なネットワーク要件に基づいて、最善の解決策は、consul ウォッチ、consul ヘルスチェック、consul キー値を組み合わせてシステム全体を管理することであると思われます (コンテナ化された古いバージョンの docker を使用する可能性があります)。 swarm) を使用して、docker を実行している各インスタンスで個人的に作成されたスクリプトを実行し、1 つのサーバーが実行すべき適切なアクション コースを決定します。

ただし、目的のためには一般的なコンテナ オーケストレーション ツールを使用したいと考えています。他のコンテナ オーケストレーション ツール (mesos、kubernetes、nomad など) でこのレベルの Docker ポート マッピングのカスタマイズが可能かどうかを知りたいですか? それとも、カスタムの領事ヘルス チェックとウォッチを使用したほうがよいのでしょうか?

また、ubuntu 14.04 サーバー上のプライベート openstack クラウドでシステムを実行していることにも注意してください (フリートはオプションではありません)。

4

1 に答える 1