用于滚动标记的 Azure IoT Edge 部署策略

标签 azure azure-iot-edge azure-iot-hub-device-management

我试图了解 IoT Edge 设备如何在给定特定设备部署策略的情况下部署模块。这是我的测试用例:

  • 在我的开发计算机上,我创建了一个自定义 IoT Edge 模块(本质上是 VS Code 中的默认 CModule 示例)。我手动将该模块推送到我的 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 镜像变得可用。测试机上的docker ImageID与ImageID匹配
  • 在我的开发机器上,我稍微修改了模块并重建它。我用 1.0.2 和 1.0 标记新模块 docker 镜像,并将新标记推送到 ACR。我可以在门户中看到新标 checkout 现。
  • 但是,我的测试机从未获得该模块的新版本。 Docker 仍然显示旧的 ImageID。

那么让我的现有部署策略强制更新我的设备上的模块版本的正确方法是什么?我认为基于https://learn.microsoft.com/en-us/azure/iot-edge/how-to-update-iot-edge#understand-iot-edge-tags我的模块使用滚动标记方案。

最佳答案

是的,正如您发布的类似内容中所述:

If you use rolling tags in your deployment then you need to force the container runtime on your device to pull the latest version of the image.

因此,通过使用滚动标签,设备上不会自动发生任何事情。因为:为什么要这样做?这些设备不会监视您的容器注册表的更改。

您实际可以做什么:如果您再次在设备上手动拉取相同的镜像 ( docker pull <my_acr.azurecr.io>/mymodule:1.0 ),iotedge 将在设备上看到该镜像已更改。然后它将使用新的镜像版本在本地重新部署模块。

关于用于滚动标记的 Azure IoT Edge 部署策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311214/

相关文章:

c# - 具有 .NET Standard 目标的 Azure 云服务经典版

docker - 我可以在 Microsoft IoT Edge 中运行任何 docker 容器吗?

azure - 将自定义域添加到 Azure Web 应用程序而不进行验证

database - SSMS:如何将数据库从 SQL Server 复制到 Azure SQL Server?

android - 对于以 SQLite 和 Azure SQL 数据库作为中央存储的在线/离线多客户端移动应用程序来说,最佳主键策略是什么?

Azure IOT 中心预配错误 : AMQP transport exception IotHubUnauthorizedAccess 401002

c# - 如何获取云到设备的待处理消息计数

azure-iot-hub - 417 - 此设备的边缘代理配置为空?

部署后设备未报告 IoT Edge 上的 Azure 流分析模块

azure - Microsoft Azure Iot Hub 中的分区有什么作用?