Перейти к содержанию

Метки

Метки (labels) — пары ключ-значение формата key=value, которые описывают атрибуты объектов кластера. Они играют ключевую роль в механизме планирования размещения пользовательских ресурсов (ВМ) на узлах. Метки могут быть назначены в кластере, ВЦОД и виртуальном кластере.
В Sharx Base используются следующие типы меток: обычная, делегированная, игнорируемая, метка-ограничение, системная и криптографическая метка.

Метки могут быть назначены следующим объектам виртуальной инфраструктуры:

Основные понятия:

  • Обычная метка — метка, создаваемая и назначаемая пользователями вручную. Не имеет специальных системных свойств, таких как taint или игнорирование.

  • Делегирование метки — предоставление возможности использовать метку объектам: ВЦОД или виртуальному кластеру.

  • Игнорируемая метка — метка, существующая в системе, но не учитываемая при планировании. Метка может игнорироваться в контексте ВЦОД и виртуального кластера. Планировщик не учитывает игнорируемые метки во время поиска узлов по ним.

  • Ограничение taint — свойство узла, не позволяющее планировать на него ресурсы, у которых нет допуска (toleration) к узлу с данным ограничением taint.

  • Метка-ограничение — метка со свойством taint. На узлы с такой меткой ресурсы планируются по определенным правилам.

  • Допуски tolerations — это параметры виртуальных машин, которые позволяют им размещаться на узлах с ограничениями. Допуск должен соответствовать введенному ограничению taint на узле key=value:effect.

  • Системная метка — используется системой, недоступна для создания и назначения вручную. Например, метка активации сервисного обслуживания system_drain_node=yes. Подробная информация о данной метке описана в статье Сервисное обслуживание

  • Криптографическая метка — метка, применяемая к ВМ для обозначения ее принадлежности к контуру криптографической защиты (СКЗИ). Имеет ключ-значение vm=crypto. Метка определяет политику управления ВМ, блокируя функции миграции и создания снимков для исключения риска утечки защищаемых данных. Криптографическую метку может назначить или снять только определенная роль специальной командой. Подробная информация описана в Руководстве пользователя в командной строке.


Принципы выбора объекта для размещения ресурсов по меткам

Внимание

  • При указании в nodeSelector меток, игнорируемых в кластере, ВЦОД или виртуальном кластере, будет выведена ОШИБКА.
  • Системная метка system_drain_node=yes запрещает размещение ресурсов на соответствующих узлах.
  • При обновлении ресурса изменение nodeSelector невозможно

Планировщик размещает ресурсы только на узлах, содержащих все метки, указанные в запросе на создание ресурса в элементе nodeSelector. Игнорируемые метки не участвуют в фильтрации узлов.

Например, узлам A, B и С присвоены метки

node labels
A key=base, disk=ssd, graphics=fast, foo=bar
B key=base
С key=base, disk=ssd

Получен запрос на создание пользовательского ресурса

nodeSelector из запроса на создание ресурса
nodeSelector:
    key: base
    disk: ssd
    graphics: fast

Только узел A будет выбран планировщиком доступным для размещения ресурса, так как он единственный содержит все запрошенные метки.


Принцип размещения пользовательских ресурсов на узлы, содержащие метку-ограничение

При подборе узлов, где существует метка-ограничение, планировщик следует определенному алгоритму:

  1. Если метка-ограничение не была указана пользователем в параметре nodeSelector, ресурс не будет запланирован на узлы, имеющие эту метку.
  2. Если метка-ограничение была указана пользователем в параметре nodeSelector, ресурс автоматически получит допуск к размещению на узле, содержащем данную метку-ограничение.

Например, узлам A, B и С присвоены метки

node labels
A key=base, foo=bar:{taint}
B key=base
C key=base

где метка foo=bar:{taint} — метка-ограничение.

Получен запрос на создание пользовательского ресурса

nodeSelector из запроса на создание ресурса
nodeSelector:
  key: base

Планировщик выберет только узлы B и C, так как они не имеют метку-ограничение.

Если получен запрос с параметром nodeSelector вида

nodeSelector из запроса на создание ресурса
nodeSelector:
  foo: bar

Планировщик выберет только узел A, так как он единственный имеет метку-ограничение foo=bar:{taint}.


Управлять метками в кластере

