Node Feature Discovery#

Node Feature Discovery - инструмент, предназначенный для обнаружения аппаратных функций node в кластере DropApp. Определяет доступные функции на каждом node и сообщает о них с помощью меток. При необходимости, информирует о расширенных ресурсах node, аннотациях и метках node, которые указывают, где нельзя размещать pods.

Node Feature Discovery состоит из следующих компонентов:

  • nfd-master - компонент, который отвечает за коммуникацию с DropApp API. Получает запросы на маркировку от nfd-worker и изменяет объекты node;

  • nfd-worker - компонент, который отвечает за обнаружение аппаратных функций node;

  • nfd-topology-updater - компонент, который отвечает за обновление топологии ресурсов node;

  • nfd-gc - компонент, который отвечает за очистку устаревших объектов NodeFeature и NodeResourceTopology.

Предполагается, что компоненты будут работать на каждом node кластера.

Обнаружение функций делится на доменные источники функций:

  • CPU;

  • Kernel;

  • Memory;

  • Network;

  • PCI;

  • Storage;

  • System;

  • USB;

  • Custom (пользовательские функции на основе правил);

  • Local (hooks для пользовательских функций).

Каждый источник отвечает за обнаружение определенного набора функций, которые преобразуются в метки функций node. Метки функций node начинаются с префикса feature.node.kubernetes.io/ и содержат имя источника функций. Нестандартные пользовательские метки функций могут быть созданы с помощью Custom и Local.

Обзор меток функций по умолчанию:

{
  "feature.node.kubernetes.io/cpu-<feature-name>": "true",
  "feature.node.kubernetes.io/custom-<feature-name>": "true",
  "feature.node.kubernetes.io/kernel-<feature name>": "<feature value>",
  "feature.node.kubernetes.io/memory-<feature-name>": "true",
  "feature.node.kubernetes.io/network-<feature-name>": "true",
  "feature.node.kubernetes.io/pci-<device label>.present": "true",
  "feature.node.kubernetes.io/storage-<feature-name>": "true",
  "feature.node.kubernetes.io/system-<feature name>": "<feature value>",
  "feature.node.kubernetes.io/usb-<device label>.present": "<feature value>",
  "feature.node.kubernetes.io/<file name>-<feature name>": "<feature value>"
}

Установка Node Feature Discovery#

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

  1. Установите Node Feature Discovery с помощью команды:

    kubectl apply -k https://<repoexample.ru>/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=v0.15.4
    # Укажите актуальный путь до локального репозитория
    
  2. Выполните команду для получения информации о всех объектах в namespace node-feature-discovery, а именно развертывания, сервисы, конфигурационные объекты и т.д.:

    kubectl -n node-feature-discovery get all
    
  3. Используйте команду для получения информации о метках всех nodes в кластере DropApp:

    kubectl get no -o json | jq '.items[].metadata.labels'
    

    Результатом выполнения этой команды будет JSON-объект, содержащий метки всех nodes в кластере. Метки могут включать информацию об архитектуре node, операционной системе, аппаратных функциях и т.д.