使用对称密钥大规模创建和预配 IoT Edge for Linux on Windows 设备

适用于:IoT Edge 1.5 勾选标记 IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 于 2024 年 11 月 12 日终止。 如果使用的是早期版本,请参阅 Update IoT Edge

本文介绍了如何自动预配一个或多个使用对称密钥的 IoT Edge for Linux on Windows 设备。 使用 Azure IoT 中心设备预配服务 (DPS)自动预配 Azure IoT Edge 设备。 如果你不熟悉自动预配过程,请在继续操作之前查看预配概述

以下是任务:

  1. 为单个设备创建单个注册,或为一组设备创建组注册。
  2. 部署安装了 IoT Edge 运行时的 Linux 虚拟机,并将其连接到 IoT 中心。

对称密钥证明是一种通过设备预配服务实例对设备进行身份验证的简单方法。 对于对设备预配不熟悉或对安全要求不高的开发人员而言,这种验证方法提供了一个“Hello world”体验。 使用 X.509 证书的设备证明更加安全,且应该用于更严格的安全要求。

先决条件

云资源

  • 一个活动的 IoT 中心
  • Azure 中的一个 IoT 中心设备预配服务实例,已链接到您的 IoT 中心

设备要求

具有以下最低要求的 Windows 设备:

  • 系统要求

    • Windows 101/11(专业版、企业版、IoT Enterprise)
    • Windows Server 20191/2022
      1 Windows 10和Windows Server 2019,最低内部版本为 17763,已安装所有当前累积更新。
  • 硬件要求

    • 最小可用内存:1 GB
    • 最小可用磁盘空间:10 GB
  • 虚拟化支持

  • 网络支持

    • Windows Server不包括默认开关。 需要创建一个虚拟交换机,然后才能将 EFLOW 部署到 Windows Server 设备。
    • Windows桌面版本包括可用于 EFLOW 安装的默认开关。 如果需要,可以创建自己的自定义虚拟交换机。

提示

如果要在适用于 linux 的 Azure IoT Edge Windows 部署中使用 GPU 加速 Linux 模块,请考虑几个配置选项。

你需要根据 GPU 体系结构安装正确的驱动程序,并且可能需要访问 Windows 预览体验计划内部版本。 若要确定配置需求并满足这些先决条件,请参阅 适用于 Azure IoT Edge for Linux on Windows 的 GPU 加速

请确保现在满足 GPU 加速的先决条件。 如果决定在安装过程中需要 GPU 加速,则必须重启安装过程。

开发人员工具

准备目标设备,以便安装 Azure IoT Edge for Linux on Windows 并部署 Linux 虚拟机:

  1. 在目标设备上将执行策略设置为 AllSigned。 可以使用以下命令在提升的 PowerShell 提示符中检查当前执行策略:

    Get-ExecutionPolicy -List
    

    如果local machine的执行策略不是AllSigned,请使用以下命令设置执行策略:

    Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
    

有关 Windows PowerShell 模块上的 Linux Azure IoT Edge的详细信息,请参阅 PowerShell 函数参考

创建 DPS 注册

创建登记以通过 DPS 配置一个或多个设备。

如果要为单个 IoT Edge 设备进行预配,请创建一个单独注册。 如果需要预配多个设备,请按照创建 DPS 组注册的步骤进行操作。

在 DPS 中创建注册时,可以声明“初始设备孪生状态”。 在设备孪生中可以设置标记,以便按解决方案中所需的任何指标(例如区域、环境、位置或设备类型)将设备分组。 这些标记用于创建自动部署

有关设备预配服务中的注册的详细信息,请参阅如何管理设备注册

创建 DPS 个人注册

提示