Ограничения работы с метками в кластере

  • При создании кластера каждому узлу по умолчанию присваивается метка key=base.
  • Максимальное количество меток на узле — 150.
  • Узлу нельзя назначить несколько меток с одинаковым ключом.
  • С узла нельзя открепить все метки.
  • Нельзя удалить метки, делегированные во ВЦОД и в виртуальные кластеры.
  • Метки можно создавать и редактировать на узлах до создания первого ВЦОД (не считая ВЦОД управления). За исключением ситуаций, когда в кластер добавляется новый узел, и на нем еще нет меток.
  • Из обычной метки можно сделать метку-ограничение. Также из метки-ограничения можно сделать обычную метку, удалив у нее свойство taint. Добавлять или удалять свойство taint меткам можно только до создания первого ВЦОД (не считая ВЦОД управления).
  • Общие ограничения описаны выше.

Операции с метками кластера

  1. Создать и назначить метки узлам кластера

    Внимание

    Игнорировать можно те метки, которые были предварительно делегированы во ВЦОД

    scheduler labels add --labels <LABELS>
                         --nodes <NODES>
                         [--taints <TAINTS>]
                         [--descr <DESCR>]
    

    где

    • labels — список меток узла. Задается в формате key=value;
    • nodes — список идентификаторов узлов, на которые устанавливается метка. При значении * метка устанавливается на все узлы;
    • taints — свойство органичения для метки. Возможные значения:

      • n – метка останется обычной. Значение по умолчанию;
      • y — метка с ограничением NoSchedule;

      При указании --taints y метка будет помечена как метка-ограничение. ВМ будут размещаться только при явном указании этой метки в nodeSelector. Описание метки descr будет присвоено всем создаваемым меткам в данном запросе.

    • descr — описание метки.

    Пример

    scheduler labels add --labels node=security 
                         --nodes be492e22-d18d-46e6-9afc-b4c839ab584c bd2fcdfc-f4d3-4233-8a6b-f4ac4cbbf739 
                         --taints y 
                         --descr secure nodes for critical applications
    
  2. Назначить существующие метки узлам кластера

    scheduler labels assign --labels <LABELS>
                            --nodes <NODES>
    

    где

    • labels — список меток узла. Задается в формате key=value;
    • nodes — список идентификаторов узлов, на которые устанавливается метка. При значении * метка устанавливается на все узлы.

    Пример

    scheduler labels assign --labels graphics=fast disk=ssd 
                            --nodes be492e22-d18d-46e6-9afc-b4c839ab584c bd2fcdfc-f4d3-4233-8a6b-f4ac4cbbf739
    
  3. Просмотреть метки кластера со списками узлов

    scheduler labels list [--filter <FILTER>]
    

    где

    • filter — фильтрация меток. Возможные значения:

      • a — all, все метки;
      • i — ignored, игнорируемые метки;
      • u — unignored, все метки, кроме игнорируемых.
  4. Просмотреть узлы кластера со списками их меток

    scheduler labels list [--nodes <NODES>]
                          [--filter <FILTER>]
    

    где

    • nodes — список идентификаторов узлов. При значении * выводятся метки на всех узлах;
    • filter — фильтрация меток. Возможные значения:

      • a — all, все метки;
      • i — ignored, игнорируемые метки;
      • u — unignored, все метки, кроме игнорируемых.

    Пример

    scheduler labels list --nodes be492e22-d18d-46e6-9afc-b4c839ab584c
    
  5. Запросить список узлов кластера по определенным меткам

    Внимание

    Игнорируемые метки не будут учтены при поиске

    scheduler labels nodes list --labels <LABELS>
                                [--strict <STRICT>]
                                [--silent <SILENT>]
    

    где

    • labels — список меток. Задается в формате key=value;
    • strict — отображать узлы в соответствии с набором меток. Возможные значения:

      • при strict y отображать узлы, которые имеют все запрошенные метки;
      • при strict n отображать узлы, которые имеют хотя бы одну из запрошенных меток;
    • silent — отображать ошибки, если какие-либо метки не существуют. Возможные значения:

      • y — отображать ошибки;
      • n — не отображать ошибки.
    Пример

    Узлам A и B присвоены метки

    node labels
    A key=base, disk=ssd, foo=bar
    B key=base

    Запрос 1 вернет список [A, B]

    Запрос 1
    scheduler labels nodes list --labels key=base disk=ssd --strict n
    

    Запрос 2 вернет только A

    Запрос 2
    scheduler labels nodes list --labels key=base disk=ssd --strict y
    
  6. Игнорировать метки в пределах всего кластера.
    Если не указывать параметр ns, то метка заблокируется для всех новых и уже существующих ВЦОД: в новый ВЦОД метку добавить будет нельзя, а в уже существующих ВЦОД новые виртуальные кластеры будут создаваться без этой метки.

    Внимание

    Игнорировать можно те метки, которые были предварительно делегированы во ВЦОД

    scheduler labels ignore --labels <LABELS>
                            [--ns <NS>]
    

    где

    • labels — список меток для игнорирования;
    • ns — список ВЦОД. При значении * метки будут автоматически помечены как игнорируемые во всех ВЦОД кластера, куда они были делегированы.

    Пример

    scheduler labels ignore --labels disk=ssd key=base
    
  7. Сделать обычную метку меткой-ограничением

    scheduler labels taints add --labels <LABELS>
    

    Меткам, указанным в labels, будет присвоено ограничение NoSchedule.

    Пример

    scheduler labels taints add --labels foo=bar
    
  8. Сделать из метки-ограничения обычную метку

    scheduler labels taints del --labels <LABELS>
    

    Пример

    scheduler labels taints del --labels foo=bar
    
  9. Удалить метки кластера

    Примечание

    При удалении метки предварительно будет произведена попытка ее открепления со всех узлов кластера

    scheduler labels del --labels <LABELS>
    

    где labels — список меток для удаления.

    Пример

    scheduler labels del --labels disk=ssd key=base
    

