Amazon ECS の CPU 割り当てについて知っておくべきことは何ですか?

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) のタスクへの CPU の割り当てに関する情報を探しています。

簡単な説明

タスク定義を作成するときに、CPU リソースの制限を定義できます。これらの制限は、タスクレベルとコンテナレベルで定義できます。

Amazon ECS クラスターの全体的なパフォーマンスは、これらの制限に基づいて影響を受けます。Amazon ECS の動作とユースケースに応じて、CPU 割り当て値をタスクレベルとコンテナレベルで調整する必要があります。次の情報を使用して、ワークロードとアプリケーションの要件を満たす CPU の割り当てを判断します。

解決方法

Amazon ECS では、CPU ユニットと呼ばれる CPU リソースの標準的な測定単位を使用します。1024 CPU ユニットは 1 vCPU に相当します。

例えば、2048 CPU ユニットは 2 vCPU に相当します。

注: タスク定義を定義する場合、1024 ではなく 1 vCPU を使用することもできます。タスク定義が登録されると、ECS は値を単位に変換します。

タスクレベルの CPU の割り当て

Amazon ECS タスクは、AWS Fargate インスタンスまたは Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行できます。

タスクレベルで cpu パラメータを設定すると、タスク内のコンテナで許可される CPU リソースの最大量も設定されます。

AWS Fargate

AWS Fargate では、リクエストされたリソースをタスクに割り当てるために、タスクレベルで cpu パラメータが必要です。AWS Fargate で使用できる定義済みのタスクサイズから、memorycpu を選択できます。さまざまな組み合わせの詳細については、「AWS Fargate デベロッパーガイド」の「タスク CPU とメモリ」セクションを参照してください。

Amazon EC2

Amazon EC2 でタスクを実行する場合、cpu パラメータはオプションです。

cpu パラメータを定義する場合は、次の点を考慮してください。

  • コンテナのアクセスは、定義された cpu の量に基づいて制限されます。
  • cpu パラメータで定義される量は、コンテナインスタンスでスケジュールされるタスクの CPU 予約となります。
    : これはコンテナレベルの定義にも当てはまります。

例えば、次の設定を使用して Amazon EC2 で定義された cpu パラメータでは、プールに 1024 CPU ユニットが残ります。

  • コンテナインスタンスとして ECS クラスターに登録された m5.large EC2 インスタンス、合計 2048 CPU ユニット。
  • タスクレベルで cpu: 1024 が定義された 1 つのタスクがインスタンスで実行されています。
  • 現在のインスタンスの EC2 CPUUtilization は 68% です。

現在の CPUUtilization は、コンテナインスタンスでタスクのスケジューリングに使用できる CPU ユニットの数には影響しません。インスタンスの使用状況が 50% を超えた場合でも、プール内のユニットの半分は新しいタスクを開始するために使用できます。これは、パラメータが CPU 予約および制限としてのみ機能し、CPU 使用状況そのものには直接変換されないためです。

この例では、CPU のみを考慮すると、次のようないくつかの結果が生じる場合があります。

  • タスクレベルまたはコンテナレベルの定義で cpu: 512 を定義すると、さらに 2 つのタスクをスケジュールできます。
  • 2 つのコンテナを持つ 1 つのタスクをスケジュールできます。各コンテナでは、cpu: 1024 がタスクレベルで定義され、cpu: 512 がコンテナレベルで定義されます。
  • cpu が定義されていない場合は、選択したネットワークモードで ECS がサポートするタスクをいくつでもスケジュールできます。ECS コンテナインスタンスでスケジューリングに使用できる CPU ユニットには影響しません。

コンテナレベルの CPU の割り当て

コンテナレベルの cpu の定義は、次のシナリオで考慮されます。

スケジューリング時:

  • タスクレベルの cpu 定義が設定されていない場合、コンテナで定義されている CPU ユニットの合計量が CPU 予約となります。
  • cpu コンテナレベルの定義の CPU ユニットの合計数は、タスクレベルの割り当てで定義されている CPU ユニットより大きくすることはできません。

ランタイムで、CPU の競合は発生しません。

  • タスクレベルの cpu 定義が設定されている場合、コンテナはタスクレベルの cpu 定義の値までの cpu リソースにのみアクセスできます。
  • タスクレベルの cpu 定義が設定されていない場合、コンテナレベルで設定されている cpu 定義にかかわらず、タスク内のコンテナはインスタンスで使用可能なすべての CPU リソースにアクセスできます。
  • Windows タスクを使用していて、タスクレベルの cpu がサポートされていない場合、コンテナは、常にコンテナレベルの cpu の定義を上限とします。

CPU 競合は、複数のプロセスが cpu 時間をリクエストしている場合に発生します。CPU 競合が発生すると、コンテナはコンテナレベルの定義において、cpu で定義されたリソース量にスロットリングされます。

重要: ECS で実行しているアプリケーションがコンテナに対応しているかどうかを確認してください。Java 10 などの一部のアプリケーションは、コンテナに対応しており、CPU 競合の有無にかかわらず、コンテナレベルの cpu 定義で定義されている制限のみを使用します。

コンテナレベルの cpu 定義は、Create a Container remote docker API の CpuShares パラメータに直接マッピングされます。


関連情報

Amazon ECS のタスクにメモリを割り当てるにはどうすればよいですか?

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