web-dev-qa-db-ja.com

Amazon ECSクラスターを理解する方法

最近、AWSによるタスク定義を使用してDockerコンテナーをデプロイしようとしました。途中で、次の質問に出くわしました。

  1. クラスターにインスタンスを追加するにはどうすればよいですか? Amazon ECSコンソールを使用して新しいクラスターを作成するときに、新しいクラスターに新しいec2インスタンスを追加する方法。つまり、新しいec2インスタンスを起動するときに、Amazon ECSでユーザーが作成したクラスターにインスタンスを割り当てるために必要な構成は何ですか。

  2. クラスターにはいくつのECSインスタンスが必要ですか?その要因は何ですか?

  3. クラスターに2つのインスタンス(ins1、ins2)があり、webappがある場合、dbコンテナーはins1で実行されています。実行中のサービスを更新した後( http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/update-service.html を使用)、新しく作成したサービスが実行中であることがわかります「ins2」、「ins1」の古いサービスをドレインする前。私の質問は、私のwebappコンテナーが別のインスタンスに割り当てられた後、アクセスIPアドレスが別のインスタンスIPになることです。同じIPアドレスをwebappにアクセスさせないようにする方法または解決策IPだけでなく、新しいインスタンスに変更した後のデータはどうですか?

25
Allan Jiang

これらは実際には3つのかなり異なる質問であるため、ここではそれらを異なる質問に分割することをお勧めします-私は関係なく回答を提供しようとします:

  1. Amazon ECSコンテナインスタンス は間接的に追加されます。これは、 Amazon ECSコンテナエージェント で作成され、名前が付けられたクラスタに自身を登録することです。 コンセプト および ライフサイクルを参照してください 詳細については。これを機能させるには、 Amazon ECSコンテナインスタンスの起動 で概説されている手順に従う必要があります。手動でも自動化でもかまいません。ステップ10に注意してください。

デフォルトでは、コンテナインスタンスはデフォルトのクラスタで起動します。デフォルトではなく独自のクラスターで起動する場合は、[詳細]リストを選択し、次のスクリプトを[ユーザーデータ]フィールドに貼り付けます。your_cluster_nameはクラスターの名前に置き換えます。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
  1. クラスター自体はAWSがユーザーに代わって管理するため、ECSがそのように機能するために必要なインスタンスは1つだけです。ただし、これは高可用性シナリオでは十分ではありません。

    • コンテナーホストは通常​​のAmazon EC2 インスタンスなので、AWSのベストプラクティスに従い、それらを2つまたは3つに分散する必要があります アベイラビリティーゾーン(AZ) AZの(まれな)停止が発生しないようにしますECSはコンテナーを別のホストインスタンスに移行できるため(クラスターに十分な予備容量がある場合)、クラスターに影響を与えません。
    • コンテナを促進する多くの高度なクラスタリングテクノロジーには独自のサービスオーケストレーションレイヤーがあり、通常、高可用性の設定には3以上の不均等な数の(サービス)インスタンスが必要です。この詳細については、セクション最適なクラスターサイズ内の 管理 などを参照してください( AWS EC2 Container ServiceでCoreOSを実行する も参照)。
  2. これは、2。で述べた高可用性とサービスオーケストレーションのトピックをさかのぼります。すでに、より正確には、 サービスディスカバリ の問題に直面しています。

35
Steffen Opel