Управлять метками во ВЦОД

Ограничения работы с метками во ВЦОД

  • При создании нового ВЦОД и при наличии в кластере базовой метки key=base и метки сервисного обслуживания system_drain_node=yes они будут автоматически делегированы в созданный ВЦОД.
  • Во ВЦОД нельзя делегировать метки, игнорируемые в пределах кластера.
  • При удалении ВЦОД все записи о делегированных ему метках удаляются.
  • Общие ограничения описаны выше.

Операции с метками во ВЦОД

Примечание

Действия выполняются пользователем с ролью Администратор кластера во ВЦОД управления

  1. Делегировать метки в заданные ВЦОД

    scheduler labels delegate ns --ns <NS>
                                 --labels <LABELS>
    

    где

    • ns — список имен ВЦОД. При значении * метка будет делегирована на все ВЦОД;
    • labels — список делегируемых меток. Задается в формате key=value.

    Пример

    scheduler labels delegate ns --ns vdc --labels disk=ssd key=base
    
  2. Просмотреть метки во ВЦОД

    Внимание

    Пользователи могут видеть метки только ВЦОД, в котором они находятся.
    При попытке запроса информации о других ВЦОД будет выдаваться ошибка.
    Исключение — ВЦОД управления

    scheduler labels ns show [--ns <NS>]
                             [--filter <FILTER>]
    

    где

    • ns — список имен ВЦОД для просмотра их меток.
      Администраторы кластера admins могут просмотреть метки всех ВЦОД кластера, добавив флаг --ns *.
      Чтобы ограничить вывод меток для определенных ВЦОД, администратор кластера должен указать их имена в --ns.
      Пользователям с другими ролями доступен просмотр меток только в своем ВЦОД без указания флага --ns.

    • filter — фильтрация меток. Возможные значения:

      • a — all, все метки;
      • i — ignored, игнорируемые метки;
      • u — unignored, все метки, кроме игнорируемых.
  3. Просмотр меток со списками ВЦОД, в которые они делегированы

    scheduler labels ns list [--ns <NS>]
                             [--filter <FILTER>]
    

    где

    • ns — список имен ВЦОД для просмотра делегированных меток.
      Администраторы кластера admins могут просмотреть делегированные метки всех ВЦОД кластера, добавив флаг --ns *.
      Чтобы ограничить вывод меток для определенных ВЦОД, администратор кластера должен указать их имена в --ns.
      Пользователям с другими ролями доступен просмотр делегированных меток только в своем ВЦОД без указания флага --ns.

    • filter — фильтрация меток. Возможные значения:

      • a — all, все метки;
      • i — ignored, игнорируемые метки;
      • u — unignored, все метки, кроме игнорируемых.
  4. Игнорировать метки в пределах заданных ВЦОД

    Внимание

    Игнорировать можно те метки, которые были предварительно делегированы во ВЦОД

    scheduler labels ignore --labels <LABELS>
                            [--ns <NS>]
    

    где

    • labels — список меток для игнорирования;
    • ns — список ВЦОД. При значении * метки будут автоматически помечены как игнорируемые во всех ВЦОД кластера, куда они были делегированы.

    Пример

    scheduler labels ignore --ns vdc --labels disk=ssd key=base
    

Термины и определения содержатся в статьях: