有关 AKS 上的 Windows Server 的常见问题解答

本文提供有关在 Azure Kubernetes 服务 (AKS) 上使用 Windows Server 容器的某些最常见问题的解答。

Windows 支持哪种磁盘?

Azure 磁盘和 Azure 文件存储是受支持的卷类型,并且在 Windows Server 容器中作为 New Technology File System (NTFS) 卷进行访问。

Windows 是否支持第 2 代虚拟机 (VM)?

只有 WS2022 支持 Windows 上的第 2 代 VM。

有关详细信息,请参阅对 Azure 上的第 2 代 VM 的支持

如何修补 Windows 节点?

若要获取用于 Windows 节点的最新补丁,可以升级节点池升级节点映像

是否支持保留客户端源 IP?

目前,Windows 节点不支持客户端源 IP 保留

Windows OS 中的默认传输控制协议 (TCP) 超时是多久?

Windows OS 中的默认 TCP 超时为四分钟。 此值不可配置。 当应用程序使用较长的超时时,同一节点中不同容器之间的 TCP 连接将在四分钟后关闭。

尝试创建新的 Windows 代理池时,为什么会发生错误?

如果在 2020 年 2 月之前创建了群集,并且从未执行过任何升级操作,则该群集仍使用旧的 Windows 映像。 你可能会看到类似于以下示例的错误:

“找不到从部署模板中引用的下列映像: 发布者: MicrosoftWindowsServer,产品/服务: WindowsServer,Sku: 2019-datacenter-core-smalldisk-2004,版本: 最新。 有关查找可用映像的说明,请参阅通过 Azure PowerShell 查找和使用 Azure 市场虚拟机映像。”

若要修复此问题,需要执行以下步骤:

  1. 升级群集控制平面,这会更新映像产品/服务和发布者。
  2. 创建新的 Windows 代理池。
  3. 将 Windows Pod 从现有 Windows 代理池移动到新的 Windows 代理池。
  4. 删除旧的 Windows 代理池。

尝试部署 Windows Pod 时,为什么会发生错误?

如果在 --max-pods 中指定的值小于要创建的 Pod 数量,可能会发生 No available addresses 错误。

若要修复此错误,请使用具有足够高的 --max-pods 值的 az aks nodepool add 命令。 例如:

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --name $NODEPOOL_NAME \
    --max-pods 3

有关更多详细信息,请参阅--max-pods文档

为什么我的虚拟机节点上有一个名为“sshd”的意外用户?

AKS 在安装 OpenSSH 服务时添加了一个名为“sshd”的用户。 此用户不是恶意用户。 建议客户更新其警报,忽略此意外的用户帐户。

如何轮换 Windows 节点池的服务主体?

Windows 节点池不支持服务主体轮换。 若要更新服务主体,请创建新的 Windows 节点池,并将 Pod 从旧池迁移到新池。 将 Pod 迁移到新池之后,删除旧节点池。

可以使用托管标识,而不是服务主体。 有关详细信息,请参阅在 AKS 中使用托管标识

如何为群集上的 Windows Server 节点更改管理员密码?

若要使用 Azure CLI 更改管理员密码,请使用带有 --admin-password 参数的 az aks update 命令。 例如:

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --admin-password <new-password>

若要使用 Azure PowerShell 更改密码,请将 Set-AzAksCluster cmdlet 与 -AdminPassword 参数一起使用。 例如:

Set-AzAksCluster `
    -ResourceGroupName $RESOURCE_GROUP `
    -Name $CLUSTER_NAME `
    -AdminPassword <new-password>

请记住,执行群集更新会导致重启,并且仅更新 Windows Server 节点池。 有关 Windows Server 密码要求的详细信息,请参阅 Windows Server 的密码要求

我可以创建多少个节点池?

具有 Windows 节点池的 AKS 群集的资源限制与为 AKS 服务指定的默认限制相同。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中可用的配额、虚拟机大小限制和区域

我是否可以在 Windows 节点上运行入口控制器?

是,可以运行支持 Windows Server 容器的入口控制器。

我的 Windows Server 容器是否可以使用 gMSA?

是的。 组托管服务帐户 (gMSA) 支持已正式 (GA) 适用于 AKS 上的 Windows。 有关详细信息,请参阅为 Azure Kubernetes 服务 (AKS) 群集上的 Windows Server 节点启用组托管服务帐户 (GMSA)

在具有 Windows 节点的群集上,服务的数量是否有限制?

具有 Windows 节点的群集可以有大约 500 个服务(有时会更少),超过此值就会导致端口耗尽。 此限制适用于外部流量策略设置为“集群”的 Kubernetes 服务。

当服务上的外部流量策略配置为群集时,流量会在节点上经历额外的源 NAT。 此过程也会导致从 TCPIP 动态端口池中保留端口。 此端口池是一个有限的资源(默认情况下约为 16K 端口),与服务的许多活动连接可能会导致动态端口池耗尽,从而导致连接丢失。

如果在配置 Kubernetes 服务时将“外部流量策略”设置为“本地”,则 500 个服务不太可能出现端口耗尽问题。

如何更改正在运行的容器的时区?

若要更改正在运行的 Windows Server 容器的时区,请通过 PowerShell 会话连接到正在运行的容器。 例如:

kubectl exec -it CONTAINER-NAME -- powershell

在正在运行的容器中,使用 Set-TimeZone 来设置正在运行的容器的时区。 例如:

Set-TimeZone -Id "Russian Standard Time"

若要查看正在运行的容器的当前时区或可用时区列表,请使用 Get-TimeZone