Network Operator#
Network Operator - это сетевой оператор для управления сетевыми компонентами, который обеспечивает быструю работу сети, RDMA (Remote Direct Memory Access) и GPUDirect для рабочих нагрузок в кластере, упрощает выделение сетевых ресурсов в кластере и управление ими.
Он автоматически устанавливает необходимое программное обеспечение для сетевого доступа на хосте, объединяя все необходимые компоненты для высокоскоростного сетевого подключения - сетевой драйвер NVIDIA, плагины CNI, плагин для управления IP-адресами (IPAM) и другие.
Network Operator работает в сочетании с GPU Operator для обеспечения высокой пропускной способности и низкой задержки в сетях для кластеров GPU с расширяемыми вычислениями.
Основные функции:
Удаленный прямой доступ к памяти (RDMA) для передачи данных между модулями памяти в обход центрального процессора и сетевого стека ядра, поддерживающий протоколы InfiniBand и RDMA через конвергентный Ethernet (RoCE).
Виртуализация ввода-вывода на уровне
Single Root(SR-IOV), позволяющая разделять сетевые интерфейсные карты на несколько виртуальных функций (Virtual Functions, VF) для обеспечения аппаратной изоляции и повышения производительности.Поддержка нескольких типов вторичных сетевых интерфейсов, включая сети хост-устройств, MacVLAN, IP-сети через InfiniBand и сети SR-IOV для специализированных сетевых требований.
Автоматическое развертывание сетевых драйверов NVIDIA DOCA-OFED на узлах кластера и управление ими с помощью контроля версий и обновлений.
Установка Network Operator#
Для установки Network Operator со стандартными значениями параметров с помощью Helm-чарта выполните следующие шаги:
Добавьте Helm-чарт Network Operator:
helm repo add <repo-address> <chart-address>Примечание
Helm-чарт Network Operator не входит в состав текущей версии DropApp, для примера его можно скачать с официального сайта производителя.
Установите Network Operator со стандартными значениями параметров:
helm install <repo-address>/network-operator \ -n nvidia-network-operator \ --create-namespace \ --version <version> \ --set sriovNetworkOperator.enabled=true \ --waitЗапустите pod Network Operator:
kubectl -n nvidia-network-operator get pods
Для установки Network Operator с пользовательскими значениями параметров с помощью Helm-чарта выполните следующие шаги:
Добавьте Helm-чарт Network Operator:
helm repo add <repo-address> <chart-address>Примечание
Helm-чарт Network Operator не входит в состав текущей версии DropApp, для примера его можно скачать с официального сайта производителя.
Создайте файл
network-operator-values.yaml, содержащий значения по умолчанию:helm show values nvidia/network-operator --version <version> > network-operator-values.yamlСкорректируйте файл
network-operator-values.yamlв соответствии с потребностями пользователя:Пример пользовательских настроек параметров Network Operator
apiVersion: mellanox.com/v1alpha1 kind: NicClusterPolicy metadata: name: nic-cluster-policy spec: ofedDriver: image: doca-driver repository: <repo-address>/<chart-address> version: <version> forcePrecompiled: false imagePullSecrets: [] terminationGracePeriodSeconds: 300 startupProbe: initialDelaySeconds: 10 periodSeconds: 20 livenessProbe: initialDelaySeconds: 30 periodSeconds: 30 readinessProbe: initialDelaySeconds: 10 periodSeconds: 30 upgradePolicy: autoUpgrade: true maxParallelUpgrades: 1 safeLoad: false drain: enable: true force: true podSelector: "" timeoutSeconds: 300 deleteEmptyDir: true rdmaSharedDevicePlugin: image: k8s-rdma-shared-dev-plugin repository: <repo-address>/<chart-address> version: <version> imagePullSecrets: [] config: | { "configList": [ { "resourceName": "rdma_shared_device_a", "rdmaHcaMax": 63, "selectors": { "vendors": [], "deviceIDs": [], "drivers": [], "ifNames": ["ens1f0"], "linkTypes": [] } } ] }Установите Network Operator с пользовательскими значениями параметров:
helm install network-operator <repo-address>/network-operator \ -n nvidia-network-operator \ --create-namespace \ --version <version> \ -f ./network-operator-values.yaml \ --waitЗапустите pod Network Operator:
kubectl -n nvidia-network-operator get pods
Определение ресурсов#
Network Operator действует в соответствии с пользовательскими ресурсами NICClusterPolicy, определяющими подсостояние кластера для сетевых устройств.
Спецификация NICClusterPolicy включает в себя следующие поля (подсостояния):
ofedDriver- контейнер OFED-драйвера, который будет развернут на узлах поддержки.rdmaSharedDevicePlugin- подключаемый модуль RDMA Shared Device Plugin для общего доступа к устройствам RDMA и связанные с ним конфигурации.sriovDevicePlugin- подключаемый модуль сетевого устройства SR-IOV SR-IOV Network Device Plugin и связанные с ним конфигурации.ibKubernetes- InfiniBand Kubernetes и связанные с ним конфигурации.secondaryNetwork- компоненты для развертывания, упрощающие создание дополнительной сети в DropApp. Он состоит из опциональных компонентов:Плагин CNI для поддержки дополнительных сетей Multus CNI.
Плагины для работы с контейнерными сетями.
Плагин IP Over Infiniband (IPoIB) CNI Plugin для создания дочерних ссылок IPoIB и перемещения их в pod.
nvIpam- Kubernetes IPAM и связанные с ним конфигурации.nicConfigurationOperator- оператор настройки сетевой карты NIC Configuration Operator и связанная с ним конфигурация.
Примечание
Любое подсостояние может быть исключено, если оно не требуется для кластера.
Отказ от листинга драйверов#
В версии 5.1.0 в DropApp исключена проверка доступности и подбор тегов образов драйверов через прямое обращение к container registry. Изменение устраняет зависимость установки и работы оператора от сетевой доступности реестра на этапе валидации образа. Не требуется предоставлять оператору учетные данные для выполнения операций листинга образов.
В текущей реализации Network Operator не получает список тегов и не проверяет наличие указанного тега через API registry. Значение версии принимается из поля spec.ofedDriver.version ресурса NicClusterPolicy и используется при формировании ссылки на образ.
Например, для конфигурации:
apiVersion: mellanox.com/v1alpha1
kind: NicClusterPolicy
metadata:
name: nic-cluster-policy
spec:
ofedDriver:
image: doca-driver
repository: registry.example.local/platform-v
version: doca3.1.0-25.07-0.9.7.0-0
Оператор формирует ссылку на образ без предварительного запроса списка тегов в registry.example.local:
registry.example.local/platform-v/doca-driver:doca3.1.0-25.07-0.9.7.0-0
Использование imagePullSecrets#
Поля imagePullSecrets сохраняются в CRD и API без изменений для совместимости с upstream NVIDIA Network Operator. В upstream-конфигурациях эти поля предназначены для передачи ссылок на Secret, используемые при загрузке образов из закрытых реестров.
Примечание
В DropApp imagePullSecrets не используются оператором для аутентификации при листинге registry, поскольку прямой листинг и проверка тегов отключены.
При необходимости загрузки образа из приватного registry необходимо, чтобы Secret для аутентификации был доступен и назначен тем Kubernetes-объектам, которые выполняют загрузку образа (например, ServiceAccount или pod драйвера). Пример настройки поля в NicClusterPolicy:
spec:
ofedDriver:
image: doca-driver
repository: registry.example.local/platform-v
version: doca3.1.0-25.07-0.9.7.0-0
imagePullSecrets:
- registry-credentials
Требования к конфигурации#
Перед применением NicClusterPolicy:
укажите полный набор параметров образа:
repository,imageиversion;убедитесь, что указанный тег опубликован в целевом
registry;при использовании приватного
registryнастройте аутентификацию для фактической загрузки образа;обеспечьте сетевой доступ узлов к
registry, с которого будет загружаться образ.
Если тег отсутствует, недоступен registry или настроены неверные учетные данные для загрузки, ошибка будет зафиксирована при создании и запуске pod драйвера, а не на этапе обращения оператора к API реестра.
Совместимость#
Изменение не требует корректировки манифестов NicClusterPolicy и не изменяет схему CRD. Параметры imagePullSecrets сохранены, поэтому манифесты, подготовленные для vanilla NVIDIA Network Operator, остаются совместимыми.
При миграции достаточно удалить из эксплуатационных требований необходимость предоставлять оператору отдельный pull secret для выполнения запросов к registry. Значения imagePullSecrets, уже заданные в существующих политиках, допускается сохранить без изменений.