Общие сведения об автоматических развертываниях IoT Edge для отдельных устройств или в требуемом масштабе

Область применения:IoT Edge 1.4 checkmark IoT Edge 1.4

Важно!

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

Автоматическое и многоуровневое развертывание полезны для управления модулями на большом количестве устройств IoT Edge и их настройки.

Azure IoT Edge предоставляет два способа настройки модулей для запуска на устройствах IoT Edge. Первый способ заключается в развертывании модулей отдельно на каждом устройстве. Вы создаете манифест развертывания, а затем применяете его к конкретному устройству по имени. Второй способ заключается в автоматическом развертывании модулей на любом зарегистрированном устройстве, соответствующем набору определенных условий. Вы создаете манифест развертывания, а затем определяете, к каким устройствам он применяется, на основе тегов в двойнике устройства.

Невозможно объединить одно устройство и автоматическое развертывание. Когда вы начнете использовать устройства IoT Edge с автоматическими развертываниями (с многоуровневыми развертываниями или без них), развертывания на каждом устройстве больше не поддерживаются.

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

Ниже описаны общие этапы развертывания.

  1. Оператор определяет манифест развертывания, описывающий набор модулей и целевых устройств.
  2. В результате служба Центр Интернета вещей взаимодействует со всеми целевыми устройствами, чтобы настроить их с объявленными модулями.
  3. Служба Центра Интернета вещей извлекает сведения о состоянии устройств IoT Edge и предоставляет эти сведения оператору для мониторинга. Например, оператор может заметить, что устройство Edge не было настроено успешно или во время выполнения произошел сбой модуля.
  4. В любое время, когда недавно целевые устройства IoT Edge приходят в интернет и подключаются к Центр Интернета вещей, они настроены для развертывания.

В этой статье описывается каждый компонент, связанный с настройкой и мониторингом развертывания. Пошаговое руководство по созданию и обновлению модулей см. в статье Развертывание и мониторинг большого числа модулей IoT Edge с помощью портала Azure.

Развертывание

Автоматическое развертывание IoT Edge назначает образы модуля IoT Edge для выполнения в качестве экземпляров в целевом наборе устройств IoT Edge. Автоматическое развертывание настраивает манифест развертывания IoT Edge для включения списка модулей с соответствующими параметрами инициализации. Развертывание можно назначить одному устройству (на основе идентификатора устройства) или группе устройств (на основе тегов). Когда устройство IoT Edge получает манифест развертывания, оно загружает и устанавливает образы контейнера из соответствующих репозиториев контейнера и настраивает их соответствующим образом. После создания развертывания оператор может выполнять мониторинг состояния развертывания, чтобы отслеживать, правильно ли настроены целевые устройства.

Только устройства IoT Edge можно настроить с помощью развертывания. Чтобы устройство получило развертывание, на нем должны быть установлены следующие необходимые компоненты:

  • базовая операционная система;
  • система управления контейнерами, например Moby или Docker;
  • подготовка среды выполнения IoT Edge.

Манифест развертывания

Манифест развертывания — это документ JSON, описывающий модули, которые нужно настроить на целевых устройствах IoT Edge. Он содержит метаданные конфигурации для всех модулей, включая необходимые системные модули (в частности, агент IoT Edge и концентратор IoT Edge).

Метаданные конфигурации для каждого модуля содержат:

  • Версия
  • Тип
  • Состояние (например, запуск или остановка)
  • Политика перезапуска
  • образ и реестр контейнеров;
  • маршруты для входных и выходных данных.

Если образ модуля хранится в закрытом реестре контейнеров, то агент IoT Edge содержит учетные данные реестра.

Условие назначения

Условие целевого устройства постоянно оценивается в течение всего времени существования развертывания. Все новые устройства, соответствующие требованиям, включены и все существующие устройства, которые больше не соответствуют требованиям, удаляются. Развертывание повторно активируется, если служба обнаруживает любое изменение состояния целевого устройства.

