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

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

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

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

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

Ресурсы

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

Память

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

Примечание.

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

ЦП (число)

Ресурс Расположение
Интерфейс Docker --cpus
Интерфейс HCS ProcessorCount
Общее ядро Имитация с помощью 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 ProcessorWeight
Общее ядро 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.