Compartilhar via


Implementando controles de recursos para contêineres do Windows

Aplica-se a: 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 típico de recursos do Windows, que, em geral, é por fração justa, mas, pela configuração desses controles, um desenvolvedor ou administrador pode 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 monitorar os processos associados a cada contêiner. Os controles de recursos são implementados no objeto de trabalho pai associado ao contêiner.

No caso de isolamento do Hyper-V, os controles de recursos são aplicados à máquina virtual e também ao objeto de trabalho do contêiner em execução na máquina virtual automaticamente. Isso assegura que a máquina virtual garantirá que o processo não exceda os controles de recursos definidos, mesmo se o processo em execução no contêiner for ignorado ou escapar dos controles de objetos de trabalho.

Recursos

Para cada recurso, esta seção fornece um mapeamento entre a interface de linha de comando do Docker como um exemplo da forma que o controle de recursos pode ser usado (ele pode ser configurado por um orchestrator ou outra ferramenta) para a API do HCS (Serviço de Computação de Host) do Windows correspondente, e também como o controle de recurso geralmente é implementado pelo Windows (observe que essa descrição é de alto nível e que a implementação subjacente está sujeita a alteração).

Memória

Recurso Location
Interface do Docker --memory
Interface do HCS MemoryMaximumInMB
Kernel compartilhado JOB_OBJECT_LIMIT_JOB_MEMORY
Isolamento do Hyper-V Memória da máquina virtual

Observação

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

CPU (contagem)

Recurso Location
Interface do Docker --cpus
Interface do 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 Location
Interface do Docker --cpu-percent
Interface do HCS ProcessorMaximum
Kernel compartilhado JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Isolamento do Hyper-V Limites do hipervisor em processadores virtuais

CPU (compartilhamentos)

Recurso Location
Interface do Docker --cpu-shares
Interface do HCS ProcessorWeight
Kernel compartilhado JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Isolamento do Hyper-V Pesos do hipervisor em processadores virtuais

Armazenamento (imagem)

Recurso Location
Interface do Docker --io-maxbandwidth/--io-maxiops
Interface do HCS StorageIOPSMaximum e StorageBandwidthMaximum
Kernel compartilhado JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Isolamento do Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Armazenamento (volumes)

Recurso Location
Interface do Docker --storage-opt size=
Interface do HCS StorageSandboxSize
Kernel compartilhado JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Isolamento do Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Observações ou detalhes adicionais

Requisitos de memória

Os contêineres do Windows executam algum processo do sistema em cada contêiner, normalmente aqueles que fornecem funcionalidade por contêiner, como o gerenciamento de usuário, rede, etc. E enquanto muita memória exigida por esses processos é compartilhada entre os contêineres, o limite de utilização de memória deve ser alto o suficiente para permiti-los. Uma tabela é fornecida no documento requisitos do sistema para cada tipo de imagem base e com e sem o isolamento do Hyper-V.

Compartilhamentos de CPU (sem o isolamento do Hyper-V)

Ao usar o compartilhamento de CPU, a implementação subjacente (quando não estiver usando o isolamento do Hyper-V) configura o JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, especificamente definindo o sinalizador do controle para JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED e fornecendo um peso apropriado. Os intervalos de peso válidos do objeto de trabalho vão de 1 a 9, com um padrão de 5, que tem mais baixa fidelidade que os valores de serviços de computação de host de 1 a 10.000. Como exemplos, um peso de compartilhamento de 7.500 resultaria em um peso de 7 ou um peso compartilhado de 2.500 resultaria em um valor de 2.