Partilhar 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/Rendimento.

Os contêineres do Windows utilizam objetos de trabalho para agrupar e controlar 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 Hyper-V, os controlos de recursos são aplicados tanto à máquina virtual como ao objeto de tarefa do contêiner que está a ser executado dentro da máquina virtual, automaticamente. Isto garante que, mesmo que um processo em execução no contêiner contorne ou escape dos controlos de objetos de tarefa, a máquina virtual assegurará que não é capaz de ultrapassar os controlos 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 recursos pode ser usado (pode ser configurado por um orquestrador ou outras ferramentas) para a API correspondente do HCS (serviço de computação de host do Windows), bem como geralmente como o controle de recursos foi implementado pelo Windows (observe que esta 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
Hyper-V isolamento Memória da máquina virtual

Observação

Para o isolamento Hyper-V no Windows Server 2016, ao usar um limite de memória, ver-se-á o contêiner inicialmente alocar à quantidade limite de memória e, em seguida, começar a devolvê-la para o 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 ContagemDeProcessadores
Kernel compartilhado Simulado com JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP*
Hyper-V isolamento Número de processadores virtuais expostos

CPU (percentagem)

Recurso Localização
Interface do Docker --percentagem-CPU
Interface HCS ProcessorMaximum
Kernel compartilhado JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Hyper-V isolamento Limites do hipervisor em processadores virtuais

CPU (partilhas)

Recurso Localização
Interface do Docker --CPU-compartilha
Interface HCS ProcessorWeight
Kernel compartilhado JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Hyper-V isolamento 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
Hyper-V isolamento JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Armazenamento (volumes)

Recurso Localização
Interface do Docker --storage-opt size=
Interface HCS TamanhoDoSandboxDeArmazenamento
Kernel compartilhado JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Hyper-V isolamento JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Notas 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 gerenciamento de usuários, 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 permitir isso. Uma tabela é fornecida no documento de requisitos do sistema para cada tipo de imagem base, com e sem o isolamento Hyper-V.

Compartilhamentos de CPU (sem isolamento Hyper-V)

Ao usar partilhas de CPU, a implementação subjacente (quando não estiver a usar Hyper-V isolamento) 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. Os intervalos de peso válidos para o objeto de trabalho são de 1 a 9, com um padrão de 5, que é menos preciso do que os valores, de 1 a 10000, para os serviços de computação do host. A título de exemplo, um peso de ação de 7500 resultaria num peso de 7 ou um peso de ação de 2500 resultaria num valor de 2.