web-dev-qa-db-ja.com

AWSコンテナサービスで 'cpu'パラメータは何を意味しますか?

T2.mediumのコンテナサービスに新しいタスクを登録します。 cpuパラメーターが0に等しい例を見ました。それが何で、1つのタスクでここに何個入れる必要があるのか​​を見つけようとしています。

この質問に従って私が見つけることができたすべて: http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html?shortFooter=truehttp:/ /docs.aws.Amazon.com/AmazonECS/latest/developerguide/example_task_definitions.html

27
nightmare

「コンテナ用に予約するCPUユニットの数。コンテナインスタンスには、CPUコアごとに1,024 CPUユニットがあります。このパラメータは、コンテナ用に予約するCPUの最小量を指定します。割り当てられた量と同じ比率で。このパラメーターは、Docker Remote APIの[コンテナーの作成]セクションのCpuSharesおよびdocker runの--cpu-sharesオプションにマップされます。

T2.mediumには2つのvCPUがあるため、2,048のCPUユニットがスケジュールに使用できます。ホストで実行するコンテナを1つだけにする場合は、2,048 CPUユニットすべてをバジェットできますが、そのホストに他のコンテナは配置されません。

コンテナは、必要なときに少なくとも予算のCPUを取得することが常に保証されています。さらに、CPUユニットの利点は、他のコンテナがリソースを占有していない場合、コンテナが割り当てられたユニットを超えてバーストする可能性があることです。たとえば、t2.mediumで2つのタスクを実行し、それぞれに1,024のCPUユニットが割り当てられている場合、他のタスクが完全にアイドル状態であれば、各タスクは個別に最大2,048までバーストできます。この方法でホストの共有を開始すると、ECSを使用してコストを節約できます。

さらに、すべてのCPUユニットがバジェットアウトされていない場合、ECSは残りのCPUユニットをバジェットされたCPUユニットの比率で各コンテナに自動的に分割します。したがって、それぞれCPUユニットが0のt2.mediumで2つのタスクを実行している場合、他のコンテナが予約していないため、各コンテナは事実上1,024 CPUユニットを取得します。

ここで注意すべきことの1つは、メモリの動作が少し異なることです。それは厳しい制限です。コンテナが予算よりも多くのメモリを割り当てようとすると、タスク/コンテナは終了します。 CPUユニットを過少にプロビジョニングし、通常はそれで逃げることができます(コンテナが規定を超えて破裂する可能性があるため)が、メモリの制約内に留まることを確認する必要があります。


例:これを0に設定すると、予約されていないCPUに比例した量がかかります。これらのシナリオは、2,048 CPUユニットのt2.medium上にあると仮定します。

タスク#1-0 CPUユニット、タスク#2-0 CPUユニット:この状況では、予約されていないユニットが2,048個あるため、タスク#1とタスク#2の両方に1,024 CPUユニットが割り当てられます。 CPUユニットの予約ではタスクが1:1であるため、両方のタスクが使用可能なCPUユニットを均等に共有します。

タスク#1-0 CPUユニット、タスク#2-1,024 CPUユニット:タスク#2には2,048 CPUユニットが割り当てられ、タスク#1には0の比率で1,024個の未使用CPUユニットを分割しようとしているため0が割り当てられます。 1,024。

タスク#1-0 CPUユニット:マシン上にタスクが1つしかない場合、すべてのユニットは未使用であるため、すべての2,048 CPUユニットが割り当てられ、予約の比率でコンテナ間で分割されます。

53
louahola