你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 K3s 在 GitHub Codespaces 中运行 Azure IoT 操作
在本快速入门中,你要将 Azure IoT 操作部署到已启用 Azure Arc 的 Kubernetes 群集,以便可以远程管理设备和工作负载。 在本快速入门结束时,你将得到一个可以从云中管理的群集。 本端到端系列中的其余快速入门均以此为基础来定义示例资产、数据处理管道和可视化效果。
开始之前
本快速入门系列旨在帮助你尽快掌握 Azure IoT 操作的入门知识,以便可以评估端到端的方案。 在真正的开发或生产环境中,多个团队共同执行这些任务,某些任务可能需要提升的权限。
为了获得最佳的新用户体验,我们建议使用 Azure 免费帐户,以便你对这些快速入门中的资源拥有所有者权限。
我们还将 GitHub Codespaces 用作本快速入门的虚拟环境,这样你无需在自己的计算机上安装新工具即可测试方案。 如果要将 Azure IoT 操作部署到 Ubuntu 或 Azure Kubernetes 服务 (AKS) 上的本地群集,则请参阅准备已启用 Azure Arc 的 Kubernetes 群集。
先决条件
在开始之前,需满足以下先决条件:
Azure 订阅。 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户。
一个 GitHub 帐户。
开发计算机上安装的 Visual Studio Code。 有关详细信息,请参阅下载 Visual Studio Code。
资源组级别的 Microsoft/Authorization/roleAssignments/write 权限。
我们将解决什么问题?
Azure IoT 操作是在 Kubernetes 群集上运行的一套数据服务。 你想要从云远程管理这些群集,并能够安全地与云资源和终结点通信。 在本快速入门中,我们通过以下任务解决了这些问题:
- 在 GitHub Codespaces 中创建 Kubernetes 群集。
- 将群集连接到 Azure Arc 进行远程管理。
- 创建架构注册表。
- 将 Azure IoT 操作部署到群集。
创建群集
Azure IoT 操作可以部署到 Ubuntu 上的 K3s、Azure Kubernetes 服务 (AKS) 边缘软件包和 Azure Local 上的 AKS。 但是,考虑到速度和方便性,本快速入门使用 GitHub Codespaces 来托管群集。 若要了解如何将 Azure IoT 操作部署到 Windows 或 Ubuntu 上的群集,请参阅准备已启用 Azure Arc 的 Kubernetes 群集。
注意
codespace 易于快速设置并稍后拆解,但它们不适用于性能评估或规模测试。 仅使用 GitHub Codespaces 进行探索。
Codespaces 环境足以完成快速入门步骤,但不支持高级配置。
在本部分,你将创建新的群集。 如果要重复使用之前已将 Azure IoT 操作部署到的群集,请参阅清理资源中的步骤以卸载 Azure IoT 操作,然后继续操作。
Azure-Samples/explore-iot-operations codespace 预配置有:
若要创建 codespace 和群集,请使用以下步骤:
在 GitHub Codespaces 中创建 codespace。
为 codespace 提供以下建议的机密:
参数 值 SUBSCRIPTION_ID Azure 订阅 ID。 RESOURCE_GROUP 将在其中创建群集的新 Azure 资源组的名称。 LOCATION 离你较近的 Azure 区域。 有关当前支持区域的列表,请参阅支持的区域。 提示
在此步骤中作为机密提供的值将保存在你的 GitHub 帐户中,以便在此 codespace 和将来的 codespace 中使用。 它们添加为 codespace 终端中的环境变量,你可以在下一部分所述的 CLI 命令中使用这些环境变量。
此外,此 codespace 会创建一个使用 codespace 名称进行设置的
CLUSTER_NAME
环境变量。选择“新建 codespace”。
codespace 准备就绪后,选择左上角的菜单按钮,然后选择“在 VS Code 桌面中打开”。
如果系统提示,请安装适用于 Visual Studio Code 的 GitHub Codespaces 扩展并登录到 GitHub。
在 Visual Studio Code 中,选择“视图”>“终端”。
使用此终端运行用于管理群集的所有 CLI 命令。
将群集连接到 Azure Arc
要将群集连接到 Azure Arc:
在 codespace 终端中,登录到 Azure CLI:
az login
提示
如果在浏览器中使用 GitHub codespace 环境而不是 VS Code 桌面版,则运行
az login
会返回 localhost 错误。 若要修复该错误,请执行以下任一操作:- 在 VS Code 桌面中打开 codespace,然后返回浏览器终端并重新运行
az login
。 - 或者,在浏览器中收到 localhost 错误后,请从浏览器复制 URL,并在新的终端选项卡中运行
curl "<URL>"
。应会看到 JSON 响应,其中包含消息“你已登录到 Microsoft Azure!”。
- 在 VS Code 桌面中打开 codespace,然后返回浏览器终端并重新运行
登录后,Azure CLI 会显示你的所有订阅,并用星号
*
指示默认订阅。 若要继续使用默认订阅,请选择Enter
。 否则,请键入要使用的 Azure 订阅数。在订阅中注册所需的资源提供程序:
注意
对于每个订阅,只需运行此步骤一次。 若要注册资源提供程序,你需要有执行
/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"
使用az group create命令在 Azure 订阅中创建资源组以存储所有资源:
az group create --location $LOCATION --resource-group $RESOURCE_GROUP
使用 az connectedk8s connect 命令连接到已启用 Arc 的 Kubernetes 群集,并将其作为 Azure 资源组的一部分进行管理:
az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
提示
$CLUSTER_NAME
的值会自动设置为 codespace 的名称。 如果你要使用其他名称,请替换环境变量。获取 Azure Arc 服务在租户中使用的 Microsoft Entra ID 应用程序的
objectId
,并将其保存为环境变量。 完全按照如下所示运行以下命令,且不要更改 GUID 值。export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
使用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
创建存储帐户和架构注册表
架构注册表是一个同步存储库,用于在云中和边缘存储消息定义。 Azure IoT 操作需要群集上的架构注册表。 架构注册表需要一个 Azure 存储帐户来获取存储在云中的架构信息。
本部分中创建架构注册表的命令需要资源组级别的 Microsoft/Authorization/roleAssignments/write 权限。 此权限用于为架构注册表提供参与者角色,以便它可以写入存储帐户。
在 Codespaces 终端中运行以下 CLI 命令。
为你在本部分中创建的资源设置环境变量。
占位符 值 <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>
创建已启用分层命名空间的存储帐户。
az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
创建连接到存储帐户的架构注册表。 此命令还会在存储帐户中创建一个名为“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 IoT 操作
在本部分,我们使用 Azure IoT 操作组件的依赖项配置群集,然后部署 Azure IoT 操作。
在 Codespaces 终端中运行以下 CLI 命令。
为 Azure IoT 操作初始化群集。
提示
每个群集只需运行
init
命令一次。 如果要重用已部署最新 Azure IoT 操作版本的群集,则可跳过此步骤。az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
此命令可能需要几分钟才能完成。 可以在终端的部署进度显示中观看进度。
部署 Azure IoT 操作。
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) --broker-frontend-replicas 1 --broker-frontend-workers 1 --broker-backend-part 1 --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low
此命令可能需要几分钟才能完成。 可以在终端的部署进度显示中观看进度。
如果收到错误,指出“设备必须受管才能访问你的资源”,请再次运行
az login
,并确保使用浏览器以交互方式登录。
查看群集中的资源
部署完成后,就可以使用 kubectl 命令观察群集上的更改,或者,由于群集已启用 Arc,就可以使用 Azure 门户。
若要在群集上查看 Pod,请运行以下命令:
kubectl get pods -n azure-iot-operations
若要在 Azure 门户中查看资源,请使用以下步骤:
在 Azure 门户中,转到包含 Azure IoT 操作实例的资源组,或搜索并选择“Azure IoT 操作”。
选择 Azure IoT 操作实例的名称。
在实例的“概述”页上,选择“资源摘要”选项卡以查看已部署到群集的资源的预配状态。
我们如何解决问题?
在本快速入门中,你配置了已启用 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 中删除你的 Codespace。