Когда нужно выделить узлы для критически важных сервисов и предотвратить рапределение на эти узлы другой нагрузки, можно использовать инструменты taints и tolerations.
С их помощью вы можете пометить узлы специальными ограничениями (taints), а поды — соответствующими разрешениями на обход ограничений (tolerations). Тогда на узлах с заданными taints запустятся только поды, для которых вы задали нужные tolerations.
Также для настройки размещения подов можно использовать:
- параметр nodeSelector — задать базовое размещение по меткам узлов;
- параметры nodeAffinity и podAntiAffinity — задать гибкие правила для размещения подов на узлах.
Настройка инструментов taints и tolerations
Допустим, нужно разделить рабочую нагрузку между двумя группами узлов: для мониторинга (monitoring
) и для основного приложения (elma365
). Рассмотрим, как это можно реализовать:
- Добавьте taints:
- на узлах, предназначенных для мониторинга:
kubectl taint nodes node-1 role=monitoring:NoSchedule
- на узлах, предназначенных для ELMA365:
kubectl taint nodes node-1 role=elma365:NoSchedule
В команде можно указать один узел и несколько taints, разделив метки taints пробелами.
- В поле
.Values.global.tolerations
настройте tolerations, например:
- для подов
monitoring
в файлеvalues-monitoring.yaml
:
global:
tolerations:
- key: "role"
operator: "Equal"
value: "monitoring"
effect: "NoSchedule"
- для подов
elma365
в файлеvalues-elma365.yaml
:
global:
tolerations:
- key: "role"
operator: "Equal"
value: "elma365"
effect: "NoSchedule"
Где:
key
— имя taint;operator
— оператор сравнения:Equal
— значение taint для узла должно совпадать со значением, указанным вvalue
;Exists
— в параметрах узла должен быть задан taint с указаннымkey
. Значениеvalue
не учитывается;
value
— значение taint, которое используется с операторомEqual
;effect
— тип действия taint:NoSchedule
— под размещается на узле с taint, только если для него настроен соответствующий toleration;PreferNoSchedule
— предпочтительно планировать под только на тех узлах с taint, для которых настроен toleration. Однако если других узлов нет, под планируется на узел;NoExecute
— под не размещается на узле с заданным taint.
В этом примере поды мониторинга будут размещаться только на узлах с taint role=monitoring
, а поды ELMA365 — только на узлах с taint role=elma365
.
Значения по умолчанию для tolerations
По умолчанию в поле .Values.global.tolerations
не заданы значения. Поэтому поды планируются на любые доступные узлы без учёта taints. Если нужно разделить рабочую нагрузку между различными типами узлов, настройте taints на узлах и соответствующие tolerations в конфигурации подов.