更新 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 运行时和应用程序层更新为使用同一发行版。 虽然支持不匹配的版本,但它们不会一起测试。 使用本文中的以下部分来更新设备上的运行时和应用程序层:
- 更新安全子系统
- 更新运行时容器
- 验证版本是否匹配
- 在设备上,使用
iotedge version
检查安全子系统版本。 输出包括主要、次要和修订版本号。 例如 iotedge 1.4.2。 - 在设备部署运行时设置中,验证 edgehub 和 edgeagent 映像 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-std 和 iotedge 文件。 右键单击每个文件对应的链接,并复制链接地址。 使用链接地址安装这些组件的特定版本:
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 edgeAgent
或 iotedge logs edgeHub
命令检查设备上目前安装的 IoT Edge 代理和 IoT Edge 中心模块的版本。 如果使用的是 IoT Edge for Linux on Windows,则需要通过 SSH 连接到 Linux 虚拟机以检查运行时模块版本。
了解 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.1.1),则只需更新部署清单中的标记,并将更改应用到设备即可。
在 Azure 门户的 IoT 中心,选择 IoT Edge 设备,然后选择“设置模块” 。
在“IoT Edge 模块”部分中,选择“运行时设置” 。
在”运行时设置”中,将“Edge 中心”的“映像”值更新为所需的版本 。 暂时不要选择“保存”。
折叠“Edge 中心”设置,或向下滚动,将“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 的不同实现,则需要重新配置用户提供的所有证书(如设备标识证书、设备 CA 和信任捆绑)。
- 1.2 版本中引入了新标识服务 aziot-identity-service。 此服务处理 IoT Edge 以及需要与 IoT 中心通信的其他设备组件的标识预配和管理,如 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 Hub 1.2 中试验 MQTT 代理的预览版已结束,并且未包含在 Edge Hub 1.3 或更高版本中。 我们将根据收到的反馈不断完善 MQTT 中转站计划。 同时,如果你需要在 IoT Edge 上使用符合标准的 MQTT 代理,请考虑将 Mosquitto 等开源代理部署为 IoT Edge 模块。
- 从版本 1.2 开始,当从容器中删除备份映像时,容器将继续运行,并且在重启时保持存在。 在 1.1 中,当删除备份映像时,将立即重新创建容器,并更新备份映像。
在自动执行任何更新过程之前,请在测试计算机上验证其是否可正常工作。
准备就绪后,请按照以下步骤在你的设备上更新 IoT Edge:
更新 apt。
sudo apt-get update
卸载先前版本的 IoT Edge,保留配置文件。
sudo apt-get remove iotedge
安装最新版本的 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。
将旧 yaml 文件导入为其新格式,并应用配置信息。
sudo iotedge config import
现在,设备上运行的 IoT Edge 服务已更新,接下来请按照本文中的步骤更新运行时容器。
后续步骤
查看最新的 Azure IoT Edge 版本。
持续关注物联网博客中的最新更新和通告