你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 K3 在 GitHub Codespaces 中运行Azure IoT 操作

在本快速入门中,你将Azure IoT 操作部署到启用了Azure Arc的 Kubernetes 群集,以便远程管理设备和工作负载。 在本快速入门结束时,你将建立可以从云中管理的群集。 本端到端系列中的其余快速入门均以此为基础来定义示例资产、数据处理管道和可视化效果。

准备工作

本系列快速入门旨在帮助你尽快开始使用Azure IoT 操作,以便评估端到端方案。 在真正的开发或生产环境中,多个团队共同执行这些任务,并且某些任务可能需要提升的权限。

为获得最佳新用户体验,我们建议使用 Azure 免费帐户,以便你对这些快速入门中的资源拥有所有者权限。

本快速入门使用 GitHub Codespaces 作为虚拟环境,以便无需在自己的计算机上安装新工具即可测试方案。 但是,如果要将 Azure IoT 操作 部署到 Ubuntu 或 Azure Kubernetes 服务 (AKS) 上的本地集群,请参阅 为 Azure Arc 启用的 Kubernetes 集群做准备

重要说明

代码空间易于快速设置,稍后拆解,但它们不适合生产、性能评估或规模测试。 仅使用 GitHub Codespaces 进行探索。

Codespaces 环境足以完成快速入门步骤,但不支持高级配置(如 安全设置)。 有关具有安全设置的 生产就绪部署,请参阅 GitHub 中的这些脚本

先决条件

在开始之前,需满足以下先决条件:

我们将解决什么问题?

Azure IoT 操作是一套在 Kubernetes 群集上运行的数据服务。 你想要从云远程管理这些群集,并能够安全地与云资源和终结点通信。 在本快速入门中,我们将通过以下任务解决这些问题:

  1. 在 GitHub Codespaces 中创建 Kubernetes 群集。
  2. 将群集连接到Azure Arc进行远程管理。
  3. 创建架构注册表。
  4. 将Azure IoT 操作部署到群集。

创建群集

在本部分,你将创建新的群集。 如果要重复使用以前 Azure IoT 操作部署的群集,请参阅 清理资源中的步骤,以卸载Azure IoT 操作,然后再继续操作。

Azure-Samples/explore-iot-operations 代码空间已经预配置:

  • 在轻型 Kubernetes 群集的 K3d 中运行的 K3s
  • Azure CLI
  • 用于管理 Kubernetes 资源的 Kubectl
  • 其他有用的工具,例如 Helmk9s

要创建 codespace 和群集,请使用以下步骤:

  1. 在 GitHub Codespaces 中创建代码空间。

    创建 explore-iot-operations codespace

  2. 为 codespace 提供以下建议的机密:

    参数
    SUBSCRIPTION_ID(订阅ID) Azure订阅 ID。
    RESOURCE_GROUP 用于创建群集的新 Azure 资源组的名称。
    位置 离你较近的 Azure 区域。 有关当前支持区域的列表,请参阅支持的区域

    提示

    在此步骤中作为机密提供的值将保存在你的 GitHub 帐户中,以便在此 Codespaces 和将来的 Codespaces 中使用。 它们添加为 codespace 终端中的环境变量,你可以在下一部分所述的 CLI 命令中使用这些环境变量。

    此外,此 codespace 会创建一个使用该 codespace 名称设置的 CLUSTER_NAME 环境变量。

  3. 选择“新建 codespace”。

  4. 该 codespace 就绪后,选择左上角的“菜单”按钮,然后选择“在 VS Code 桌面中打开”。

    显示在 VS Code 桌面中打开 codespace 的屏幕截图。

  5. 如果系统提示,请安装适用于 Visual Studio Code 的 GitHub Codespaces 扩展,并登录至 GitHub。

  6. 在 Visual Studio Code 中,选择 View>Terminal

    使用此终端运行用于管理群集的所有 CLI 命令。

将群集连接到Azure Arc

将群集连接到Azure Arc:

  1. 在 codespace 终端中,登录到Azure CLI:

    az login
    

    提示

    如果在浏览器中(而不是 VS Code 桌面)中使用 GitHub codespace 环境,则运行 az login将返回 localhost 错误。 要修复该错误,请执行以下任一操作:

    • 在 VS Code 桌面中打开该 codespace,然后返回浏览器终端并重新运行 az login
    • 或者,在浏览器中收到 localhost 错误后,请从浏览器复制 URL 并在新的终端选项卡中运行 curl "<URL>"。应会看到一个 JSON 响应,其中包含消息“你已登录到Microsoft Azure!”
  2. 登录后,Azure CLI显示所有订阅,并使用星号*指示默认订阅。 若要继续使用默认订阅,请选择 Enter。 否则,请键入要使用的Azure订阅数。

  3. 在订阅中注册所需的资源提供程序:

    提示

    对于每个订阅,只需运行此步骤一次。 若要注册资源提供程序,你需要有执行 /register/action 操作的权限,该权限包含在订阅“参与者”和“所有者”角色中。 有关详细信息,请参阅Azure资源提供程序和类型

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    az provider register -n "Microsoft.IoTOperations"
    az provider register -n "Microsoft.DeviceRegistry"
    az provider register -n "Microsoft.SecretSyncController"
    
  4. 使用 az group create 命令在Azure订阅中创建资源组以存储所有资源:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP
    
  5. 使用 az connectedk8s connect 命令将您的 Kubernetes 群集 Arc 启用,并作为 Azure 资源组的一部分进行管理:

    az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
    

    提示

    $CLUSTER_NAME 的值会自动设置为 codespace 的名称。 如果要使用其他名称,请替换环境变量。

  6. 获取Azure Arc服务在租户中使用的Microsoft Entra ID应用程序的 objectId,并将其另存为环境变量。 完全按照所述步骤运行以下命令,且不更改 GUID 值。

    export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
    
  7. 使用 az connectedk8s enable-features 命令在群集上启用自定义位置支持。 此命令使用Azure Arc服务使用的Microsoft Entra ID应用程序的 objectId。 在部署了 Kubernetes 群集的计算机上运行此命令:

    az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
    

