禁用 Azure 本地上的 Windows 节点池功能
适用于:Azure 本地版本 23H2
安装 Azure Local 时,会自动下载三个虚拟硬盘(VHD)-Azure Linux、Windows Server 2019 和 Windows Server 2022。 需要 VHD 才能在 Azure 本地部署 AKS,因为它们充当 AKS 群集中 Kubernetes 节点的基本操作系统映像。 对于混合 OS 环境(Windows 和 Linux 节点),需要 Windows Server 2019 或 Windows Server 2022 VHD 来预配 Windows Server 2019 或 2022 节点池。 Linux 节点池使用经过优化的 Azure Linux VHD 来运行 Kubernetes。 但是,在仅使用 Linux 容器的环境中,不需要 Windows VHD。 可以禁用 Windows 节点池功能,以避免下载和存储此大型文件,从而节省带宽和存储空间。
本操作指南文章将指导你如何禁用 Azure 本地Azure Kubernetes 服务(AKS)的 Windows 节点池功能。 禁用此功能可防止自动下载 Windows 虚拟硬盘(VHD),该磁盘的大小约为 20 GB,并且创建基于 Windows 的节点池需要。 这样做后,具有有限 Internet 带宽的企业可以避免不必要的下载,尤其是在其工作负载专用于使用 Linux 容器时。 此功能有助于优化带宽使用情况,并简化不需要 Windows 节点的环境的资源管理。
开始之前
在开始之前,请确保满足以下先决条件:
- 已部署 Azure 本地。 本文仅适用于已部署 Azure 本地版本 2411。 部署 Azure 本地版本 2411 之前,无法运行本文中的命令。 我们目前不支持在初始 Azure 本地版本 2411 部署之前进行此更改。
- 用于更新 Azure 本地配置的 Azure RBAC 权限。 请确保具有以下角色。 有关详细信息,请参阅 部署所需的权限:
- Azure 本地管理员
- 读者
- 自定义位置。 自定义位置的名称。 自定义位置是在 Azure 本地部署期间配置的。 如果位于Azure 门户中,请转到 Azure 本地系统资源的“概述>服务器”页。 应会看到群集的自定义位置。
- Azure 资源组。 在其中部署 Azure 本地的 Azure 资源组。
建议的选项:从 Azure CloudShell 会话中禁用 Windows nodepool
为了帮助简化配置,以下步骤定义本文中引用的环境变量。 请记住,将显示的值替换为自己的值。
在环境变量中设置自定义位置和资源组值:
$customlocationName = <The custom location name for Azure Local>
$resourceGroup = <The Azure resource group in which Azure Local is deployed>
接下来,运行以下命令以获取 clusterName
参数。 此参数是在 Azure 本地部署的 Arc 资源桥的名称:
az customlocation show -n $customlocationName -g $resourceGroup --query hostResourceId
预期输出:
/subscriptions/f3dwer-00000-4383-2345-00000/resourceGroups/SanJose/providers/Microsoft.ResourceConnector/appliances/sanjose-arcbridge
在此输出中, sanjose-arcbridge
是部署在 Azure 本地群集上的 Arc 资源桥的名称。 对于部署,此名称不同。
$clusterName = <Name of Arc resource bridge deployed on the Azure Local cluster>
接下来,获取部署到自定义位置的 AKS Arc 扩展的名称。 若要获取此名称,请运行以下命令,列出在自定义位置上安装的扩展:
az customlocation show -n $customlocationID -g $resourceGroup --query clusterExtensionIds -o tsv
预期输出:
/subscriptions/fbaf508b-cb61-4383-9cda-a42bfa0c7bc9/resourceGroups/SanJose/providers/Microsoft.ResourceConnector/appliances/sanjose-arcbridge/providers/Microsoft.KubernetesConfiguration/extensions/hybridaksextension
/subscriptions/fbaf508b-cb61-4383-9cda-a42bfa0c7bc9/resourceGroups/SanJose/providers/Microsoft.ResourceConnector/appliances/sanjose-arcbridge/providers/Microsoft.KubernetesConfiguration/extensions/vmss-hci
应在自定义位置安装两个扩展:AKS Arc 和 Arc VM 管理。 将 AKS 的扩展名称复制到环境变量中。 在示例输出中,扩展名为 hybridaksextension
. 它可能与你所看到的不同:
$extensionName = <Name of AKS Arc extension you deployed on the custom location>
获得扩展名称后,请为以下参数创建变量,然后禁用 Windows nodepool 功能:
$extensionVersion = "$(az k8s-extension show -n $extensionName -g $resourceGroup -c $clusterName --cluster-type appliances --query version -o tsv)"
$releaseTrain = "$(az k8s-extension show -n $extensionName -g $resourceGroup -c $clusterName --cluster-type appliances --query releaseTrain -o tsv)"
az k8s-extension update --resource-group $resourceGroup --cluster-name $clusterName --cluster-type appliances --name $extensionName --version $extensionVersion --release-train $releaseTrain --config disable-windows-nodepool=true --yes
备用选项:通过远程桌面连接到 Azure 本地物理节点后禁用 Windows nodepool
如果由于某种原因无法使用 Azure CloudShell 或连接到 Azure 的计算机来禁用 Windows nodepool,则可以在通过远程桌面连接到任何一个 Azure 本地物理节点后禁用 Windows nodepool。 必须首先登录到 Azure:
az k8s-extension update --resource-group $resourceGroup --cluster-name $clusterName --cluster-type appliances --name $extensionName --version $extensionVersion --release-train $releaseTrain --config disable-windows-nodepool=true --yes
验证是否已禁用 Windows 节点池功能
可以通过运行 az k8s-extension show
来检查配置设置是否已应用,如下所示:
az k8s-extension show --name $extensionName --resource-group $resourceGroup --cluster-name $clusterName --cluster-type appliances --query configurationSettings
预期输出:
...
"disable-windows-nodepool": "true",
...
接下来,运行以下命令,检查是否已禁用 Windows 节点池:
az aksarc get-versions --resource-group $resourceGroup --custom-location $customlocationName
osType=Windows
对于每个 Kubernetes 版本选项,输出应显示“Windows nodepool 功能已禁用”,并且ready
状态应为false
:
...
"1.27.7": {
"readiness": [
{
"errorMessage": null,
"osSku": "CBLMariner",
"osType": "Linux",
"ready": true
},
{
"errorMessage": "Windows nodepool feature is disabled",
"osSku": "Windows2019",
"osType": "Windows",
"ready": false
},
{
"errorMessage": "Windows nodepool feature is disabled",
"osSku": "Windows2022",
"osType": "Windows",
"ready": false
}
],
...
常见问题解答
如果尝试禁用 Windows nodepool 和 Windows 节点池存在于 Azure 本地部署的至少 1 个 AKS 群集上,会发生什么情况?
必须先手动删除 Windows nodepool,然后才能禁用该功能。 如果有现有的 Windows 节点池,则无法禁用该功能。
如果禁用 Windows 节点池,下载的 Windows VHD 会发生什么情况?
如果禁用 Windows nodepools 功能,则会自动删除以前下载的 Windows VHD。 可以验证是否已从 Azure 本地存储路径中删除 Windows VHD。 删除可能需要一些时间。 在检查前等待 30 分钟。 必须检查所有存储路径,因为 Windows VHD 以轮循机制方式分配给存储路径,具体取决于可用的存储容量。