创建和配置可以运行 Azure IoT 操作的 AKS Edge Essentials 群集

Azure Kubernetes 服务 (AKS) Edge Essentials 是受支持的群集平台之一Azure IoT 操作。 可以使用 AKS Edge Essentials 创建Microsoft托管的 Kubernetes 群集,并将 Azure IoT 操作部署为工作负荷。 本文介绍运行脚本的步骤,该脚本使用 Azure IoT 操作所需的配置创建 AKS Edge Essentials Kubernetes 群集,然后将该群集连接到 Azure Arc。

注意

在单台计算机群集上部署时,Azure IoT 操作支持 AKS Edge Essentials。 在多台计算机上部署群集是一项实验性功能。

运行脚本的先决条件

若要运行脚本,需要满足以下先决条件:

  • 具有“所有者”角色或参与者用户访问管理员角色的组合的 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 和为 Azure IoT 操作预留的 52 GB 可用磁盘空间。

创建已启用 Arc 的群集

AksEdgeQuickStartForAio.ps1 脚本可自动执行创建和连接群集的过程,并推荐用于在 AKS Edge Essentials 上部署 Azure IoT 操作。 此脚本执行以下任务:

  • 从此存储库下载最新的 AKS Edge Essentials MSI。
  • 安装 AKS Edge Essentials,并在 Windows 计算机上部署和创建单台计算机 Kubernetes 群集。
  • 连接到 Azure 订阅,创建资源组(如果尚不存在),并将群集连接到 Arc 以创建已启用 Arc 的 Kubernetes 群集。
  • 在已启用 Arc 的 Kubernetes 群集上启用自定义位置功能。
  • 在已启用 Arc 的 Kubernetes 群集上启用工作负荷标识联合功能。
  • 部署本地路径预配。
  • 为 MQTT 代理在主机 Windows 计算机上配置防火墙规则。
  • 在 Linux VM 上,充当 Kubernetes 控制平面节点:
    • 为 Kubernetes 服务的默认 IP 范围 10.96.0.0/28 配置端口代理。
    • 配置 IP 表规则:
      • sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 9110 -j ACCEPT
      • sudo iptables -A INPUT -p tcp --dport (10124, 8420, 2379, 50051) -j ACCEPT

若要运行快速入门脚本,请执行以下步骤:

  1. 打开提升的 PowerShell 窗口并将目录更改为工作文件夹。

  2. 获取 Azure Arc 服务在租户中使用的 Microsoft Entra ID 应用程序的 objectId。 完全按照如下所示运行以下命令,且不要更改 GUID 值。

    az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv
    
  3. 运行以下命令,将占位符值替换为信息:

    $url = "https://raw.githubusercontent.com/Azure/AKS-Edge/main/tools/scripts/AksEdgeQuickStart/AksEdgeQuickStartForAio.ps1"
    Invoke-WebRequest -Uri $url -OutFile .\AksEdgeQuickStartForAio.ps1
    Unblock-File .\AksEdgeQuickStartForAio.ps1
    Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
    .\AksEdgeQuickStartForAio.ps1 -SubscriptionId "<SUBSCRIPTION_ID>" -TenantId "<TENANT_ID>" -ResourceGroupName "<RESOURCE_GROUP_NAME>"  -Location "<LOCATION>"  -ClusterName "<CLUSTER_NAME>" -CustomLocationOid "<ARC_APP_OBJECT_ID>"
    
    占位符
    SUBSCRIPTION_ID Azure 订阅的 ID。 如果不知道订阅 ID,请参阅“查找 Azure 订阅”。
    TENANT_ID Microsoft Entra 租户的 ID。 如果不知道租户 ID,请参阅“查找 Microsoft Entra 租户”。
    RESOURCE_GROUP_NAME 现有资源组的名称或要创建的新资源组的名称。 每个资源组仅支持一个 Azure IoT 操作实例。
    LOCATION 离你较近的 Azure 区域。 有关 Azure IoT 操作支持的 Azure 区域的列表,请参阅 支持的区域
    CLUSTER_NAME 要创建的新群集的名称。
    ARC_APP_OBJECT_ID 在步骤 2 中检索到的对象 ID 值。

    如果在部署过程中出现问题,例如计算机在此过程过程中重新启动,请再次运行一组命令。

  4. 运行以下命令以检查部署是否成功:

    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

后续步骤