Политика развертывания Azure Iot Edge для скользящей маркировки

Я пытаюсь понять, как устройства IoT Edge развертывают модули с учетом конкретной политики развертывания устройства. Вот мой тестовый пример:

  • На своей машине разработки я создал настраиваемый модуль IoT Edge (по сути, пример CModule по умолчанию из VS Code). Я вручную поместил модуль в свой реестр контейнеров Azure и вручную пометил его 1.0.1 и 1.0.
  • Я создал политику развертывания, которая включает в себя мой настраиваемый модуль, например
"modules": {
  "MyModule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
      "image": "<my_acr.azurecr.io>/mymodule:1.0",
      "createOptions": "{}"
    }
  }
}
  • Я создал устройство IoT Edge, которое развертывается с помощью указанной выше настраиваемой политики развертывания (для этого я использую теги). На своем тестовом компьютере я вижу, что изображение докера /mymodule:1.0 становится доступным. Docker ImageID на тестовой машине соответствует ImageID
  • Затем на моей машине разработки я очень немного модифицирую модуль и перестраиваю его. Я помечаю новый образ докера модуля с помощью 1.0.2 и 1.0 и помещаю новые теги в ACR. Я вижу на портале, что появляются новые теги.
  • Однако моя тестовая машина никогда не получает новую версию модуля. Докер по-прежнему показывает старый ImageID.

Итак, как правильно заставить мою существующую политику развертывания обновлять версию модуля на моем устройстве? Я думал, что на основе https://docs.microsoft.com/en-us/azure/iot-edge/how-to-update-iot-edge#understand-iot-edge-tags мой модуль использует схема скользящих тегов.


person Paul Grinberg    schedule 12.12.2019    source источник


Ответы (1)


Да, как указано в том, что вы опубликовали:

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

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

Что вы действительно можете сделать: если вы снова вручную загрузите тот же образ на устройство (docker pull <my_acr.azurecr.io>/mymodule:1.0), iotedge увидит на устройстве, что образ был изменен. Затем он повторно развернет модуль локально с новой версией образа.

person silent    schedule 12.12.2019
comment
спасибо, что указали на это. Тогда я должен спросить (язык и проверить), какое значение предоставляет edgeAgent, если он не является чем-то таким же простым, как версии монитора? - person Paul Grinberg; 12.12.2019
comment
Во-первых, обычно этого не делает ни один докер-клиент. Во-вторых: в большинстве сценариев вы не хотите, чтобы устройства извлекали новую версию образа без явного указания им сделать это через обновленный манифест развертывания. Также по ссылке выше говорится: Этот подход [определенные теги] предлагается для производственных целей. - person silent; 12.12.2019