Поделиться через


Как настроить параметры создания контейнера для модулей IoT Edge

Область применения: Флажок IoT Edge 1.5 IoT Edge 1.5 Флажок IoT Edge 1.4 IoT Edge 1.4

Внимание

Поддерживаются выпуски IoT Edge 1.5 LTS и IoT Edge 1.4 LTS. IoT Edge 1.4 LTS заканчивается жизнью 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Параметр createOptions в манифесте развертывания позволяет настраивать контейнеры модуля во время выполнения. Этот параметр расширяет возможности управления модулями и позволяет выполнять такие задачи, как разрешение или запрещение доступа модуля к ресурсам устройства узла, а также настройка сети.

Модули IoT Edge реализуются на устройстве IoT Edge как контейнеры, совместимые с Docker. Docker предлагает множество параметров создания контейнеров, и эти параметры применимы к модулям IoT Edge. Чтобы узнать больше, ознакомьтесь с параметрами создания контейнеров Docker.

Форматирование параметров создания

Манифест развертывания IoT Edge принимает параметры создания в формате JSON. Например, рассмотрим параметры создания, автоматически включаемые для каждого модуля edgeHub.

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "5671/tcp": [
        {
          "HostPort": "5671"
        }
      ],
      "8883/tcp": [
        {
          "HostPort": "8883"
        }
      ],
      "443/tcp": [
        {
          "HostPort": "443"
        }
      ]
    }
  }
}

В этом примере edgeHub используется параметр HostConfig.PortBindings, позволяющий сопоставить предоставленные порты в контейнере с портом на устройстве узла.

Если вы используете расширение Azure IoT Edge для Visual Studio или Visual Studio Code, можно написать параметры создания в формате JSON в файле deployment.template.json . Затем, когда это расширение будет использовано для создания решения IoT Edge или создания манифеста развертывания, оно преобразует эти параметры JSON в строку в формате, который ожидает среда выполнения IoT Edge. Например:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

Внимание

Расширение Visual Studio Code Azure IoT Edge находится в режиме обслуживания. Средство iotedgedev — это рекомендуемое средство для разработки модулей IoT Edge.

Одним из советов по написанию параметров создания является использование команды docker inspect. В процессе разработки выполняйте модуль локально с помощью команды docker run <container name>. После того как модуль выполнит всю предназначенную ему работу, выполните команду docker inspect <container name>. Эта команда выводит данные модуля в формате JSON. Найдите настроенные вами параметры и скопируйте соответствующий код JSON. Например:

Снимок экрана: результаты команды docker проверьте edgeHub.

Распространенные сценарии

Параметры создания контейнера позволяют реализовать многие сценарии. Вот некоторые из сценариев, чаще всего возникающих при создании решений IoT Edge:

Сопоставление порта узла с портом модуля

Если модулю необходимо взаимодействовать со службой за пределами решения IoT Edge и для этого не используется маршрутизация сообщений, то необходимо сопоставлять порт узла с портом модуля.

Совет

Это сопоставление портов не требуется для обмена данными между модулями на одном устройстве. Если модулю А требуется запросить API, размещенный в модуле Б, то он может сделать это без сопоставления портов. Модуль Б должен предоставлять порт в своем файле dockerfile, например: EXPOSE 8080. Затем модуль А может запросить API, используя имя модуля Б, например: http://ModuleB:8080/api.

Сначала убедитесь, что порт в модуле открыт для ожидания подключений. Это можно сделать с помощью инструкции EXPOSE в файле dockerfile. Например, EXPOSE 8080. Если значение не указано, по умолчанию инструкция EXPOSE задает протокол TCP. Можно также указать протокол UDP.

Затем используйте параметр PortBindings в группе HostConfig параметров создания контейнера Docker, чтобы подключить предоставленный порт в модуле к порту на устройстве узла. Например, если вы предоставляли порт 8080 в модуле и хотите сопоставить его с портом 80 на устройстве узла, то параметры создания в файле template.js будут выглядеть, как в следующем примере:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

После преобразования в строку для манифеста развертывания эта конфигурация будет выглядеть, как в следующем примере:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"

Ограничение использования памяти и ЦП модулем

Можно объявить, какую часть ресурсов узла может использовать модуль. Это ограничение удобно и необходимо для того, чтобы один модуль не использовал слишком много ресурсов памяти или ЦП и не блокировал выполнение других процессов на устройстве. Вы можете управлять этими параметрами с помощью параметров создания контейнера Docker в группе HostConfig, включая следующие:

  • Memory: максимальный объем используемой памяти в байтах. Например, 268 435 456 байт = 256 МБ.
  • MemorySwap: общий максимальный объем памяти (память и файл подкачки). Например, 536870912 байт = 512 МБ.
  • NanoCpus: квота ЦП в единицах 10-9 (1 миллиард) ЦП. Например, 25000000 nanocpus = 0,25 ЦП.

В файле template.js эти значения будут выглядеть, как в следующем примере:

"createOptions": {
  "HostConfig": {
    "Memory": 268435456,
    "MemorySwap": 536870912,
    "NanoCpus": 250000000
  }
}

После преобразования в строку для окончательного манифеста развертывания эти значения будут выглядеть, как в следующем примере:

"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"

Оптимизация gpu модуля IoT Edge

Если вы используете модуль IoT Edge на виртуальной машине, оптимизированной для GPU, вы можете включить модуль IoT Edge для подключения к GPU. Для этого добавьте некоторые спецификации createOptionsв существующий модуль:

{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}

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

sudo docker inspect <YOUR-MODULE-NAME>

Дополнительные сведения о подключении устройства и виртуальной машины к GPU см. в статье Настройка, подключение и проверка модуля IoT Edge для GPU.

Следующие шаги

Дополнительные примеры практического применения параметров создания IoT Edge: