Implementar controles de recursos para contenedores de Windows

Se aplica a: Windows Server 2022, Windows Server 2019

Hay varios controles de recursos que pueden implementarse por contenedor y por recurso. De forma predeterminada, los contenedores ejecutados están sujetos a la administración habitual de recursos de Windows, lo que, en general, se comparte de forma equitativa. Sin embargo, un desarrollador o administrador puede limitar el uso de los recursos, o influir sobre él, tras configurar estos controles. Entre los recursos que se pueden controlar se incluyen: CPU/procesador, memoria/RAM, disco/almacenamiento y redes/rendimiento.

Los contenedores de Windows utilizan objetos de trabajo para agrupar y realizar un seguimiento de los procesos asociados a cada contenedor. Los controles de recursos se implementan en el objeto de trabajo principal asociado al contenedor.

En el caso de aislamiento de Hyper-V, los controles de recursos se aplican a la máquina virtual y al objeto de trabajo del contenedor que se ejecuta automáticamente en dicha máquina. Esto garantiza que aunque un proceso que se ejecuta en el contenedor omitiera o pasara por alto los controles de objetos de trabajo, la máquina virtual se aseguraría de que fuera incapaz de superar los controles de recursos definidos.

Recursos

Para cada recurso, esta sección ofrece una asignación entre la interfaz de línea de comandos Docker como un ejemplo de cómo debería usarse el control de recursos (un orquestador u otras herramientas pueden configurarlo) a la API de servicio de proceso de host (HCS) que ha implementado Windows (ten en cuenta que esta descripción es de nivel alto y que la implementación subyacente está sujeta a cambios).

Memoria

Resource Location
Interfaz de docker --memory
Interfaz de HCS MemoryMaximumInMB
Kernel compartido JOB_OBJECT_LIMIT_JOB_MEMORY
Aislamiento de Hyper-V Memoria de máquina virtual

Nota

Con respecto al aislamiento de Hyper-V en Windows Server 2016, al usar un límite de memoria, verá cómo el contenedor asigna inicialmente el límite de memoria y, luego, se inicia para devolverlo al host de contenedor. Las versiones posteriores de Windows Server (1709 o posteriores) han optimizado este proceso.

CPU (recuento)

Resource Location
Interfaz de docker --cpus
Interfaz de HCS ProcessorCount
Kernel compartido Simulado con JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP*
Aislamiento de Hyper-V Número de procesadores virtuales expuestos

CPU (porcentaje)

Resource Location
Interfaz de docker --cpu-percent
Interfaz de HCS ProcessorMaximum
Kernel compartido JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Aislamiento de Hyper-V Límites de hipervisor en procesadores virtuales

CPU (recursos compartidos)

Resource Location
Interfaz de docker --cpu-shares
Interfaz de HCS ProcessorWeight
Kernel compartido JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Aislamiento de Hyper-V Pesos de procesadores virtuales de hipervisor

Almacenamiento (imagen)

Resource Location
Interfaz de docker --io-maxbandwidth/--io-maxiops
Interfaz de HCS StorageIOPSMaximum y StorageBandwidthMaximum
Kernel compartido JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Aislamiento de Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Almacenamiento (volúmenes)

Resource Location
Interfaz de docker --storage-opt size=
Interfaz de HCS StorageSandboxSize
Kernel compartido JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Aislamiento de Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Detalles o notas adicionales

Requisitos de memoria

Los contenedores de Windows ejecutan algún proceso del sistema en cada contenedor; por lo general, aquellos que proporcionan funcionalidad por contenedor como la administración de usuarios, redes etc… y si bien gran parte de la memoria necesaria para estos procesos se comparte entre contenedores, el límite de memoria debe ser lo suficientemente alto como para permitirlos. En el documento requisitos del sistema se incluye una tabla para cada tipo de imagen base con y sin aislamiento de Hyper-V.

Recursos compartidos de CPU (sin el aislamiento de Hyper-V)

Al usar los recursos compartidos de CPU, la implementación subyacente (cuando no se utiliza el aislamiento de Hyper-V) configura JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, lo que establece específicamente la marca de control en JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED y proporciona un peso adecuado. Los intervalos de peso válido del objeto de trabajo son 1 – 9 con un valor predeterminado de 5, lo que supone una fidelidad inferior a los valores de servicios de proceso de host de 1-10000. A modo de ejemplo, un peso de recurso compartido de 7500 produciría un peso de 7 o un peso de recurso compartido de 2500 daría como resultado un valor de 2.