Тегирование нод кластера

Ноды кластера могут быть помечены специальными строковыми литералами, называемыми тегами.

Часть тегов, как правило называемых системными, определяется самой нодой исходя из своего конфига и окружения. Окружение задаётся администраторами кластера. Дополнительные теги можно указывать на нодах с помощью атрибута user_tags на узле ноды в Кипарисе.

Данные теги могут использоваться для фильтрации набора нод на основе языка булевых формул.

Булевая формула — это логическое выражение, которое:

  • содержит операторы & (логическое "и"), | (логическое "или"), ! (логическое "не") и круглые скобки;
  • построено поверх литералов. Литерал — это строка из латинских символов и спецсимволов _, /, -, ., :.

Выражение вычисляется для конкретной ноды. Для этого в качестве значения литерала подставляется "истина", если данный литерал встречается в списке тегов ноды, и "ложь" — иначе. Далее выражение вычисляется по стандартным правилам булевых выражений. Пустое выражение всегда принимает значение "ложь".

Выражения на тегах используются в двух сценариях:

  • опция scheduling_tag_filter в спецификации операции позволяет указывать фильтр на подмножество нод, на которых можно запускать джобы операции;
  • ключи в динамическом конфиге нод //sys/cluster_nodes/@config.
Запуск операции с указанием тегов

Листинг 1 — Указание пользовательского тега на ноде

$ yt set //sys/cluster_nodes/exe-0.my_cluster.net:9012/@user_tags '[test]'
$ yt set //sys/cluster_nodes/exe-1.my_cluster.net:9012/@user_tags '[test]'

Листинг 2 — Запуск операции с указанием данного тега

$ yt map --spec '{scheduling_tag_filter="test"}' ...