为 Windows 容器实现资源控制
适用于:Windows Server 2025、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 接口 | 处理器最大值 |
共享内核 | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP |
Hyper-V 隔离 | 虚拟机监控程序对虚拟处理器的限制 |
CPU(共享)
资源 | 位置 |
---|---|
Docker 接口 | --cpu-shares |
HCS 接口 | 处理器重量 |
共享内核 | 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。