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.