安装最新版本的 az iot ops

本快速入门使用最新版本的 Azure IoT 操作。 若要安装最新版本,需要最新版本的 Azure IoT 操作 CLI 扩展:

az extension add --upgrade --name azure-iot-ops

创建存储帐户和架构注册表

架构注册表是一个同步的存储库,同时用于在云中和边缘存储消息定义。 Azure IoT 操作需要群集上的架构注册表。 架构注册表需要Azure存储帐户来获取存储在云中的架构信息。

在本节中创建模式注册表的命令需要在资源组级别具有 Microsoft.Authorization/roleAssignments/write 权限。 此权限用于向架构注册表提供参与者角色,以便它可以写入存储帐户。

在 Codespaces 终端中运行以下 CLI 命令。

  1. 为你在本部分中创建的资源设置环境变量。

    占位符
    <STORAGE_ACCOUNT_NAME (存储账户名称)> 存储帐户的名称。 存储帐户名的长度必须为 3 到 24 个字符,并且只能包含数字和小写字母。
    <SCHEMA_REGISTRY_NAME> 架构注册表的名称。 架构注册表名称只能包含数字、小写字母和连字符。
    <SCHEMA_REGISTRY_NAMESPACE> 架构注册表命名空间的名称。 命名空间唯一标识租户内的架构注册表。 架构注册表命名空间名称只能包含数字、小写字母和连字符。
    STORAGE_ACCOUNT=<STORAGE_ACCOUNT_NAME>
    SCHEMA_REGISTRY=<SCHEMA_REGISTRY_NAME>
    SCHEMA_REGISTRY_NAMESPACE=<SCHEMA_REGISTRY_NAMESPACE>
    
  2. 创建已启用分层命名空间的存储帐户。

    az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
    
  3. 创建连接到存储帐户的架构注册表。 此命令还会在存储帐户中创建一个名为“schemas”的 blob 容器。

    az iot ops schema registry create --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP --registry-namespace $SCHEMA_REGISTRY_NAMESPACE --sa-resource-id $(az storage account show --name $STORAGE_ACCOUNT -o tsv --query id)
    

创建Azure设备注册表命名空间

Azure IoT 操作和Azure设备注册表使用 namespaces 来组织资产和设备。 每个Azure IoT 操作实例对其资产和设备使用单个命名空间。

运行以下 CLI 命令来创建Azure设备注册表命名空间。

az iot ops ns create -n myqsnamespace -g $RESOURCE_GROUP

部署Azure IoT 操作

在本部分中,使用Azure IoT 操作组件的依赖项配置群集,然后部署Azure IoT 操作。

在 Codespaces 终端中运行以下 CLI 命令。

  1. 为 Azure IoT 操作初始化群集。

    提示

    每个群集只需运行一次 init 命令。 如果要重用已部署了最新Azure IoT 操作版本的群集,则可以跳过此步骤。

    az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    此命令可能需要几分钟才能完成。 可以在终端的部署进度显示中观看进度。

  2. 部署Azure IoT 操作。 此命令包含以下快速入门中使用的可选 OPC UA 连接器。

    az iot ops create --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name ${CLUSTER_NAME}-instance --sr-resource-id $(az iot ops schema registry show --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP -o tsv --query id) --ns-resource-id $(az iot ops ns show --name myqsnamespace --resource-group $RESOURCE_GROUP -o tsv --query id) --broker-frontend-replicas 1 --broker-frontend-workers 1  --broker-backend-part 1  --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low  --feature opcua.mode=Stable
    

    此命令可能需要几分钟才能完成。 可以在终端的部署进度显示中观看进度。

    如果收到错误,指出“设备必须受管理才能访问你的资源”,请再次运行 az login,并确保使用浏览器以交互方式登录。

查看群集中的资源

部署完成后,可以使用 kubectl 命令观察群集上的更改,或者,由于群集已启用 Arc,因此可以使用Azure门户。

要在群集上查看 Pod,请运行以下命令:

kubectl get pods -n azure-iot-operations

若要在 Azure 门户中查看资源,请使用以下步骤:

  1. Azure 门户中,转到包含Azure IoT 操作实例的资源组,或搜索并选择 Azure IoT 操作

  2. 选择Azure IoT 操作实例的名称。

  3. 在实例的“概述”页上,选择“资源摘要”选项卡以查看已部署到群集的资源的预配状态。

    显示 Azure IoT 操作 实例在您的已启用 Arc 的集群上的截图。

我们如何解决该问题?

在本快速入门中,你配置了已启用 Arc 的 Kubernetes 群集,以便它可以与Azure IoT 操作组件安全通信。 然后,将这些组件部署到了群集。 对于此测试方案,你拥有一个在 Codespaces 中运行的 Kubernetes 群集。 但在生产方案中,可以使用相同的步骤将工作负载跨多个站点部署到多个群集。

清理资源

如果继续学习下一个快速入门,请保留所有资源。

如果要删除Azure IoT 操作部署但保留群集,请使用 az iot ops delete 命令:

az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP

如果要删除为本快速入门创建的所有资源,请删除部署Azure IoT 操作的 Kubernetes 群集,然后删除包含群集的Azure资源组。

如果为这些快速入门使用了 Codespaces,请从 GitHub 中删除 Codespaces。

后续步骤