Azure Kubernetes 服务 (AKS) Edge Essentials 是受支持的 Azure IoT 操作 群集平台之一。 您可以使用 AKS Edge Essentials 创建一个由 Microsoft 管理的 Kubernetes 集群,并在其上将 Azure IoT Operations 部署为工作负荷。 本文描述了运行脚本的步骤,该脚本用于创建具有用于 Azure IoT 运营所需配置的 AKS Edge Essentials Kubernetes 集群,然后将该集群连接到 Azure Arc。
注意
Azure IoT 操作仅在 K3s 单台计算机群集上部署时支持 AKS Edge Essentials。 AIO 不支持 K8s 群集,在多台计算机上部署群集是一项实验性功能。
运行脚本的先决条件
若要运行脚本,需要满足以下先决条件:
具有 “所有者” 角色或 “参与者” 和 “用户访问管理员” 角色组合的 Azure 订阅。 可以通过导航到订阅、选择Azure 门户左侧的访问控制(IAM),然后选择“查看我的访问权限”来检查访问级别。 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户。
在您的开发计算机上安装 Azure CLI 版本 2.64.0 或更高版本。 如有必要,请使用
az --version检查版本,使用az upgrade进行更新。 有关详细信息,请参阅 如何安装 Azure CLI。安装适用于 Azure CLI 的 connectedk8s 扩展的最新版本:
az extension add --upgrade --name connectedk8s硬件要求:确保计算机至少有 16 GB 可用 RAM、4 个可用 vCPU 和 52 GB 可用磁盘空间,为 Azure IoT 操作保留。
创建已启用 Arc 的群集
AksEdgeQuickStartForAio.ps1 脚本可自动执行创建和连接群集的过程,并推荐用于在 AKS Edge Essentials 上部署 Azure IoT 操作。 此脚本执行以下任务:
- 从该存储库下载最新的 k3s AKS 边缘软件包 MSI。
- 安装 AKS Edge Essentials,并在 Windows 计算机上部署和创建单个计算机 k3s 群集。
- 连接到 Azure 订阅,创建资源组(如果尚不存在),并将群集连接到 Arc 以创建已启用 Arc 的 Kubernetes 群集。
- 在已启用 Arc 的 Kubernetes 群集上启用自定义位置功能。
- 在已启用 Arc 的 Kubernetes 群集上启用工作负载联合身份验证功能。
- 部署本地路径预配。
- 为 MQTT 代理在主机 Windows 计算机上配置防火墙规则。
- 在作为 Kubernetes 控制平面节点的 Linux VM 上:
- 为 Kubernetes 服务的默认 IP 范围 10.96.0.0/28 配置端口代理。
- 配置 IP 表规则:
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 9110 -j ACCEPTsudo iptables -A INPUT -p tcp --dport (10124, 8420, 2379, 50051) -j ACCEPT
若要运行快速入门脚本,请执行以下步骤:
打开提升的 PowerShell 窗口并将目录更改为工作文件夹。
获取 Azure Arc 服务在你的租户中使用的 Microsoft Entra ID 应用程序的
objectId。 完全按照如下所示运行以下命令,且不要更改 GUID 值。az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv运行以下命令:
$giturl = "https://raw.githubusercontent.com/Azure/AKS-Edge/main/tools" $url = "$giturl/scripts/AksEdgeQuickStart/AksEdgeQuickStartForAio.ps1" Invoke-WebRequest -Uri $url -OutFile .\AksEdgeQuickStartForAio.ps1 -UseBasicParsing Invoke-WebRequest -Uri "$giturl/aio-aide-userconfig.json" -OutFile .\aio-aide-userconfig.json -UseBasicParsing Invoke-WebRequest -Uri "$giturl/aio-aksedge-config.json" -OutFile .\aio-aksedge-config.json -UseBasicParsing Unblock-File .\AksEdgeQuickStartForAio.ps1 Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force在 aio-aide-userconfig.json 和 aio-aksedge-config.json 文件中添加所需的参数值:
在 aio-aide-userconfig.json中,填写以下值:
旗 值 订阅ID Azure 订阅的 ID。 如果不知道订阅 ID,请参阅“查找 Azure 订阅”。 租户ID Microsoft Entra 租户的 ID。 如果不知道租户 ID,请参阅“查找 Microsoft Entra 租户”。 资源组名称 现有资源组的名称或要创建的新资源组的名称。 每个资源组仅支持一个 Azure IoT 操作实例。 位置 离你较近的 Azure 区域。 有关支持的 Azure IoT 操作的 Azure 区域列表,请参阅 支持的区域。 CustomLocationOID 在步骤 2 中检索到的对象 ID 值。 EnableWorkloadIdentity (预览版) 默认情况下启用。 虽然可以在部署群集之前选择退出,但创建群集后无法启用它。 使用工作负荷标识联合,可将 Microsoft Entra ID 中用户分配的托管标识或应用注册配置为信任来自外部标识提供者 (IdP)(例如 Kubernetes)的令牌。 要配置工作负荷标识联合,请参阅本文。 在 aio-aksedge-config.json中,添加所需的 ClusterName 字段和其他可选字段,如下所示:
旗 值 集群名称 要创建的新群集的名称。 Proxy-Https提供代理值: https://<proxy-server-ip-address>:<port>。Proxy-Http提供代理值: http://<proxy-server-ip-address>:<port>。Proxy-No提供代理跳过范围: <excludedIP>,<excludedCIDR>。 如果提供了http(s)_proxy,则还应将No更新为localhost,127.0.0.0/8,192.168.0.0/16,172.17.0.0/16,10.42.0.0/16,10.43.0.0/16,10.96.0.0/12,10.244.0.0/16,.svc,169.254.169.254。重要
预览功能是可选择启用的自助功能。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 边缘软件包预览功能是由客户支持尽最大努力部分覆盖。
[可选] Azure Arc 网关(预览版)可用于仅使用 7 个终结点就将基础结构加入到 Azure Arc。 要在 AKS 边缘软件包上将 Azure Arc 网关与 Azure IoT 操作结合使用,请执行以下操作:
- 按照步骤 1 创建 Arc 网关资源。
- 记下步骤 2 中列出的 URL,并将其添加到
proxy-no中的 。 - 按照 Arc 网关文档中的步骤 3a 并保存网关 ID。
- 在 aio-aide-userconfig.json中,将
GatewayResourceId的值设置为从上一步保存的网关 ID。
运行下面的命令:
.\AksEdgeQuickStartForAio.ps1 -aideUserConfigfile .\aio-aide-userconfig.json -aksedgeConfigFile .\aio-aksedge-config.json如果在部署过程中出现问题,例如,您的计算机在此过程中重新启动,请再次运行命令集。
运行以下命令以检查部署是否成功:
Import-Module AksEdge Get-AksEdgeDeploymentInfo在命令的
Get-AksEdgeDeploymentInfo输出中,应会看到群集的 Arc 状态为 “已连接”。
验证您的群集
若要验证 Kubernetes 群集是否已启用 Azure Arc,请运行以下命令:
kubectl get deployments,pods -n azure-arc
输出与以下示例类似:
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/clusterconnect-agent 1/1 1 1 10m
deployment.apps/extension-manager 1/1 1 1 10m
deployment.apps/clusteridentityoperator 1/1 1 1 10m
deployment.apps/controller-manager 1/1 1 1 10m
deployment.apps/flux-logs-agent 1/1 1 1 10m
deployment.apps/cluster-metadata-operator 1/1 1 1 10m
deployment.apps/extension-events-collector 1/1 1 1 10m
deployment.apps/config-agent 1/1 1 1 10m
deployment.apps/kube-aad-proxy 1/1 1 1 10m
deployment.apps/resource-sync-agent 1/1 1 1 10m
deployment.apps/metrics-agent 1/1 1 1 10m
NAME READY STATUS RESTARTS AGE
pod/clusterconnect-agent-5948cdfb4c-vzfst 3/3 Running 0 10m
pod/extension-manager-65b8f7f4cb-tp7pp 3/3 Running 0 10m
pod/clusteridentityoperator-6d64fdb886-p5m25 2/2 Running 0 10m
pod/controller-manager-567c9647db-qkprs 2/2 Running 0 10m
pod/flux-logs-agent-7bf6f4bf8c-mr5df 1/1 Running 0 10m
pod/cluster-metadata-operator-7cc4c554d4-nck9z 2/2 Running 0 10m
pod/extension-events-collector-58dfb78cb5-vxbzq 2/2 Running 0 10m
pod/config-agent-7579f558d9-5jnwq 2/2 Running 0 10m
pod/kube-aad-proxy-56d9f754d8-9gthm 2/2 Running 0 10m
pod/resource-sync-agent-769bb66b79-z9n46 2/2 Running 0 10m
pod/metrics-agent-6588f97dc-455j8 2/2 Running 0 10m