100の同一のDockerマシンをAWSで起動する最良の方法は?


7

システムで大規模なテストを行う必要があります。システムは、マネージャーとノードの2つの主要部分で構成されています。マネージャー・サーバーは1つだけですが、ノードは100になります。マネージャーとノードはどちらもDockerイメージです。

ノードの100のインスタンス(サーバーごとに1つのインスタンス)が開始されるAWSでセットアップを起動できるようにしたいと思います。

これには何を使用しますか?マネージャーとノードは一緒に通信できなければならず、ノードはいかなる方法でも負荷分散されるべきではありません。そのため、マネージャーが通信できる専用の内部IPが必要です。

ECSとCloudFormation + EC2をカスタムAMIで確認しましたが、どうすればよいかわかりません。

理想的には、サーバーを起動して簡単に閉じるために、たまに実行できるスクリプトが必要です。

このセットアップを簡単に開始するためにAWSで何ができるかに関する提案はありますか?

回答:


4

AWS Fargateを見てください。ECSクラスターのEC2インスタンスを起動することなく、Dockerコンテナーを実行できます。タスク(またはサービス)をスケジュールするだけで、それぞれが独自のIPアドレスを取得し、お互いに通信できます。

AWS Service Discoveryを使用して、タスクのIPアドレスの登録と検索を容易にすることもできます。

ところで、デフォルトのFargate同時実行制限は20タスク/サービスです-それらの100が必要な場合は、サービス制限増加サポートチケットを上げる必要があります。

処理は160以上のコンテナーを並列に実行するため、200の同時タスクに引き上げられました。すべて、Fargateで管理する単一のEC2なしで実行されます。

更新-100コンテナーを起動する方法

Fargateでそれ行う方法お話しします。CI/ CDパイプラインでコンテナイメージを作成し、ECRにアップロードします。ソースの一部はCloudFormation(CFN)テンプレートでもあり、パイプラインのDeploymentステージで、すべてのコンテナーパラメーターを使用してECS TaskDefinitionを作成するCFNスタックを作成/更新します。

次に、Pythonで記述され、CloudWatchイベント(cronのようなスケジューラー)によってトリガーされるスケジューラージョブを取得します。このジョブは、TaskDefinition ARNを検索し、その単一のTaskDefから160以上のタスクを実行します。各タスクに追加のパラメーターを与えるか、いくつかの設定などをオーバーライドできます。そうでない場合は、スピンアップしてください。

以前はEC2 / ECSを使用しており、最初に追加の手順を実行する必要がありました。まず、ECS AutoScalingグループを数十のノードにスケールアウトしてワークロードをサポートし、最後にそれを0にスケールダウンします。それ以外は同じです。 FargateまたはEC2 / ECSで実行します。

それが役に立てば幸い:)


Fargateも確認しましたが、ノードはシミュレーションを実行しているため、インスタンスのサイズを制御できないのが「悪い」のかどうかはわかりません。しかし、EC2 / EC2とECS / Fargateの初期設定は、EC2について考える必要がないことを除いて、ほとんど同じではありませんか?
トロリー

@Trolleyは、160以上のコンテナを起動する方法で回答を更新しました。
MLu 2018

@Trolley Fargateはコンテナ用にCPUとメモリを予約します-EC2と比較してFargateのパフォーマンスの低下は観察されませんでした。
MLu 2018

1

その目的でTerraformを使ってみませんか?必要なだけインスタンスを起動し、ネットワークを作成し、セキュリティグループ、ECS、IAMなど、作成したいものを何でも作成して、必要なときに簡単に終了できます。これは現在、業界で広く使用されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.