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 になります。