Модуль создает в кластере набор классов приоритета (PriorityClass) и проставляет их компонентам, установленным Deckhouse, и приложениям в кластере.

Функционал работы классов приоритета реализуется планировщиком (scheduler), который позволяет учитывать приоритет пода (из его принадлежности к классу) при планировании.

К примеру, при выкате в кластер подов с priorityClassName: production-low, если в кластере не будет доступных ресурсов для данного пода, Kubernetes начнет вытеснять поды с наименьшим приоритетом в кластере. То есть сначала будут выгнаны все поды с priorityClassName: develop, потом — с cluster-low и так далее.

При указании класса приоритета очень важно понимать, к какому типу относится приложение и в каком окружении оно будет работать. Любой установленный priorityClassName не уменьшит приоритета пода, так как если priorityClassName у пода не установлен, тогда планировщик считает его самым низким — develop. Очень важно правильно выставлять priorityClassName.

Внимание! Нельзя использовать классы приоритета system-node-critical, system-cluster-critical, cluster-medium, cluster-low.

Устанавливаемые модулем классы приоритета (в порядке приоритета от большего к меньшему):

Класс приоритета Описание Значение
system-node-critical Компоненты кластера, которые обязаны присутствовать на узле. Также полностью защищает от вытеснения kubelet’ом.
node-exporter, csi
2000001000
system-cluster-critical Компоненты кластера, без которых его корректная работа невозможна. Этим PriorityClass’ом в обязательном порядке помечаются MutatingWebhooks и Extension API servers. Также полностью защищает от вытеснения kubelet’ом.
kube-dns, coredns, kube-proxy, flannel, kube-api-server, kube-controller-manager, kube-scheduler, cluster-autoscaler, machine-controller-manager
2000000000
production-high Stateful-приложения, отсутствие которых в production-окружении приводит к полной недоступности сервиса или потере данных (PostgreSQL, memcached, Redis, Mongo и др.). 9000
cluster-medium Компоненты кластера, влияющие на мониторинг (алерты, диагностика) кластера и автомасштабирование. Без мониторинга мы не можем оценить масштабы происшествия, без автомасштабирования не сможем дать приложениям необходимые ресурсы.
deckhouse, node-local-dns, kube-state-metrics, madison-proxy, node-exporter, trickster, grafana, kube-router, monitoring-ping, okmeter, smoke-mini
7000
production-medium Основные stateless-приложения в production-окружении, которые отвечают за работу сервиса для посетителей. 6000
deployment-machinery Компоненты кластера, с помощью которых происходят сборка и деплой в кластер (Helm, werf). 5000
production-low Приложения в production-окружении (cron’ы, админки, batch-процессинг), без которых можно прожить некоторое время. Если batch или cron никак нельзя прерывать, он должен быть в production-medium, а не здесь. 4000
staging Staging-окружения для приложений. 3000
cluster-low Компоненты кластера, без которых возможна эксплуатация кластера, но которые желательны.
prometheus-operator, dashboard, dashboard-oauth2-proxy, cert-manager, prometheus, prometheus-longterm
2000
develop (default) Develop-окружения для приложений. Класс по умолчанию, если не проставлены иные классы. 1000
standby Этот класс не предназначен для приложений. Используется в системных целях для резервирования узлов. -1