本文中的步骤适用于 Azure 门户,但你也可使用 Azure CLI 创建单个注册。 有关详细信息,请参阅 az iot dps enrollment。 作为 CLI 命令的一部分,使用 edge-enabled 标志指定注册适用于单个 IoT Edge设备。

  1. Azure 门户中,导航到 IoT 中心设备预配服务实例。

  2. 在“设置”下,选择“管理注册”。

  3. 选择“添加个人注册”,然后完成以下步骤以配置注册:

    1. 对于“机制”,请选择“对称密钥”。

    2. 为设备提供一个唯一的注册 ID。

    3. (可选)为设备提供一个 IoT 中心设备 ID。 可以使用设备 ID 将单个设备指定为模块部署的目标。 如果未提供设备 ID,则会使用注册 ID。

    4. 选择“True”,声明该注册适用于 IoT Edge 设备。

    5. (可选)向“初始设备孪生状态”添加一个标记值。 可以使用标记将设备组指定为模块部署的目标。 例如:

      {
         "tags": {
            "environment": "test"
         },
         "properties": {
            "desired": {}
         }
      }
      
    6. 选择“保存” 。

  4. 复制个人注册的“主密钥”值,以便在安装 IoT Edge 运行时的情况下使用。

既然此设备已存在注册,IoT Edge 运行时在安装期间可以自动预配设备。

安装 IoT Edge

在目标设备上部署 Azure IoT Edge for Linux on Windows。

注意

以下 PowerShell 过程概述了如何在 Windows 上将适用于 Linux 的 IoT Edge 部署到本地设备。 若要使用 PowerShell 部署到远程目标设备,请使用远程 PowerShell 与远程设备建立连接,并在该设备上远程运行这些命令。

  1. 在已提升权限的 PowerShell 会话中,根据目标设备体系结构运行以下命令之一,以下载 IoT Edge for Linux on Windows。

    • X64/AMD64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_X64" -OutFile $msiPath
      
    • ARM64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_ARM64" -OutFile $msiPath
      
  2. 在设备上安装 IoT Edge for Linux on Windows。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"
    

    通过向安装命令中添加 INSTALLDIR="<FULLY_QUALIFIED_PATH>"VHDXDIR="<FULLY_QUALIFIED_PATH>" 参数,可以指定自定义 IoT Edge for Linux on Windows 安装和 VHDX 目录。 例如,如果要使用 D:\EFLOW 文件夹进行安装,并使用 D:\EFLOW-VHDX 文件夹存放 VHDX,则可以使用以下 PowerShell cmdlet。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn","INSTALLDIR=D:\EFLOW", "VHDXDIR=D:\EFLOW-VHDX"
    
  3. 将目标设备上的执行政策设置为 AllSigned,如果尚未设置。 请参阅 PowerShell 先决条件,了解用于检查当前执行策略以及将执行策略设置为 AllSigned 的命令。

  4. 创建 IoT Edge for Linux on Windows 部署。 部署将为你创建 Linux 虚拟机并安装 IoT Edge 运行时。

    Deploy-Eflow
    

    提示

    默认情况下,Deploy-Eflow 命令会创建具有 1 GB RAM、1 个 vCPU 核心和 16 GB 磁盘空间的 Linux 虚拟机。 但是,VM 所需的资源高度依赖于部署的工作负荷。 如果 VM 没有足够的内存来支持工作负荷,则无法启动。

    可以使用命令的可选参数自定义虚拟机的可用资源 Deploy-Eflow 。 需要此自定义项才能在具有最低硬件要求的设备上部署 EFLOW。

    例如,以下命令创建具有 1 个 vCPU 核心、1 GB RAM(以 MB 表示)和 2 GB 磁盘空间的虚拟机:

    Deploy-Eflow -cpuCount 1 -memoryInMB 1024 -vmDataSize 2
    

    有关所有可用的可选参数的信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

    警告

    默认情况下,EFLOW Linux 虚拟机没有 DNS 配置。 使用 DHCP 的部署尝试获取 DHCP 服务器传播的 DNS 配置。 检查 DNS 配置以确保 Internet 连接。 有关详细信息,请参阅 AzEFLOW-DNS

    可以为部署分配 GPU,以启用 GPU 加速的 Linux 模块。 若要获取这些功能的访问权限,需要安装适用于 Azure IoT Edge for Linux on Windows 的 GPU 加速中详细说明的必备组件。

    若要使用 GPU 直通,请将 gpuNamegpuPassthroughTypegpuCount 参数添加到 Deploy-Eflow 命令中。 有关所有可用的可选参数的信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

    警告

    启用硬件设备直通可能会增加安全风险。 Azure 建议使用 GPU 供应商提供的设备缓解驱动程序(如果适用)。 有关详细信息,请参阅使用离散设备分配部署图形设备

  5. 输入 Y 以接受许可条款。

  6. 根据偏好,输入 OR 以打开或关闭 可选诊断数据

  7. 部署完成后,PowerShell 窗口会报告“部署成功”。

    显示消息末尾的“部署成功”的屏幕截图。

    成功部署后,即可配置设备。