Например, у вас есть развертывание с целевым условием tags.environment = 'prod'. При запуске развертывания существует 10 рабочих устройств. Модули успешно устанавливаются на эти 10 устройств. Состояние агента IoT Edge отображается так: всего 10 устройств, 10 успешных ответов, 0 ответов с ошибками и 0 ответов в ожидании. Теперь вы добавите еще пять устройств с tags.environment = 'prod'. Служба обнаруживает изменение и состояние агента IoT Edge теперь отображает 15 общих устройств, 10 успешных ответов, 0 ответов на сбои и 5 ожидающих ответов во время развертывания на пяти новых устройствах.

Если развертывание не имеет целевого условия, оно применяется к устройствам.

Используйте любое логическое условие в тегах двойника устройства, передаваемые свойства в тегах двойника устройства или deviceId для выбора целевых устройств. Если вы хотите использовать условие с тегами, необходимо добавить "tags":{} раздел в двойник устройства на том же уровне, что и свойства. Дополнительные сведения о тегах в двойнике устройства см. в разделе "Общие сведения о двойниках устройств" и их использовании в Центр Интернета вещей. Дополнительные сведения об операциях запросов см. в разделе Центр Интернета вещей операторов языка запросов и функции IS_DEFINED.

Примеры целевых условий:

  • deviceId ='linuxprod1'
  • tags.environment ='prod'
  • tags.environment = 'prod' AND tags.location = 'westus'
  • tags.environment = 'prod' OR tags.location = 'westus'
  • tags.operator = 'John' AND tags.environment = 'prod' AND NOT deviceId = 'linuxprod1'
  • properties.reported.devicemodel = "4000x"
  • IS_DEFINED(tags.remote)
  • NOT IS_DEFINED(tags.location.building)
  • tags.environment != null
  • [нет]

При создании целевого условия учитывайте следующие ограничения:

  • В двойнике устройства можно создать только целевое условие с помощью тегов, сообщаемых свойств или deviceId.
  • В целевом условии не разрешается использовать двойные кавычки. Используйте одинарные кавычки.
  • Одинарные кавычки представляют значения целевого условия. Поэтому необходимо экранировать одинарные кавычки с помощью других одинарных кавычек, если они являются частью имени устройства. Например, если целевым объектом является устройство с именем operator'sDevice, запишите deviceId='operator''sDevice'.
  • Для значений целевого условия можно использовать цифры, буквы и следующие символы: "()<>@,;:\\"/?={} \t\n\r.
  • Следующие символы не допускаются в ключах целевого условия:/;.

Приоритет

Приоритет определяет, следует ли применять развертывание для целевого устройства по отношению к другим развертываниям. Приоритет развертывания является положительным целым числом в диапазоне от 0 до 2 147 483 647. Более крупные числа указывают на более высокий приоритет. Если для устройства IoT Edge предназначено несколько развертываний, применяется развертывание с самым высоким приоритетом. Развертывания с более низким приоритетом не применяются и не объединяются. Если для устройства предназначено два или больше развертываний с одинаковым приоритетом, будет применяться самое последнее созданное развертывание (определяется меткой времени создания).

Наклейки

Метки — это пары строк "ключ — значение", которые можно использовать для фильтрации и группирования развертываний. Развертывание может иметь несколько меток. Метки являются необязательными и не влияют на конфигурацию устройств IoT Edge.

Метрики

По умолчанию все развертывания сообщают четыре метрики:

  • Целевые объекты отображает устройства IoT Edge, которые соответствуют условиям назначения развертывания.
  • Применено отображение целевых устройств IoT Edge, которые не предназначены для другого развертывания с более высоким приоритетом.
  • В отчетах об успешном выполнении показаны устройства IoT Edge, которые сообщают о своих модулях успешно развернутыми.
  • Сбой отчетов показывает устройства IoT Edge, которые сообщают об одном или нескольких модулях, развернутых безуспешно. Для дальнейшего изучения ошибки удаленно подключитесь к этим устройствам и просмотрите файлы журнала.

Кроме того, вы можете определить собственные метрики, помогающие отслеживать развертывание и управлять им.

