更新 IoT Edge

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

当 IoT Edge 服务发布新版本时,你可以更新 IoT Edge 设备,使其获得最新功能并改善安全性。 本文提供有关在新版本推出时如何更新 IoT Edge 设备的信息。

若要转移到较新的版本,需要更新 IoT Edge 设备的两个逻辑组件。

  • 安全子系统 - 尽管安全子系统的体系结构在版本 1.1 和 1.2 之间发生了变化,但其责任保持不变。 它在设备上运行,处理基于安全性的任务,并在设备启动时启动模块。 只能从设备本身更新安全子系统。

  • IoT Edge 运行时 - IoT Edge 运行时由 IoT Edge 中心 (edgeHub) 和 IoT Edge 代理 (edgeAgent) 模块组成。 根据部署的构造方式,可以从设备或者远程更新运行时。

更新方法

参考本文的各个部分更新设备上的安全子系统和运行时容器。

修补程序版本

在修补程序版本之间升级时(例如从 1.4.1 升级到 1.4.2),更新顺序并不重要。 安全子系统或运行时容器的升级顺序没有限制。 若要在修补程序版本之间更新,请执行以下操作:

  1. 更新安全子系统
  2. 更新运行时容器
  3. 验证版本是否匹配

可以随时对升级过程进行故障排除

主要或次要版本

在主要或次要版本之间升级时(例如从 1.1 升级到 1.4),请更新安全子系统和运行时容器。 在发布之前,我们会测试安全子系统和运行时容器的版本组合。 若要在主要或次要产品版本之间更新,请执行以下操作:

  1. 在设备上,使用命令 sudo systemctl stop iotedge 停止 IoT Edge,然后将其卸载。

  2. 在设备上,升级容器引擎:DockerMoby

  3. 在设备上,安装 IoT Edge

    如果使用 iotedge config import 导入旧配置,请修改生成的 /etc/aziot/config.toml 文件的 [agent.config] 映像,以将 1.4 映像用于 edgeAgent。

    有关详细信息,请参阅配置 IoT Edge 设备设置

  4. 在 IoT 中心,更新模块部署以引用最新的系统模块。

  5. 在设备上,使用 sudo iotedge config apply 启动 IoT Edge。

可以随时对升级过程进行故障排除

更新安全子系统

IoT Edge 安全子系统包括一组原生组件,这些组件需要使用 IoT Edge 设备上的包管理器进行更新。

使用命令 iotedge version 检查设备上运行的安全子系统的版本。 如果使用的是 IoT Edge for Linux on Windows,则需要通过 SSH 连接到 Linux 虚拟机以检查版本。

重要

如果要将设备从版本 1.0 或 1.1 更新到最新版本,安装和配置过程有所不同,需要执行额外的步骤。 有关详细信息,请参阅本文后面的步骤:特殊情况:从 1.0 或 1.1 更新到最新版本

在 Linux x64 设备上,使用 apt-get 或相应的包管理器将安全子系统更新到最新版本。

更新apt

sudo apt-get update

注意

有关从 Azure 获取最新存储库配置的说明,请参阅安装 IoT Edge 的预备步骤。

查看哪些 IoT Edge 版本可用:

apt list -a aziot-edge

更新 IoT Edge:

sudo apt-get install aziot-edge defender-iot-micro-agent-edge

运行 apt-get install aziot-edge 会升级安全子系统,并安装标识服务aziot-identity-service 作为必需的依赖项。

建议使用 Edge 代理安装微代理,以便启用 Edge 设备的安全监视和强化。

然后,重新应用配置以确保系统已完全更新。

sudo iotedge config apply

更新运行时容器

更新 IoT Edge 代理和 IoT Edge 中心容器的方式取决于在部署中使用的是滚动标记(如 1.1)还是特定标记(如 1.1.1)。

使用 iotedge logs edgeAgentiotedge logs edgeHub 命令检查设备上目前安装的 IoT Edge 代理和 IoT Edge 中心模块的版本。 如果使用的是 IoT Edge for Linux on Windows,则需要通过 SSH 连接到 Linux 虚拟机以检查运行时模块版本。

Screenshot of where to find the container version in console logs.

