Share via


Windows コンテナーのリソース コントロールの実装

適用対象: Windows Server 2022、Windows Server 2019

リソース コントロールには、コンテナー単位およびリソース単位で実装できるものがいくつかあります。 既定では、一般的な Windows リソース管理 (通常はフェアシェア ベース) によって、実行されるコンテナーが決まりますが、リソース コントロールを構成することで、開発者や管理者はリソース使用の制限または調整を行うことができます。 制御できるリソースには次のようなものがあります。CPU とプロセッサ、メモリと RAM、ディスクとストレージ、ネットワークとスループット。

Windows コンテナーでは、各コンテナーに関連付するプロセスのグループ化と追跡に、ジョブ オブジェクトが使用されます。 リソース コントロールは、コンテナーに関連付けられた親ジョブ オブジェクトに実装されます。

Hyper-V による分離の場合、リソース コントロールは仮想マシンにも、仮想マシン内で実行されているコンテナーのジョブ オブジェクトにも自動的に適用されます。これにより、コンテナー内で実行されているプロセスがジョブ オブジェクトのコントロールをバイパスまたはエスケープした場合も、定義されているリソース コントロールを超過しないよう仮想マシンによって制御されます。

参照情報

このセクションでは、各リソースについて、リソース コントロールの使用例として Docker コマンド ライン インターフェイス (オーケストレータまたはその他のツールによって構成される場合もあります) および対応する Windows ホスト コンピューティング サービス (HCS) API を示します。また、Windows によるリソース コントロールの一般的な実装方法も示します (ここに示す説明は概要であり、基になる実装は変わることがあります)。

メモリ

リソース 場所
Docker インターフェイス --memory
HCS インターフェイス MemoryMaximumInMB
共有カーネル JOB_OBJECT_LIMIT_JOB_MEMORY
Hyper-V による分離 仮想マシン メモリ

注意

Windows Server 2016 での Hyper-V による分離では、メモリーの上限を使用する場合、コンテナーは最初に上限値のメモリを割り当てた後、コンテナー ホストにメモリを戻し始めます。 新しいバージョンの Windows Server (1709 以降) では、このプロセスが最適化されました。

CPU (数)

リソース 場所
Docker インターフェイス --cpus
HCS インターフェイス ProcessorCount
共有カーネル JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP* でシミュレート
Hyper-V による分離 公開されている仮想プロセッサの数

CPU (パーセント)

リソース 場所
Docker インターフェイス --cpu-percent
HCS インターフェイス ProcessorMaximum
共有カーネル JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Hyper-V による分離 仮想プロセッサ上のハイパーバイザー制限

CPU (共有)

リソース 場所
Docker インターフェイス --cpu-shares
HCS インターフェイス ProcessorWeight
共有カーネル JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Hyper-V による分離 ハイパーバイザーの仮想プロセッサの重み

記憶域 (イメージ)

リソース 場所
Docker インターフェイス --io-maxbandwidth/--io-maxiops
HCS インターフェイス StorageIOPSMaximum と StorageBandwidthMaximum
共有カーネル JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Hyper-V による分離 JOBOBJECT_IO_RATE_CONTROL_INFORMATION

記憶域 (ボリューム)

リソース 場所
Docker インターフェイス --storage-opt size=
HCS インターフェイス StorageSandboxSize
共有カーネル JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Hyper-V による分離 JOBOBJECT_IO_RATE_CONTROL_INFORMATION

追加の注意事項または詳細情報

メモリ要件

Windows コンテナーは、各コンテナーでシステム プロセスを実行します。これらのシステム プロセスは一般的に、ユーザー管理やネットワーキングなど、コンテナー単位の機能を提供します。 また、プロセスに必要なメモリの多くは複数のコンテナー間で共有されますが、メモリ容量はこれらに対応できる十分な量にする必要があります。 システム要件に関するドキュメントに、各基本イメージのタイプと Hyper-V による分離の有無に応じた容量が示されています。

CPU 共有 (Hyper-V による分離なし)

CPU 共有を使用する場合、基になる実装 (Hyper-V による分離を使用しない場合) によって JOBOBJECT_CPU_RATE_CONTROL_INFORMATION が構成されます。具体的には、コントロール フラグが JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED に設定され、適切な重みが指定されます。 ジョブ オブジェクトの有効な重みは 1 ~ 9、既定値は 5 で、ホスト コンピューティング サービスの値 1 ~ 10000 より精度は低くなります。 たとえば、共有の重みが 7500 であれば値は 7、共有の重みが 2500 であれば値は 2 になります。