Модуль создает в кластере набор priority class’ов и проставляет их компонентам установленным Deckhouse и приложениям в кластере.
Priority Class — это функционал планировщика (scheduler’а), который позволяет учитывать приоритет Pod’а (из его принадлежности к классу) при планировании.
К примеру, при выкате в кластер Pod’ов с priorityClassName: production-low
, если в кластере не будет доступных ресурсов для данного Pod’а, то Kubernetes начнет вытеснять Pod’ы с наименьшим приоритетом в кластере.
Т.е. сначала будут выгнаны все Pod’ы с priorityClassName: develop
, потом — с cluster-low
, и так далее.
При выставлении priority class очень важно понимать, к какому типу относится приложение и в каком окружении оно будет работать. Любой установленный priorityClassName
не уменьшит приоритета Pod’а, т.к. если priority-class
у Pod’а не установлен, планировщик считает его самым низким — develop
. Очень важно правильно выставлять priorityClassName
.
Внимание! Нельзя использовать PriorityClasses:
system-node-critical
,system-cluster-critical
,cluster-medium
,cluster-low
.
Устанавливаемые модулем priority class’ы (в порядке приоритета от большего к меньшему):
Priority Class | Описание | Значение |
---|---|---|
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 |