Compartilhar via


Implementando controles de recursos para contêineres do Windows

Aplica-se a: Windows Server 2025, Windows Server 2022, Windows Server 2019

Há vários controles de recursos que podem ser implementados por contêiner e por recurso. Por padrão, os contêineres executados estão sujeitos ao gerenciamento de recursos típico do Windows, que em geral é baseado em compartilhamento justo, mas embora a configuração desses controles um desenvolvedor ou administrador possa limitar ou influenciar o uso de recursos. Os recursos que podem ser controlados incluem: CPU/Processador, Memória/RAM, Disco/Armazenamento e Rede/Taxa de Transferência.

Os contêineres do Windows utilizam objetos de trabalho para agrupar e acompanhar processos associados a cada contêiner. Os controles de recurso são implementados no objeto de trabalho pai associado ao contêiner.

No caso de isolamento do Hyper-V, controles de recurso são aplicados tanto à máquina virtual quanto ao objeto de trabalho do contêiner que está em execução dentro da máquina virtual. Automaticamente, isso garante que, mesmo que um processo em execução no contêiner tenha driblado ou escapado dos controles dos objetos de trabalho, a máquina virtual garantirá que ele não consiga exceder os controles de recursos definidos.

Recursos

Para cada recurso, esta seção fornece um mapeamento entre a interface de linha de comando do Docker como um exemplo de como o controle de recurso pode ser usado (pode ser configurado por um orquestrador ou outras ferramentas) para a API do HCS (serviço de computação de host do Windows) correspondente, bem como geralmente como o controle de recursos foi implementado pelo Windows (observe que essa descrição é de alto nível e que a implementação subjacente está sujeita a alterações).

Memória

Recurso Localização
Interface do Docker --memória
Interface HCS MemoryMaximumInMB
Kernel Compartilhado JOB_OBJECT_LIMIT_JOB_MEMORY
Isolamento do Hyper-V Memória da máquina virtual

Nota

Para isolamento Hyper-V no Windows Server 2016, ao usar um limite de memória, você verá o contêiner alocar inicialmente o limite de memória e, em seguida, começar a devolvê-la ao host do contêiner. Versões posteriores do Windows Server (1709 ou posterior) otimizaram esse processo.

CPU (número)

Recurso Localização
Interface do Docker --Cpus
Interface HCS ProcessorCount
Kernel Compartilhado Simulado com JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP*
Isolamento do Hyper-V Número de processadores virtuais expostos

CPU (porcentagem)

Recurso Localização
Interface do Docker --cpu-percent
Interface HCS ProcessorMaximum
Kernel Compartilhado JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Isolamento do Hyper-V Limites do hipervisor em processadores virtuais

CPU (compartilhamentos)

Recurso Localização
Interface do Docker --cpu-shares
Interface HCS Peso do Processador
Kernel Compartilhado JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Isolamento do Hyper-V Pesos dos processadores virtuais do hipervisor

Armazenamento (imagem)

Recurso Localização
Interface do Docker --io-maxbandwidth/--io-maxiops
Interface HCS StorageIOPSMaximum e StorageBandwidthMaximum
Kernel Compartilhado JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Isolamento do Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Armazenamento (volumes)

Recurso Localização
Interface do Docker --storage-opt size=
Interface HCS StorageSandboxSize
Kernel Compartilhado JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Isolamento do Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Anotações ou detalhes adicionais

Requisitos de memória

Os contêineres do Windows executam algum processo de sistema em cada contêiner normalmente aqueles que fornecem funcionalidade por contêiner, como gerenciamento de usuário, rede etc... e, embora grande parte da memória exigida por esses processos seja compartilhada entre contêineres, o limite de memória deve ser alto o suficiente para acomodá-los. Uma tabela é fornecida no documento de requisitos do sistema para cada tipo de imagem base, tanto com quanto sem isolamento Hyper-V.

Compartilhamentos de CPU (sem isolamento do Hyper-V)

Ao usar compartilhamento de CPU, a implementação subjacente (sem isolamento Hyper-V) configura o JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, definindo especificamente o sinalizador de controle como JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED e fornecendo um Peso apropriado. As faixas de peso válidas do objeto de trabalho são de 1 a 9, com um padrão de 5, o que é menos preciso do que os valores de serviços de computação do host, que variam de 1 a 10000. Como exemplos, um peso de compartilhamento de 7.500 resultaria em um peso de 7, ou um peso de compartilhamento de 2.500 resultaria em um peso de 2.