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#
Для выполнения данного сценария необходимы права администратора.
Установите Node Feature Discovery с помощью команды:
kubectl apply -k https://<repoexample.ru>/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=v0.15.4 # Укажите актуальный путь до локального репозиторияВыполните команду для получения информации о всех объектах в namespace
node-feature-discovery, а именно развертывания, сервисы, конфигурационные объекты и т.д.:kubectl -n node-feature-discovery get allИспользуйте команду для получения информации о метках всех nodes в кластере DropApp:
kubectl get no -o json | jq '.items[].metadata.labels'Результатом выполнения этой команды будет JSON-объект, содержащий метки всех nodes в кластере. Метки могут включать информацию об архитектуре node, операционной системе, аппаратных функциях и т.д.