Модуль создает в кластере набор классов приоритета (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 |