Поделиться через


Реализация элементов управления ресурсами для контейнеров Windows

Область применения: Windows Server 2025, Windows Server 2022, Windows Server 2019

Существует несколько элементов управления ресурсами, которые можно реализовать на основе каждого контейнера и каждого ресурса. По умолчанию контейнеры запускаются с применением типичного управления ресурсами Windows, которое в общем основано на равном распределении, однако с помощью настройки этих параметров разработчик или администратор может ограничивать или влиять на использование ресурсов. Ресурсы, которые можно контролировать, включают: ЦП, процессор, память, ОЗУ, диск/ хранилище и сеть/пропускная способность.

Контейнеры Windows используют объекты заданий для группировки и отслеживания процессов, связанных с каждым контейнером. Элементы управления ресурсами реализуются в родительском объекте задания, связанном с контейнером.

В случае изоляции Hyper-V элементы управления ресурсами автоматически применяются как к виртуальной машине, так и к объекту задания контейнера, работающему внутри виртуальной машины. Это гарантирует, что даже если процесс, запущенный в контейнере, обойдет или выйдет из-под контроля объектов задания, виртуальная машина обеспечит, что он не сможет превысить заданные ограничения ресурсов.

Ресурсы

Для каждого ресурса в этом разделе представлено сопоставление между интерфейсом командной строки Docker в качестве примера использования элемента управления ресурсами (оно может быть настроено оркестратором или другим инструментом) с соответствующим API вычислительной службы узлов Windows (HCS), а также как правило, как управление ресурсами реализовано Windows (обратите внимание, что это описание является высоким уровнем и что базовая реализация подлежит изменению).

Память

Ресурс Местоположение
Интерфейс Docker --память
Интерфейс HCS MemoryMaximumInMB
Общее ядро JOB_OBJECT_LIMIT_JOB_MEMORY
изоляция Hyper-V Память виртуальной машины

Заметка

Для изоляции Hyper-V в Windows Server 2016 при использовании предела памяти контейнер будет первоначально выделять объем памяти, а затем начнет возвращать его узлу-хозяину контейнера. Более поздние версии Windows Server (1709 или более поздней версии) оптимизированы для этого процесса.

ЦП (число)

Ресурс Местоположение
Интерфейс Docker --cpus
Интерфейс HCS Количество процессоров
Общее ядро Смоделировано с использованием JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP*
изоляция Hyper-V Количество видимых виртуальных процессоров

ЦП (процент)

Ресурс Местоположение
Интерфейс Docker --cpu-percent
Интерфейс HCS ProcessorMaximum
Общее ядро JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
изоляция Hyper-V Ограничения гипервизора на виртуальных процессорах

процессор (доли)

Ресурс Местоположение
Интерфейс Docker --cpu-shares
Интерфейс HCS Процессорный вес
Общее ядро JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Hyper-V изоляция Веса виртуальных процессоров гипервизора

Хранилище изображений

Ресурс Местоположение
Интерфейс Docker --io-maxbandwidth/--io-maxiops
Интерфейс HCS StorageIOPSMaximum и StorageBandwidthMaximum
Общее ядро JOBOBJECT_IO_RATE_CONTROL_INFORMATION
изоляция Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Хранилище (тома)

Ресурс Местоположение
Интерфейс Docker --storage-opt size=
Интерфейс HCS StorageSandboxSize
Общее ядро JOBOBJECT_IO_RATE_CONTROL_INFORMATION
изоляция Hyper-V JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Дополнительные заметки или сведения

Требования к памяти

Контейнеры Windows выполняют некоторый системный процесс в каждом контейнере обычно те, которые предоставляют функциональные возможности для каждого контейнера, такие как управление пользователями, сеть и т. д. в то время как большая часть памяти, требуемая этими процессами, является общей для контейнеров, ограничение памяти должно быть достаточно высоким для их работы. Таблица представлена в документе системных требований для каждого типа базового образа, как с Hyper-V изоляцией, так и без нее.

Доли ЦП (без изоляции Hyper-V)

При использовании долей ЦП базовая реализация (при неиспользовании изоляции Hyper-V) настраивает JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, в частности, устанавливая флаг управления на JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED и предоставляя соответствующий вес. Допустимые диапазоны весов объекта задания : 1 – 9 с значением по умолчанию 5, что меньше точности, чем значения служб вычислений узла 1 – 10000. В качестве примеров, начальное значение вложенного веса 7500 приведет к весу 7, или начальное значение вложенного веса 2500 приведет к значению 2.