Проброс PCI-устройств доступен в коммерческих редакциях Deckhouse Platform (DP).
Проброс PCI-устройств позволяет использовать в виртуальной машине (ВМ) физическое устройство узла, например промышленный контроллер, аппаратный модуль безопасности, плату видеозахвата или ПЛИС. Устройство работает в гостевой операционной системе под её собственным драйвером, поэтому установите этот драйвер в гостевой системе самостоятельно.
Устройства выдаёт проекту администратор, он же обеспечивает требования к узлам и версиям кластера.
Подключение PCI-устройства к ВМ
Устройства, которые администратор предоставил вашему проекту, доступны в неймспейсе как ресурсы PCIDevice. Чтобы подключить такое устройство к машине, выполните следующие шаги.
-
Выберите устройство среди доступных:
d8 k get pcidevice -n my-projectПример вывода:
NAME NODE ADDRESS ATTACHED AGE pci-4f2c0b1e8d9a3c5b7e1f0a2d4c6b8e0f1a3c5d7e node-1 0000:3b:00.0 False 10mЕсли список пуст, обратитесь к администратору, чтобы он назначил устройство вашему неймспейсу.
-
Добавьте устройство в параметр
.spec.pciDevicesресурса VirtualMachine:d8 k apply -f - <<EOF apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine metadata: name: linux-vm spec: # ... другие настройки ВМ ... pciDevices: - name: pci-4f2c0b1e8d9a3c5b7e1f0a2d4c6b8e0f1a3c5d7e EOFУстройства подключаются при запуске машины, поэтому изменение этого параметра требует её перезапуска.
-
Убедитесь, что устройство подключено к машине:
d8 k get vm linux-vm -o jsonpath='{.status.pciDevices}'Значение
trueв полеreadyозначает, что устройство доступно, а значениеtrueв полеattachedозначает, что устройство подключено к работающей машине. После запуска машины устройство появляется в гостевой системе, например в выводе командыlspci.
Чтобы отключить устройство, уберите его из параметра .spec.pciDevices и перезапустите машину. До этого устройство остаётся занятым, даже если машина остановлена, поэтому подключить его к другой машине нельзя.
Если устройство извлечено из узла, машина не запускается и остаётся в фазе Pending. В параметре .status.pciDevices такое устройство перестаёт быть готовым, но остаётся у машины, пока указано в её спецификации. Работающую машину DP при этом не останавливает, в том числе когда устройство стало недоступно проекту.
Ограничения
Подключая PCI-устройства, учитывайте следующие ограничения:
- машина с PCI-устройством запускается только на узле этого устройства и живой миграцией не переносится, поэтому при выводе узла на обслуживание её придётся остановить;
- все PCI-устройства одной машины должны находиться на одном узле, иначе спецификация будет отклонена;
- устройство подключается только к одной машине. Если оно уже указано в спецификации другой, DP отклонит вашу спецификацию;
- к одной машине подключается не более восьми PCI-устройств;
- проброшенная сетевая карта работает в обход сетевой подсистемы кластера. Она не отражается в параметре
.spec.networks, а адреса IP и MAC на ней DP не выдаёт и не учитывает.