了解 IoT Edge 标记

IoT Edge 代理和 IoT Edge 中心映像使用与之关联的 IoT Edge 版本进行标记。 可通过两种不同的方法对运行时映像使用标记:

  • 滚动更新标记 - 仅使用版本号的前两个值来获取匹配这些数字的最新映像。 例如,每当有新版本指向最新的 1.1.x 版时,都会更新 1.1。 如果 IoT Edge 设备的容器运行时重新提取映像,则运行时模块会更新到最新版本。 Azure 门户中的部署默认使用滚动更新标记。 建议在开发时使用此方法。

  • 特定标记 - 使用版本号的所有三个值,以显式设置映像版本。 例如,1.1.0 在其初始版本发布后不会更改。 准备好更新时,可以在部署清单中声明新的版本号。 建议在生产环境中使用此方法。

更新滚动更新标记映像

如果在部署中使用滚动标记(例如 mcr.microsoft.com/azureiotedge-hub:1.1),则需要在设备上强制实施容器运行时,以提取最新版本的映像。

从 IoT Edge 设备中删除本地版本的映像。 在 Windows 计算机上,卸载安全子系统时也会删除运行时映像,因此不需再次执行此步骤。

docker rmi mcr.microsoft.com/azureiotedge-hub:1.1
docker rmi mcr.microsoft.com/azureiotedge-agent:1.1

可能需要使用 -f(强制)标志来删除映像。

IoT Edge 服务将拉取最新版本的运行时映像,并自动在设备上将其重新启动。

更新特定标记映像

如果在部署中使用特定标记(例如 mcr.microsoft.com/azureiotedge-hub:1.4),则只需更新部署清单中的标记,并将更改应用到设备即可。

  1. 在 Azure 门户的 IoT 中心,选择 IoT Edge 设备,然后选择“设置模块” 。

  2. 在“模块”选项卡上,选择“运行时设置”。

    Screenshot that shows location of the Runtime Settings tab.

  3. 在“运行时设置”中,使用所需的版本更新“Edge 代理”部分中的“映像 URI”值。 暂时不要选择“应用”。

    Screenshot that shows where to update the image URI with your version in the Edge Agent.

  4. 选择“Edge 中心选项卡”,使用相同的所需版本更新“映像 URI”值。

    Screenshot that shows where to update the image URI with your version in the Edge Hub.

  5. 选择“应用”以保存更改。

  6. 选择“查看 + 创建”,查看 JSON 文件中显示的部署,然后选择“创建”。

验证版本是否匹配

  1. 在设备上,使用 iotedge version 检查安全子系统版本。 输出包括主要、次要和修订版本号。 例如 iotedge 1.4.2。

  2. 在设备部署运行时设置中,验证 edgeHub 和 edgeAgent 映像 URI 版本是否与安全子系统的主要和次要版本匹配。 如果安全子系统版本为 1.4.2,则映像版本为 1.4。 例如,mcr.microsoft.com/azureiotedge-hub:1.4 和 mcr.microsoft.com/azureiotedge-agent:1.4。

注意

将 IoT Edge 安全子系统和运行时容器更新为同一个受支持的发行版。 虽然支持不匹配的版本,但我们尚未测试所有版本组合。

若要查找最新版本的 Azure IoT Edge,请参阅 Azure IoT Edge 版本

特殊情况:从 1.0 或 1.1 更新到最新版本

从版本 1.2 开始,IoT Edge 服务使用新的包名称,并且安装和配置过程有所不同。 如果 IoT Edge 设备运行版本 1.0 或 1.1,请使用以下说明了解如何更新到最新版本。

