运行或缩放大型 AKS 群集时的常见问题常见问题解答

本文解答有关在 Microsoft Azure Kubernetes 服务 (AKS) 中运行或缩放大型群集时可能出现的常见问题的常见问题。 大型群集是以超过 500 个节点的规模运行的任何群集。

创建、纵向扩展或升级期间出现“超出配额”错误

若要解决此问题,请在尝试在其中创建、缩放或升级的订阅中创建支持请求,并请求相应资源类型的配额。 有关详细信息,请参阅 区域计算配额

部署使用高级网络的 AKS 群集时出现“insufficientSubnetSize”错误

此错误指示用于群集的子网在其 CIDR 中不再具有可用于成功分配资源的 IP。 在升级、横向扩展或创建节点池的过程中,可能会出现此问题。 出现此问题的原因是子网中的可用 IP 数小于以下公式的结果:

请求的节点数 * 节点池 --max-pod

先决条件

解决方案

由于无法更新现有子网的 CIDR 范围,因此必须有权创建新子网才能解决此问题。 请按照下列步骤操作:

  1. 重新生成具有更大 CIDR 范围的新子网,该范围足以满足操作目标。

  2. Create具有新的非重叠范围的新子网。

  3. Create新子网上的新节点池。

  4. 从将替换的旧子网中的旧节点池中清空 Pod。

  5. 删除旧子网和旧节点池。

由于 SNAT 端口耗尽,我遇到了偶尔的出口连接故障

对于在) 500 多个节点 (相对大规模运行的群集,我们建议使用 AKS 托管网络地址转换 (NAT) 网关 ,提高可伸缩性。 Azure NAT 网关允许每个 IP 地址最多 64,512 个出站 UDP 和 TCP 流量流,最多允许 16 个 IP 地址。

如果不使用托管 NAT,请参阅 排查源网络地址转换 (SNAT) 耗尽和连接超时 问题,了解并解决 SNAT 端口耗尽问题。

使用 Azure 门户,无法扩展到 5,000 个节点

通过执行以下步骤,使用 Azure CLI 纵向扩展到最多 5,000 个节点:

  1. Create群集中的最小节点池数 (,因为通过运行以下命令,最大节点池节点限制为 1,000) :

    az aks nodepool add --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
    
  2. 一次纵向扩展一个节点池。 理想情况下,在连续纵向扩展 1,000 之间设置 5 分钟的睡眠时间。 运行以下命令:

    az aks nodepool scale --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
    

我的升级正在运行,但速度很慢

在其默认配置中,AKS 在升级期间通过执行以下操作来激增:

  • 创建一个新节点。
  • 将节点池缩放到超过所需节点数的节点数一个节点。

对于最大浪涌设置,默认值为一个节点意味着 AKS 在清空现有应用程序并替换早期版本的节点之前创建一个新节点。 此额外节点使 AKS 能够最大程度地减少工作负荷中断。

升级具有多个节点的群集时,如果使用默认值 max-surge,则升级整个群集可能需要几个小时。 可以自定义每个节点池的属性 max-surge ,以便在升级速度和升级中断之间实现权衡。 通过增大最大浪涌值,可以更快地完成升级过程。 但是,如果最大激增值较大,也可能在升级过程中造成中断。

运行以下命令以增加或自定义现有节点池的最大激增:

az aks nodepool update --resource-group MyResourceGroup --name mynodepool --cluster-name MyManagedCluster --max-surge 5

我的升级已达到配额 (5,000 个群集) 限制

若要解决此问题,请参阅 增加区域 vCPU 配额

超过 750 个节点的内部服务创建速度缓慢或由于超时错误而失败

标准负载均衡器 (SLB) 后端池更新是已知的性能瓶颈。 我们正在研究一项新功能,以便能够更快地大规模创建服务和 SLB。 若要向我们发送有关此问题的反馈,请参阅 Azure Kubernetes 对具有基于 IP 的后端池的负载均衡器的支持

解决方案

建议将群集缩减到少于 750 个节点,然后为群集创建内部负载均衡器。 若要创建内部负载均衡器,请根据以下示例过程创建 LoadBalancer 服务类型和 azure-load-balancer-internal 注释。

步骤 1:Create内部负载均衡器

若要创建内部负载均衡器,请创建名为 internal-lb.yaml 且包含 LoadBalancer 服务类型和 azure-load-balancer-internal 注释的服务清单,如以下示例所示:

apiVersion: v1
kind: Service
metadata:
  name: internal-app
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: internal-app

步骤 2:部署内部负载均衡器

使用 kubectl apply 命令部署内部负载均衡器,并指定 YAML 清单的名称,如以下示例所示:

kubectl apply -f internal-lb.yaml

创建群集后,还可以按照此过程) 预配内部负载均衡器 (,并保持内部负载均衡服务运行。 这样做可以大规模地向负载均衡器添加更多服务。

大规模创建 SLB 服务需要数小时才能运行

SLB 后端池更新是已知的性能瓶颈。 我们正在研究一项新功能,使你能够大规模运行负载均衡的服务,并显著提高创建、更新和删除操作的性能。 若要向我们发送反馈,请参阅 Azure Kubernetes 对具有基于 IP 的后端池的负载均衡器的支持

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。