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

准备已启用 Azure Arc 的 Kubernetes 群集

已启用 Azure Arc 的 Kubernetes 群集是部署 Azure IoT 操作的先决条件。 本文介绍如何准备群集,以便之后部署 Azure IoT 操作。 本文提供 Ubuntu 和 Windows 相关指南。

本文中的步骤为群集做好安全设置部署的准备,该部署是一个较长但可用于生产的过程。 若要快速部署 Azure IoT 操作并运行只有测试设置的示例工作负载,请改为参阅快速入门:使用 K3s 在 GitHub Codespaces 中运行 Azure IoT 操作。 有关测试设置和安全设置的详细信息,请参阅“部署详细信息”>“选择功能”

先决条件

Microsoft 支持 Azure Kubernetes 服务 (AKS) Edge Essentials 在 Windows 上部署,支持 K3s 在 Ubuntu 上部署。 若要将 Azure IoT 操作部署到多节点解决方案,请使用 Ubuntu 上的 K3s。

若要准备已启用 Azure Arc 的 Kubernetes 群集,需要满足以下条件:

  • 具有“所有者”角色或“参与者”和“用户访问管理员”角色组合的 Azure 订阅。 可通过以下方式检查你的访问级别:导航到你的订阅,选择 Azure 门户左侧的“访问控制(IAM)”,然后选择“查看我的访问权限”。 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

  • Azure 资源组。 每个资源组仅支持一个 Azure IoT 操作实例。 若要创建新的资源组,请使用 az group create 命令。 有关当前支持的 Azure 区域的列表,请参阅支持的区域

    az group create --location <REGION> --resource-group <RESOURCE_GROUP> --subscription <SUBSCRIPTION_ID>
    
  • 在群集计算机上安装的 Azure CLI 2.64.0 或更高版本。 如有必要,请使用az --version检查版本,使用az upgrade进行更新。 有关详细信息,请参阅 如何安装 Azure CLI

  • 适用于 Azure CLI 的 connectedk8s 扩展最新版本:

    az extension add --upgrade --name connectedk8s
    
  • 满足系统要求的硬件:

  • 如果要将 Azure IoT 操作部署到启用了容错功能的多节点群集,请查看为 Edge 卷准备 Linux 中的硬件和存储要求。

创建群集并为其启用 Arc

本部分提供在 Linux 和 Windows 上经验证的环境中创建群集的步骤。

若要准备 Ubuntu 上的 K3s Kubernetes 群集,请执行以下操作:

  1. 创建单节点或多节点 K3s 群集。 有关示例,请参阅 K3s 快速入门指南K3s 相关项目

  2. 查看 kubectl 是否已作为 K3s 的一部分安装。 如果答案为否,请按照在 Linux 上安装 kubectl 的说明进行操作。

    kubectl version --client
    
  3. 按照说明安装 Helm

  4. .kube/config中创建 K3s 配置 yaml 文件:

    mkdir ~/.kube
    sudo KUBECONFIG=~/.kube/config:/etc/rancher/k3s/k3s.yaml kubectl config view --flatten > ~/.kube/merged
    mv ~/.kube/merged ~/.kube/config
    chmod  0600 ~/.kube/config
    export KUBECONFIG=~/.kube/config
    #switch to k3s context
    kubectl config use-context default
    sudo chmod 644 /etc/rancher/k3s/k3s.yaml
    
  5. 运行以下命令以增加用户监视/实例限制

    echo fs.inotify.max_user_instances=8192 | sudo tee -a /etc/sysctl.conf
    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
    
    sudo sysctl -p
    
  6. 为了获得更好的性能,请调高文件描述符限制:

    echo fs.file-max = 100000 | sudo tee -a /etc/sysctl.conf
    
    sudo sysctl -p
    

通过 Arc 启用群集

