Проброс PCI-устройств доступен в коммерческих редакциях Deckhouse Platform (DP).

Проброс PCI-устройств позволяет использовать в виртуальной машине (ВМ) физическое устройство узла, например промышленный контроллер, аппаратный модуль безопасности, плату видеозахвата или ПЛИС. Устройство работает в гостевой операционной системе под её собственным драйвером, поэтому установите этот драйвер в гостевой системе самостоятельно.

Устройства выдаёт проекту администратор, он же обеспечивает требования к узлам и версиям кластера.

Подключение PCI-устройства к ВМ

Устройства, которые администратор предоставил вашему проекту, доступны в неймспейсе как ресурсы PCIDevice. Чтобы подключить такое устройство к машине, выполните следующие шаги.

  1. Выберите устройство среди доступных:

    d8 k get pcidevice -n my-project
    

    Пример вывода:

    NAME                                            NODE     ADDRESS        ATTACHED   AGE
    pci-4f2c0b1e8d9a3c5b7e1f0a2d4c6b8e0f1a3c5d7e    node-1   0000:3b:00.0   False      10m
    

    Если список пуст, обратитесь к администратору, чтобы он назначил устройство вашему неймспейсу.

  2. Добавьте устройство в параметр .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
    

    Устройства подключаются при запуске машины, поэтому изменение этого параметра требует её перезапуска.

  3. Убедитесь, что устройство подключено к машине:

    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 не выдаёт и не учитывает.

Дополнительные ресурсы