用于滚动标记的azure Iot边缘部署策略

用于滚动标记的azure Iot边缘部署策略,azure,azure-iot-edge,azure-iot-hub-device-management,Azure,Azure Iot Edge,Azure Iot Hub Device Management,我试图了解在给定特定设备部署策略的情况下,物联网边缘设备如何部署模块。以下是我的测试用例: 在我的开发机器上,我创建了一个定制的IoT边缘模块(基本上是VS代码中的默认CModule示例)。我手动将模块推送到我的Azure容器注册表,并手动将其标记为1.0.1和1.0 我创建了一个部署策略,其中包括我的自定义模块,如下所示 “模块”:{ “MyModule”:{ “版本”:“1.0”, “类型”:“docker”, “状态”:“正在运行”, “重新启动策略”:“始终”, “设置”:{ “图像

我试图了解在给定特定设备部署策略的情况下,物联网边缘设备如何部署模块。以下是我的测试用例:

  • 在我的开发机器上,我创建了一个定制的IoT边缘模块(基本上是VS代码中的默认CModule示例)。我手动将模块推送到我的Azure容器注册表,并手动将其标记为1.0.1和1.0
  • 我创建了一个部署策略,其中包括我的自定义模块,如下所示
“模块”:{
“MyModule”:{
“版本”:“1.0”,
“类型”:“docker”,
“状态”:“正在运行”,
“重新启动策略”:“始终”,
“设置”:{
“图像”:“/mymodule:1.0”,
“createOptions”:“{}”
}
}
}
  • 我创建了一个IoT边缘设备,该设备使用上述自定义部署策略进行部署(我正在使用标签来实现这一点)。我可以在我的测试机器上看到/mymodule:1.0 docker映像变得可用。测试机器上的docker ImageID与ImageID匹配
  • 在我的开发机器上,我然后稍微修改模块并重建它。我用1.0.2和1.0标记新模块docker映像,并将新标记推送到ACR。我可以在门户中看到新标签出现了
  • 然而,我的测试机器从未获得模块的新版本。Docker仍然显示旧的ImageID

那么,让现有部署策略强制更新设备上的模块版本的正确方法是什么?我认为基于我的模块使用的是一种滚动标记方案。

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

如果在部署中使用滚动标记,则需要强制设备上的容器运行时提取映像的最新版本

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


实际操作:如果再次手动在设备上拖动相同的图像(
docker pull/mymodule:1.0
),IoEdge将在设备上看到图像已更改。然后,它将使用新的映像版本在本地重新部署模块。

是的,如您发布的like中所述:

如果在部署中使用滚动标记,则需要强制设备上的容器运行时提取映像的最新版本

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


实际操作:如果再次手动在设备上拖动相同的图像(
docker pull/mymodule:1.0
),IoEdge将在设备上看到图像已更改。然后,它将使用新的映像版本在本地重新部署模块。

感谢您指出这一点。我必须问(舌头和检查)如果edgeAgent没有像监视器版本那样基本,它提供了什么价值?首先,通常没有docker客户端这样做。第二:在大多数情况下,您不希望设备在没有通过更新的部署清单明确指示它们这样做的情况下获取新的映像版本。在上面的链接上还指出:“这种方法[特定标签]建议用于生产目的。”感谢您指出这一点。我必须问(舌头和检查)如果edgeAgent没有像监视器版本那样基本,它提供了什么价值?首先,通常没有docker客户端这样做。第二:在大多数情况下,您不希望设备在没有通过更新的部署清单明确指示它们这样做的情况下获取新的映像版本。在上面的链接上还指出:“这种方法[特定标签]建议用于生产目的。”
"modules": {
  "MyModule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
      "image": "<my_acr.azurecr.io>/mymodule:1.0",
      "createOptions": "{}"
    }
  }
}