В чем разница между классом приоритета и QoS в Kubernetes?

В Kubernetes мы можем установить приоритет модуля на Guaranteed, Burstable или Best-Effort в зависимости от запросов и ограничений. Другой метод назначения приоритетов в Kubernetes - это определение объекта priorityClass и присвоение priorityClassName модулю. Чем отличаются эти методы и когда нам приходится выбирать один метод другому? Согласно https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#interactions-of-pod-priority-and-qos:

Логика приоритетного прерывания планировщика не учитывает QoS при выборе целей прерывания. Вытеснение учитывает приоритет Pod и пытается выбрать набор целей с самым низким приоритетом.

Итак, если Kubernetes должен выбирать между модулем с Guaranteed QoS, который имеет более низкое значение "priorityClass", чем модуль Burstable, переводит ли он модуль Guaranteed в состояние вытеснения?


person Mohammad Yusefpur    schedule 10.05.2020    source источник


Ответы (2)


Quality of Service определяет планирование и приоритет выселения контейнеров. Если для модуля не заданы какие-либо запросы / ограничения ресурсов, он рассматривается как low-priority pod (best effort). Если у узла не хватает ресурсов, он будет удален первым.

Medium priority (burstable), когда для модуля указаны какие-либо ресурсы / ограничения (не удовлетворяющие требованиям гарантированного класса).

Highest priority (guaranteed), когда для модуля установлено одно и то же значение запросов и ограничений (как для ЦП, так и для памяти).

PriorityClass используется для определения приоритета контейнера при выселении. Иногда вы можете захотеть, чтобы один модуль был вытеснен перед другим. Приоритет описывается целым числом в поле value, и чем выше значение, тем выше приоритет.

Когда включен приоритет Pod, планировщик упорядочивает ожидающие Pod'ы по их приоритету, а ожидающий Pod помещается впереди других ожидающих Pod'ов с более низким приоритетом в очереди планирования. Если нет узлов с ресурсами для удовлетворения требований высокоприоритетного узла, он вытеснит поды с более низким приоритетом. Наивысший приоритет - system-node-critical.

  • QoS используется для контроля и управления ресурсами узла среди модулей. Исключение QoS происходит, когда на узле нет доступных ресурсов.
  • Планировщик рассматривает PriorityClass модуля перед QoS. Он не пытается выселить модули, если не требуется запланировать модули с более высоким приоритетом и на узле недостаточно места для них.
  • PriorityClass - когда поды вытесняются, PriorityClass соблюдает период плавного завершения, но не гарантирует соблюдение бюджета на отключение подов.
person Mariusz K.    schedule 11.05.2020
comment
Так что поправьте меня, если я ошибаюсь в следующих сценариях: (a) У нас есть 3 узла, на каждом из которых работает модуль Guaranteed, и каждый узел имеет 200 МБ свободной памяти, когда я применяю новое развертывание с модулями с более высоким приоритетом, которое запрашивает память 400 МБ (но имеют ограничение в 500 МБ, т.е. Burstable) планировщик вытесняет предыдущие guaranteed модули, чтобы запланировать эти новые Burstable модули. (b) узел, на котором запущен модуль Burstable с более высоким приоритетом и модуль guranteed с более низким приоритетом. Тогда у узла нет доступного ресурса и он должен его выселить, он вытеснит под ВЫСОКИЙ приоритет Burstable. - person Mohammad Yusefpur; 16.05.2020
comment
(c) после сценария b выселенный модуль Burstable должен быть запланирован снова (это развертывание), но если для этого нет места на каком-либо узле, планировщик удаляет модуль guaranteed, чтобы снова запланировать модуль Burstable. - person Mohammad Yusefpur; 16.05.2020
comment
›Качество обслуживания определяет планирование и приоритет выселения контейнеров. Я не понимаю, какое отношение классы QoS имеют к планированию? Они определяют выселение в случае выхода узла из строя. Планирование использует приоритеты для установки порядка. Итак, где же связь между QoS и планированием, упомянутая в ответе выше, но также и на официальной странице: kubernetes.io/docs/tasks/configure-pod-container/ - person woj.sierak; 15.04.2021

Планировщик просто проигнорирует QoS, как упомянуто. Вытеснение принимает во внимание только priorityClass, QoS здесь не влияет.

person omricoco    schedule 10.05.2020