Метрики предоставляют общее количество различных состояний, которые устройства могут передавать в результате применения конфигурации развертывания. Метрики могут запрашивать передаваемые свойства двойника модуля edgeHub, такие как lastDesiredStatus или lastConnectTime.

Например:

SELECT deviceId FROM devices
  WHERE properties.reported.lastDesiredStatus.code = 200

Добавление собственных метрик необязательно и не влияет на фактическую конфигурацию устройств IoT Edge.

Многоуровневое развертывание

Многоуровневые развертывания — это автоматические развертывания, которые можно объединять для уменьшения количества создаваемых уникальных развертываний. Многоуровневые развертывания полезны в сценариях, в которых одни и те же модули повторно используются в различных сочетаниях во многих автоматических развертываниях.

Многоуровневые развертывания имеют те же базовые компоненты, что и любое автоматическое развертывание. Они предназначены для устройств на основе тегов в двойниках устройств и предоставляют те же функции, что и метки, метрики и отчеты о состоянии. Многоуровневые развертывания также имеют приоритеты, назначенные им. Вместо использования приоритета для определения того, какое развертывание применяется к устройству, приоритет определяет, как на устройстве ранжируется несколько развертываний. Например, если два многоуровневых развертывания имеют модуль или маршрут с одним и тем же именем, то будет применено многоуровневое развертывание с более высоким приоритетом, а развертывание с более низким приоритетом — перезаписано.

Модули среды выполнения системы, известные как edgeAgent и edgeHub, не настроены в рамках многоуровневого развертывания. Для любого устройства IoT Edge, ориентированного на многоуровневое развертывание, сначала требуется стандартное автоматическое развертывание, примененное к нему. Автоматическое развертывание предоставляет основу, на которую можно добавлять многоуровневые развертывания.

К устройству IoT Edge может быть применено одно и только одно стандартное автоматическое развертывание, но возможно применение нескольких многоуровневых автоматических развертываний. Приоритет всех многоуровневых развертываний, предназначенных для устройства, должен быть выше автоматического развертывания для этого устройства.

Например, рассмотрим следующий сценарий компании, которая управляет зданиями. Компания разработала модули IoT Edge для сбора данных из камер безопасности, датчиков движения и лифтов. Однако не во всех зданиях можно использовать все три модуля. При использовании стандартных автоматических развертываний компании нужно создать отдельные развертывания для всех сочетаний модулей, необходимых для ее зданий.

Screenshot of showing that standard automatic deployments need to accommodate every module combination.

Однако после перехода компании на многоуровневые автоматические развертывания они могут создавать те же сочетания модулей для своих зданий с меньшим количеством развертываний для управления. Каждый модуль имеет собственное многоуровневое развертывание, а теги устройств определяют, какие модули добавляются в каждое здание.

Screenshot that shows how layered automatic deployments simplify scenarios where the same modules are combined in different ways.

Конфигурация двойника модуля

При работе с многоуровневыми развертываниями у вас может оказаться (преднамеренно или нет) два развертывания с одним и тем же модулем, предназначенным для устройства. В таких случаях вы можете решить, будет ли развертывание с более высоким приоритетом перезаписывать двойник модуля или добавляться к нему. Например, у вас может быть развертывание, которое применяет один и тот же модуль для 100 различных устройств. Однако 10 этих устройств находятся в защищенных помещениях и требуют дополнительной настройки для взаимодействия через прокси-серверы. Вы можете использовать многоуровневое развертывание для добавления свойств двойника модуля, которые обеспечивают безопасное взаимодействие этих 10 устройств без перезаписи существующих сведений о двойниках модуля из базового развертывания.

Вы можете добавить необходимые свойства двойника модуля в манифест развертывания. В стандартном развертывании вы добавите свойства в раздел properties.desired двойника модуля. Но в многоуровневом развертывании можно объявить новое подмножество требуемых свойств.

Например, в стандартном развертывании вы можете добавить смоделированный модуль датчика температуры со следующими требуемыми свойствами, которые указывают, что он должен отправлять данные с 5-секундным интервалом:

