你当前正在访问 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 群集,请执行以下操作:
创建单节点或多节点 K3s 群集。 有关示例,请参阅 K3s 快速入门指南或 K3s 相关项目。
查看 kubectl 是否已作为 K3s 的一部分安装。 如果答案为否,请按照在 Linux 上安装 kubectl 的说明进行操作。
kubectl version --client
按照说明安装 Helm。
在
.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
运行以下命令以增加用户监视/实例限制。
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
为了获得更好的性能,请调高文件描述符限制:
echo fs.file-max = 100000 | sudo tee -a /etc/sysctl.conf sudo sysctl -p
通过 Arc 启用群集
将群集连接到 Azure Arc,以便远程管理它。
在部署了 Kubernetes 群集的计算机上,使用具有所需 Azure 订阅角色的 Microsoft Entra 用户帐户登录到 Azure CLI:
az login
如果在任何时间点收到错误,指出“设备必须受管才能访问你的资源”,请再次运行
az login
,并确保使用浏览器以交互方式登录。登录后,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 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
命令:- 按照使用出站代理服务器进行连接或使用 Azure Arc 网关将 Kubernetes 群集加入 Azure Arc 中的说明进行操作。
- 将
169.254.169.254
添加到az connectedk8s connect
命令的--proxy-skip-range
参数。 Azure 设备注册表使用此本地终结点获取访问令牌以进行授权。
Azure IoT 操作不支持需要受信任证书的代理服务器。
获取群集的颁发者 URL。
az connectedk8s show --resource-group <RESOURCE_GROUP> --name <CLUSTER_NAME> --query oidcIssuerProfile.issuerUrl --output tsv
保存此命令的输出,以便在后续步骤中使用。
创建 k3s 配置文件。
sudo nano /etc/rancher/k3s/config.yaml
将以下内容添加到
config.yaml
文件,并将<SERVICE_ACCOUNT_ISSUER>
占位符替换为群集的颁发者 URL。kube-apiserver-arg: - service-account-issuer=<SERVICE_ACCOUNT_ISSUER> - service-account-max-token-expiration=24h
保存文件,并退出 nano 编辑器。
获取自定义位置对象 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。
使用 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
重启 K3s。
systemctl restart k3s
为 Azure 容器存储配置多节点群集
在至少具有三个节点的多节点群集上,可以选择在部署 Azure IoT 操作时使用 Azure Arc 启用的 Azure 容器存储来启用存储容错功能。
若要在部署期间启用容错功能,请按照使用多节点 Ubuntu 群集为 Edge 卷准备 Linux 中的步骤配置群集。
高级配置
此时,如果你拥有一个已启用 Azure Arc 的 Kubernetes 群集但尚未将 Azure IoT 操作部署到该群集,你可能需要针对高级方案配置群集。
- 如果要在群集上启用可观测性功能,请按照部署可观测性资源并设置日志中的步骤操作。
- 如果要在群集上配置自己的证书颁发者,请按照证书管理 > 自带颁发者中的步骤进行操作。
后续步骤
现在你已经具有已启用 Azure Arc 的 Kubernetes 群集,接下来可以部署 Azure IoT 操作。