最新版本与 1.1 及更低版本之间的一些主要差别包括:

  • 包名称从 iotedge 更改为 aziot-edge 。
  • 不再使用 libiothsm-std 包。 如果你使用的是 IoT Edge 版本中提供的标准包,则可以将你的配置传输到新版本。 如果使用的是 libiothsm-std 的不同实现,则需要重新配置用户提供的任何证书,例如设备标识证书、设备 CA 和信任捆绑。
  • 1.2 版本中引入了新标识服务 aziot-identity-service。 此服务处理 IoT Edge 以及需要与 IoT 中心通信的其他设备组件的标识预配和管理。
  • 默认配置文件具有新的名称和位置。 默认情况下,设备配置信息现在应位于 /etc/aziot/config.toml 中,而以前位于 /etc/iotedge/config.yaml 中。 可借助 iotedge config import 命令将配置信息从旧位置迁移到新位置,并将旧语法更改为新语法。
    • 导入命令无法检测或修改设备受信任的平台模块 (TPM) 的访问规则。 如果设备使用 TPM 证明,则需要手动更新 /etc/udev/rules.d/tpmaccess.rules 文件以授予对 aziottpm 服务的访问权限。 有关详细信息,请参阅向 IoT Edge 授予 TPM 的访问权限
  • 最新版本中的工作负载 API 以新格式保存加密的机密。 如果从旧版本升级到最新版本,则会导入现有的主加密密钥。 工作负载 API 可以使用导入的加密密钥读取以先前的格式保存的机密。 但是,工作负载 API 无法以旧格式写入加密的机密。 在模块重新加密某个机密后,该机密将以新格式保存。 在最新版本中加密的机密无法被版本 1.1 中的同一模块读取。 如果将加密的数据持久保存到主机装载的文件夹或卷中,请始终在升级之前创建数据的备份副本,以便必要时能够降级。
  • 为了在连接不支持 TLS 1.2 的设备时保持后向兼容,可以通过 SslProtocols 环境变量将 Edge 中心配置为仍接受 TLS 1.0 或 1.1。 对 IoT 中心内的 TLS 1.0 和 1.1 的支持被视为传统功能,在将来的版本中也有可能会从 Edge 中心内删除。  为避免将来出现错误,请在连接到 Edge 中心或 IoT 中心时使用 TLS 1.2 作为唯一的 TLS 版本。
  • Edge 中心 1.2 中的试验性 MQTT 中转站预览版已停用,未包含在 Edge 中心 1.4 中。 我们将根据收到的反馈不断完善 MQTT 中转站计划。 同时,如果你需要在 IoT Edge 上使用符合标准的 MQTT 代理,请考虑将 Mosquitto 等开源代理部署为 IoT Edge 模块。
  • 从版本 1.2 开始,当从容器中删除备份映像时,容器将继续运行,并且在重启时保持存在。 在 1.1 中,当删除备份映像时,将立即重新创建容器,并更新备份映像。

在自动执行任何更新过程之前,请在测试计算机上验证其是否可正常工作。

准备就绪后,请按照以下步骤在你的设备上更新 IoT Edge:

  1. 更新 apt。

    sudo apt-get update
    
  2. 卸载先前版本的 IoT Edge,保留配置文件。

    sudo apt-get remove iotedge
    
  3. 安装最新版本的 IoT Edge 以及 IoT 标识服务和适用于 Edge 的 Microsoft Defender for IoT 微代理。

    sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

建议使用 Edge 代理安装微代理,以便启用 Edge 设备的安全监视和强化。

  1. 将旧 yaml 文件导入为其新格式,并应用配置信息。

    sudo iotedge config import
    

在设备上运行最新的 IoT Edge 服务后,还需要将运行时容器更新到最新版本。 运行时容器的更新过程与 IoT Edge 服务的更新过程相同。

疑难解答

可以随时通过在设备中运行以下命令来查看系统的日志。

  • 使用 check 命令开始故障排除。 此命令会针对常见问题运行一系列配置测试和连接测试。

    sudo iotedge check --verbose
    
  • 若要查看 IoT Edge 系统的状态,请运行:

    sudo iotedge system status 
    
  • 若要查看主机组件日志,请运行:

    sudo iotedge system logs
    
  • 若要检查针对 edgeAgent 和 edgeHub 报告的重复性问题,请运行:

    请务必请将 <module> 替换为你自己的模块名称。 如果没有问题,将不显示任何输出。

    sudo iotedge logs <module>
    

有关详细信息,请参阅对 IoT Edge 设备进行故障排除

后续步骤

查看最新的 Azure IoT Edge 版本

持续关注物联网博客中的最新更新和通告