实施 Windows 容器资源控制
适用于:Windows Server 2022、Windows Server 2019
某些资源控制可以按容器和按资源实施。 默认情况下,容器运行受典型 Windows 资源管理(总体上以公平分配为基础)影响,但通过实施以上控制,开发人员或管理员可以限制或影响资源使用情况。 可以控制的资源包括:CPU/处理器、内存/RAM、磁盘/存储和网络/吞吐量。
Windows 容器利用作业对象进行分组并跟踪与每个容器关联的进程。 资源控制在与容器关联的父作业对象上实施。
在 Hyper-V 隔离的情况下,系统同时对虚拟机和在虚拟机中运行的容器的作业对象进行自动资源控制,这样即使在容器中运行的进程绕过了或逃脱了作业对象控制,虚拟机也会确保其无法越过定义的资源控制。
资源
此部分提供了每个资源与 Docker 命令行界面之间的映射,作为如何将资源控制用于(可能由 Orchestrator 或其他工具配置)相应的 Windows 主机计算服务 (HCS) API 以及 Windows 通常如何实施资源控制(请注意此描述为高级描述,基础实施可能发生变化)的示例。
内存
资源 | 位置 |
---|---|
Docker 界面 | --内存 |
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 and 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。