将群集连接到 Azure Arc,以便远程管理它。

  1. 在部署了 Kubernetes 群集的计算机上,使用具有所需 Azure 订阅角色的 Microsoft Entra 用户帐户登录到 Azure CLI:

    az login
    

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

  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 connectedk8s connect 命令连接到已启用 Arc 的 Kubernetes 群集,并将其作为 Azure 资源组的一部分进行管理。

    az connectedk8s connect --name <CLUSTER_NAME> -l <REGION> --resource-group <RESOURCE_GROUP> --subscription <SUBSCRIPTION_ID> --enable-oidc-issuer --enable-workload-identity --disable-auto-upgrade
    

    为防止对 Azure IoT 操作用作依赖项的 Azure Arc 和系统 Arc 扩展进行计划外更新,此命令将禁用自动升级。 改为根据需要手动升级代理

    重要

    如果环境使用代理服务器或 Azure Arc 网关,请使用代理信息修改 az connectedk8s connect 命令:

    1. 按照使用出站代理服务器进行连接使用 Azure Arc 网关将 Kubernetes 群集加入 Azure Arc 中的说明进行操作。
    2. 169.254.169.254 添加到 az connectedk8s connect 命令的 --proxy-skip-range 参数。 Azure 设备注册表使用此本地终结点获取访问令牌以进行授权。

    Azure IoT 操作不支持需要受信任证书的代理服务器。

  5. 获取群集的颁发者 URL。

    az connectedk8s show --resource-group <RESOURCE_GROUP> --name <CLUSTER_NAME> --query oidcIssuerProfile.issuerUrl --output tsv
    

    保存此命令的输出,以便在后续步骤中使用。

  6. 创建 k3s 配置文件。

    sudo nano /etc/rancher/k3s/config.yaml
    
  7. 将以下内容添加到 config.yaml 文件,并将 <SERVICE_ACCOUNT_ISSUER> 占位符替换为群集的颁发者 URL。

    kube-apiserver-arg:
     - service-account-issuer=<SERVICE_ACCOUNT_ISSUER>
     - service-account-max-token-expiration=24h
    
  8. 保存文件,并退出 nano 编辑器。

  9. 获取自定义位置对象 ID 并将其保存为环境变量 OBJECT_ID,准备在 Arc 群集上启用 Azure Arc 服务自定义位置。 必须使用 Microsoft Entra 用户帐户(而不是服务主体)登录到 Azure CLI 才能成功运行该命令。 完全按照如下所示运行以下命令,且不要更改 GUID 值

    export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
    

注意

如果收到错误:“无法获取‘custom-locations’应用的 oid。 请在不启用该功能的情况下继续操作。 权限不足,无法完成操作”,则可能表示你用来检索自定义位置对象 ID 的服务主体缺少必要的权限。 使用满足先决条件的 Microsoft Entra 用户帐户登录到 Azure CLI。

  1. 使用 az Connectedk8s enable-features 命令在 Arc 群集上启用自定义位置功能。 此命令使用上一步骤中保存的 OBJECT_ID 环境变量来设置 custom-locations-oid 参数的值。 在部署 Kubernetes 群集的计算机上运行此命令:

    az connectedk8s enable-features -n <CLUSTER_NAME> -g <RESOURCE_GROUP> --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
    
  2. 重启 K3s。

    systemctl restart k3s
    

为 Azure 容器存储配置多节点群集

在至少具有三个节点的多节点群集上,可以选择在部署 Azure IoT 操作时使用 Azure Arc 启用的 Azure 容器存储来启用存储容错功能。

若要在部署期间启用容错功能,请按照使用多节点 Ubuntu 群集为 Edge 卷准备 Linux 中的步骤配置群集。

高级配置

此时,如果你拥有一个已启用 Azure Arc 的 Kubernetes 群集但尚未将 Azure IoT 操作部署到该群集,你可能需要针对高级方案配置群集。

后续步骤

现在你已经具有已启用 Azure Arc 的 Kubernetes 群集,接下来可以部署 Azure IoT 操作