Лейблы и тейнты
Механизм лейблов и селекторов позволяет выбрать строго заданные ноды для запуска конкретных подов. При этом у пользователя есть возможность запустить любые другие поды без селекторов на этих же нодах.
Механизм тейнтов и толераций, наоборот, полностью запрещает запускаться любым подам на определенных нодах. Однако, если у этих подов есть толерации к заданным на ноде тейнтам, то под будет запущен на ноде.
Особенности работы
Лейблы и тейнты Containerum присваиваются всей группе нод целиком, если их создавать из Containerum.
Лейблы и тейнты, которые были созданы напрямую в обход использования Containerum (например, с помощью kubectl
), могут быть стерты с ноды при масштабировании группы нод.
Если вам необходимо применить лейбл или тейнт только к одной ноде, то рекомендуется создать отдельную группу нод с одной нодой и задать необходимый лейбл или тейнт через Containerum.
Лейблы и селекторы
Лейблы используются для группировки нод в Kubernetes. С помощью лейблов и селекторов можно управлять распределением подов по нодам кластера.
Лейбл представляет из себя пару ключ и значение. Укажите необходимые ключ и значение в разделе Лейблы при создании группы нод.
Вы можете запустить под на кластере, использовав селектор. Для этого нужно указать ту же пару ключа и значения в спецификации сервиса, в разделе nodeSelector
. В таком случае поды будут запущены только на этой группе нод.
Подробнее о лейблах и селекторах можно узнать в документации Kubernetes.
Тейнты и толерации
Тейнты совместно с толерациями (tolerations) позволяют управлять распределением подов по нодам. С помощью тейнтов можно запретить определенным подам выполняться на ноде.
У тейнтов есть 3 вида эффектов:
NoSchedule
— не запускать поды на ноде;PreferNoSchedule
— не запускать поды на ноде, если есть другая нода, чтобы запустить под;NoExecute
— остановить поды на ноде, переместить на другие ноды и больше не запускать.
Для создания тейнта укажите значения следующих параметров в разделе Taints при создании группы нод:
- Эффект определяет поведение подов на ноде (обязательный).
- Ключ позволяет идентифицировать тот или иной тейнт (обязательный).
- Значение позволяет идентифицировать тот или иной тейнт по вторичному признаку (необязательный).
Тейнты можно использовать совместно с толерациями подов. В спецификации пода можно указать, какие из тейнтов данный под должен игнорировать.
В толерации можно указать указать оператор условия и признаки, по которым нужно игнорировать тот или иной тейнт. Для оператора со значением Equal
нужно указать признаки effect
, key
и value
(эффект, ключ и значение, соответственно). Для оператора со значением Exists
можно указать признаки effect
и/или key
(эффект и ключ, соответственно).
Толерация Equal
будет распространяться на все тейнты с указанными признаками. Для толерации Exists
учитывайте следующее:
- Если в толерации оставить поле
key
пустым, толерация будет распространяться на абсолютно все тейнты. - Если в толерации оставить поле
effect
пустым, толерация будет распространяться на все тейнты с указанным признакомkey
.
Примечание
Если ваша толерация должна затронуть тейнты с эффектом NoExecute
, то внутри тела толерации — помимо прочего — вы можете указать tolerationSeconds
. Значение этой настройки задаст длительность в секундах, в течение которой под будет выполняться на ноде.
Сервисные тейнты
Помимо пользовательских тейнтов, существуют сервисные. Например, в определенных ситуациях на нодах появляются следующие тейнты с эффектом NoExecute
:
node.kubernetes.io/memory-pressure
применяется к ноде в случае слишком высокой утилизации оперативной памяти ноды;node.kubernetes.io/disk-pressure
применяется к ноде в случае слишком высокой утилизации хранилища;node.kubernetes.io/pid-pressure
применяется к ноде в случае слишком высокой утилизации ресурсов процессом;node.kubernetes.io/unschedulable
применяется к ноде в случае невозможности запустить что-либо на ноде;node.kubernetes.io/network-unavailable
применяется к ноде в случае невозможности установить соединение с нодой.
Внимание
Толерации для сервисных тейнтов могут привести к полной неработоспособности ноды. Применяйте их на свой страх и риск, только если уверены в своих действиях.
Подробнее о тейнтах и толерациях читайте в документации Kubernetes.