"SimulatedTemperatureSensor": {
  "properties.desired": {
    "SendData": true,
    "SendInterval": 5
  }
}

В многоуровневом развертывании, предназначенном для некоторых или всех этих же устройств, можно добавить свойство, которое сообщает имитированному датчику отправлять 1000 сообщений, а затем остановиться. Вы не хотите перезаписывать существующие свойства, поэтому создайте в нужных свойствах новый раздел layeredProperties, который содержит новое свойство:

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties": {
    "StopAfterCount": 1000
  }
}

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

"properties": {
  "desired": {
    "SendData": true,
    "SendInterval": 5,
    "layeredProperties": {
      "StopAfterCount": 1000
    }
  }
}

Если задать properties.desired поле двойника модуля в многоуровневом развертывании, properties.desired перезаписывает нужные свойства для этого модуля в любых развертываниях с низким приоритетом.

Поэтапное развертывание

Поэтапное развертывание — это общий процесс, с помощью которого оператор развертывает изменения в расширенном наборе устройств IoT Edge. Цель состоит в том, чтобы постепенно вносить изменения, чтобы снизить риск внесения крупномасштабных критических изменений. Автоматические развертывания помогают управлять поэтапным развертыванием в рамках всего парка устройств IoT Edge.

Поэтапное развертывание выполняется в несколько этапов и шагов:

  1. Определите тестовую среду устройств IoT Edge, подготовив их и задав тег двойника устройства следующим образом: tag.environment='test'. Тестовая среда должна отражать рабочую среду, для которой в итоге будет применено развертывание.
  2. Создайте развертывание, включающее необходимые модули и конфигурации. Условие назначения должно быть нацелено на тестовую среду устройства IoT Edge.
  3. Проверьте новую конфигурацию модуля в тестовой среде.
  4. Обновите развертывание, чтобы включить подмножество рабочих устройств IoT Edge, добавив новый тег в условие назначения. Кроме того, убедитесь, что приоритет развертывания выше, чем у других развертываний, нацеленных на эти устройства.
  5. Убедитесь, что развертывание успешно выполнено на целевых устройствах IoT Edge, просматривая состояние развертывания.
  6. Обновите развертывание для использования всех оставшихся рабочих устройств IoT Edge.

Откат

Вы можете выполнить откат развертываний, если произошли ошибки или в случае неправильной конфигурации. Так как развертывание определяет абсолютную конфигурацию модуля для устройства IoT Edge, дополнительное развертывание должно также предназначаться для того же устройства с низким приоритетом, даже если необходимо удалить все модули.

Удаление развертывания не приводит к удалению модулей с целевых устройств. Потребуется другое развертывание (хотя бы пустое), определяющее новую конфигурацию для устройств.

Однако удаление развертывания может удалить модули из целевого устройства, если это было многоуровневое развертывание. Многоуровневое развертывание обновляет базовое развертывание, потенциально добавляя модули. Удаление многоуровневого развертывания удаляет его обновление в базовом развертывании, потенциально удаляя модули.

Например, устройство имеет базовое развертывание A и многоуровневые развертывания O и M, примененные к нему (чтобы развертывания A, O и M развертывались на устройстве). Если многоуровневое развертывание M удаляется, А и O применяются к устройству, а модули, уникальные для развертывания M, удаляются.

Выполните откаты в следующей последовательности:

  1. Подтвердите, что второе развертывание также предназначено для того же набора устройств. Если целью отката является удалить все модули, второе развертывание не должно содержать никаких модулей.
  2. Измените или удалите выражение условия назначения развертывания, которое вы хотите откатить, чтобы устройство больше не соответствовало условиям назначения.
  3. Убедитесь, что откат выполнен успешно, просмотрев состояние развертывания.
    • Развертывание, откат которого выполнен, не должно отображать состояние для устройств, откат которых был выполнен.
    • Второе развертывание теперь должно включать состояние развертывания для устройств, откат которых был выполнен.

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