使用英语阅读

通过


更新 IoT Edge

适用于:确认图标 IoT Edge 1.1

重要

IoT Edge 1.1 终止支持日期为 2022 年 12 月 13 日。 请查看 Microsoft 产品生命周期,了解此产品、服务、技术或 API 的受支持情况。 有关更新到最新版本的 IoT Edge 的详细信息,请参阅 更新 IoT Edge

当 IoT Edge 服务发布新版本时,需要更新 IoT Edge 设备以获取最新功能和安全性改进。 本文提供有关在新版本推出时如何更新 IoT Edge 设备的信息。

若要转移到较新的版本,需要更新 IoT Edge 设备的两个逻辑组件。 第一个是安全子系统。 尽管安全子系统的体系结构在 版本 1.1 和 1.2 之间发生了变化,但其整体职责保持不变。 它在设备上运行,处理基于安全的任务,并在设备启动时启动模块。 目前,只能从设备本身更新安全子系统。 第二个组件是运行时,由 IoT Edge 中心和 IoT Edge 代理模块组成。 根据部署的结构方式,可以从设备或远程更新运行时。

你应该更新 IoT Edge 运行时和应用层,使它们使用相同的发布版本。 虽然支持版本不匹配,但不会同时测试它们。 使用本文中的以下部分更新设备上的运行时层和应用程序层:

  1. 更新安全子系统
  2. 更新运行时容器
  3. 验证版本是否匹配
    • 在您的设备上,使用 iotedge version 来检查安全子系统的版本。 输出包括主要、次要和修订版本号。 例如 iotedge 1.4.2。
    • 在设备部署运行时设置中,验证 edgehubedgeagent 映像 URI 版本是否与安全子系统的主版本和次要版本匹配。 如果安全子系统版本为 1.4.2,则映像版本为 1.4。 例如,mcr.microsoft.com/azureiotedge-hub:1.4 和 mcr.microsoft.com/azureiotedge-agent:1.4。

若要查找最新版本的 Azure IoT Edge,请参阅 Azure 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

备注

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

查看可用的 IoT Edge 版本。

apt list -a iotedge

如果要更新到最新版本的运行时模块,请使用以下命令,该命令还会将 libiothsm-std 更新到最新版本:

sudo apt-get install iotedge

如果要更新到运行时模块的特定版本,请从 apt 列表输出中指定版本。 每当 iotedge 更新时,它都会自动尝试将 libiothsm-std 包更新为其最新版本,这可能会导致依赖项冲突。 如果不打算使用最新版本,请确保将两个软件包都设置为同一版本。 例如,以下命令安装 1.1 版本的特定版本:

sudo apt-get install iotedge=1.1.1 libiothsm-std=1.1.1

如果想要安装的版本无法通过 apt-get 获得,则可以使用 curl 以 IoT Edge 版本 存储库中的任何版本为目标。 对于要安装的版本,请找到设备的相应 libiothsm-stdiotedge 文件。 对于每个文件,右键单击文件链接并复制链接地址。 使用链接地址安装这些组件的特定版本:

curl -L <libiothsm-std link> -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
curl -L <iotedge link> -o iotedge.deb && sudo apt-get install ./iotedge.deb

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

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 虚拟机以检查运行时模块版本。

在日志中查找容器版本

了解 IoT 边缘 标记

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

  • 滚动标签 - 仅使用版本号的前两个值来获取匹配这两个数字的最新映像。 例如,每当有新版本发布时,1.1 都会更新以指向最新的 1.1.x 版本。 如果 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.1.1),则只需更新部署清单中的标记并将更改应用到设备。

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

  2. “IoT Edge 模块 ”部分中,选择“ 运行时设置”。

    配置运行时设置

  3. 运行时设置中,使用所需版本更新 Edge Hub映像值。 请勿选择“ 保存 ”。

    更新 Edge Hub 镜像版本

  4. 折叠 Edge Hub 设置,或向下滚动,并使用相同的所需版本更新 Edge 代理映像 值。

    更新 Edge 中心代理版本

  5. 选择 保存

  6. 选择 “查看 + 创建”,查看部署,然后选择“ 创建”。

特殊情况:从 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 中心通信的其他设备组件,例如 IoT 中心的设备更新
  • 默认配置文件具有新的名称和位置。 设备配置信息以前位于 /etc/iotedge/config.yaml,现在默认位于 /etc/aziot/config.toml。 可借助 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 中心中删除。 若要避免将来出现的问题,请使用 TLS 1.2 作为连接到 Edge 中心或 IoT 中心时的唯一 TLS 版本。
  • Edge Hub 1.2 中试验 MQTT 代理的预览版已结束,并且未包含在 Edge Hub 1.3 或更高版本中。 我们将继续根据收到的反馈优化 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 设备的安全监控与强化。 若要详细了解 Microsoft Defender for IoT,请参阅什么是适用于设备生成器的 Microsoft Defender for IoT

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

    sudo iotedge config import
    

现在,设备上运行的 IoT Edge 服务已更新,请按照本文中的步骤 更新运行时容器

后续步骤

查看最新的 Azure IoT Edge 版本

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