为设备预配其云标识

在设备上安装运行时后,请使用供设备用来连接到设备预配服务和 IoT 中心的信息来配置该设备。

确保你具有以下信息:

  • DPS 的“ID 域”值
  • 您创建的设备“注册ID”
  • 个人注册的主密钥,或者使用组注册时设备的派生密钥

在已提升权限的 PowerShell 会话中运行以下命令,并使用你自己的值更新占位符值:

Provision-EflowVm -provisioningType DpsSymmetricKey -scopeId PASTE_YOUR_ID_SCOPE_HERE -registrationId PASTE_YOUR_REGISTRATION_ID_HERE -symmKey PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE

验证是否成功安装

检查是否已在 Windows 上安装 IoT Edge for Linux 并在 IoT Edge 设备上设置。

检查您创建的设备预配服务中的个人注册是否已被使用。 在 Azure 门户中,访问你的设备预配服务实例。 打开创建的个人注册的注册详细信息。 注册状态为“已分配”并且设备 ID 已列出

  1. 在 PowerShell 会话中使用以下命令,登录到 Windows 虚拟机上的 IoT Edge for Linux:

    Connect-EflowVm
    

    注意

    唯一被允许通过 SSH 登录到虚拟机的帐户是创建该虚拟机的用户。

  2. 登录后,可以使用以下 Linux 命令检查正在运行的 IoT Edge 模块的列表:

    sudo iotedge list
    
  3. 如果需要对 IoT Edge 服务进行故障排除,请使用以下 Linux 命令。

    1. 检索服务日志。

      sudo iotedge system logs
      
    2. 使用 check 工具验证设备的配置和连接状态。

      sudo iotedge check
      

    注意

    在新预配的设备上,可能会看到与 IoT Edge 中心相关的错误:

    × 生产就绪性:Edge Hub 的存储目录会持久化保存在主机文件系统上- 错误

    无法检查 edgeHub 容器的当前状态

    由于 IoT Edge 中心模块未运行,在新预配的设备上预期会出现此错误。 若要修复此错误,请在 IoT 中心设置设备的模块并创建部署。 为设备创建部署会启动设备上的模块,包括 IoT Edge Hub 模块。

创建新的 IoT Edge 设备时,它会在 Azure 门户中显示状态代码 417 -- The device's deployment configuration is not set 。 此状态正常,表示设备已准备好接收模块部署。

卸载适用于 Windows 上的 Linux 的 IoT Edge

若要从设备中删除 Windows 安装上的 Linux Azure IoT Edge,请使用以下步骤。

  1. 在 Windows 上打开 Settings
  2. 选择“添加或删除程序”。
  3. 选择 Azure IoT Edge 应用。
  4. 选择卸载

后续步骤

通过设备预配服务注册过程,可以在预配新设备时设置设备 ID 和设备孪生标记。 使用这些值可针对具有自动设备管理的单个设备或设备组。 了解如何使用 Azure 门户或使用 Azure CLI 大规模部署和监视 IoT Edge 模块

你还可以: