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.