429 请求过多错误

本文讨论如何排查 Microsoft Azure Kubernetes 服务 (AKS) 群集 (在 Azure) 上使用另一个 Kubernetes 实现的群集上的“429 请求过多”错误导致的故障。

症状

收到类似于以下文本的错误:

服务返回错误。

Status=429

Code=“OperationNotAllowed”

Message=“服务器拒绝了请求,因为已收到针对此订阅的请求过多。”

Details=[{
“code”:“TooManyRequests”,
“message”:“{
\“operationGroup\”:\“HighCostGetVMScaleSet30Min\”,
\“startTime\”:\“2020-09-20T07:13:55.2177346+00:00\”,
\“endTime\”:\“2020-09-20T07:28:55.2177346+00:00\”,
\“allowedRequestCount\”:1800,
\“measuredRequestCount\”:2208
}",
“target”:“HighCostGetVMScaleSet30Min”
}]

InnerError={“internalErrorCode”:“TooManyRequestsReceived”}“}

原因:调用量过多导致 Azure 限制订阅

Azure 上的 Kubernetes 群集 (,无论是否具有 AKS) ,频繁进行纵向扩展或缩减,或使用群集自动缩放程序,都可能导致大量 HTTP 调用。 此呼叫量可能会导致失败,因为它超出了 Azure 订阅分配的配额。

有关这些错误的详细信息,请参阅限制 Azure 资源管理器请求排查 API 限制错误。 有关如何分析和识别这些错误的原因并获取解决这些问题的建议的信息,请参阅 使用 AKS 诊断和解决问题来分析和识别错误

解决方案 1:升级到更高版本的 Kubernetes

运行 Kubernetes 1.18。x 或更高版本。 这些版本包含 AKS 限制/429 错误 和支持 大型群集(无限制)中所述的许多改进。 但是,如果由于订阅) 中的实际负载或客户端数而仍看到限制 (,则可以尝试以下解决方案。

解决方案 2:增加自动缩放程序扫描间隔

如果 发现“群集自动缩放程序已检测到群集自动缩放程序限制”诊断报告限制 ,可以尝试增加 自动缩放程序扫描间隔 ,以减少从群集自动缩放程序) 对虚拟机规模集 (VMSS) 的调用次数。

解决方案 3:重新配置第三方应用程序以减少调用

“查看请求速率和限制详细信息”诊断中按用户代理进行筛选时,如果发现第三方应用程序 ((如监视应用程序) 发出过多 GET 请求),请更改这些应用程序的设置以减少 GET 调用的频率。 此外,请确保应用程序客户端在调用 Azure API 时使用指数回退。

解决方案 4:将群集拆分为不同的订阅或区域

如果有许多使用虚拟机规模集的群集和节点池,请尝试在同一订阅) 内将群集拆分为不同的订阅或区域 (。 大多数 Azure API 限制都是订阅区域级别的共享限制。 例如,子 1 和“美国东部”区域中的所有群集和客户端都共享虚拟机规模集 GET API 的限制。 因此,可以在新区域中移动或缩放新的 AKS 群集,并在 Azure API 限制上解除阻止。 如果预期群集具有高活动 ((例如,如果有活动群集自动缩放程序) ),则此方法会有所帮助。 如果有许多客户端 (,例如 Rancher、Terraform 等) ,这也很有帮助。 由于所有群集的弹性和轮询 Azure API 的客户端数不同,因此没有关于每个订阅区域级别可运行的群集数量的通用准则。 有关具体指导,可以创建支持票证。

使用 AKS 诊断和解决问题来分析和识别错误

对于 AKS 群集,可以使用 AKS 诊断和解决问题 来分析和确定这些错误的原因,并获取解决这些问题的建议。 导航到Azure 门户中的群集,然后在左侧导航栏中选择“诊断和解决问题”,打开“AKS 诊断和解决问题”。 搜索并打开 Azure 资源请求限制,可在其中获取包含一系列诊断的报告。 这些诊断可以显示群集是否遇到任何请求速率限制 (429 响应) Azure 资源管理器 (ARM) 或资源提供程序 (RP) ,以及限制的来源。 例如:

  • 已为群集检测到请求速率限制:如果已在当前 AKS 群集中检测到限制,此诊断将提供一些常规建议。

  • 已检测到群集自动缩放程序限制:如果检测到限制并源自群集自动缩放程序,则显示此诊断。

    若要减少来自群集自动缩放程序的请求量,请使用以下方法:

    • 增加自动缩放程序扫描间隔以减少从群集自动缩放程序到虚拟机规模集的调用次数。 此方法可能会对纵向扩展所需的时间产生负延迟影响,因为群集自动缩放程序在为新虚拟机调用 Azure 计算资源提供程序 (CRP) 之前会等待更长时间。
    • 确保群集的最低 Kubernetes 版本为 1.18。 收到 429 个限制响应时,Kubernetes 版本 1.18 和更高版本可以更好地处理请求速率回退。 强烈建议保留在受支持的 Kubernetes 版本中,以接收安全修补程序。
  • 限制 - Azure 资源管理器:此诊断显示 AKS 群集中指定时间范围内受限制的请求数。

  • 请求速率 - Azure 资源管理器:此诊断显示 AKS 群集中指定时间范围内的请求总数。

  • 查看请求速率和限制详细信息:此诊断有多个关系图来确定限制详细信息,包括限制的请求数和请求总数。 还可以使用以下维度筛选结果:

    • 主机:检测到 HTTP 状态 429 响应的主机。 Azure 资源管理器限制来自 management.azure.com;其他任何内容都是较低层资源提供程序。
    • 用户代理:具有已限制的指定用户代理的请求。
    • 操作:检测到 HTTP 状态 429 响应的操作。
    • 客户端 IP:发送受限制请求的客户端 IP 地址。

请求限制可能由此订阅中的任何群集的组合引起,而不仅仅是此群集的请求速率。

示例 1:群集自动缩放程序限制

此示例是关于分析群集自动缩放程序导致的限制。

如果在 AKS 诊断和解决问题已知问题>、可用性和性能 >Azure 资源请求限制中检测到群集自动缩放程序限制诊断,则表示群集自动缩放程序发出的请求已受到限制。

显示检测到群集自动缩放程序请求限制的示意图。

可以在限制 - Azure 资源管理器诊断中找到受限制的请求数以及请求被限制的时间。

显示群集自动缩放程序请求何时受到限制的示意图。

可以查找同一时间段内所有 ARM 请求的数量。

所有 ARM 请求的示意图。

可以检查查看请求速率和限制详细信息诊断来查找限制详细信息。 从“选择筛选器”下拉列表中选择“429”,可以看到自动缩放程序请求被限制在 15:00 到 16:00。

用户代理的限制关系图。

还可以查找群集自动缩放程序和其他用户代理的限制请求总数。

按用户代理显示的总限制示意图。

还可以按操作筛选限制。 在这种情况下,VMSS VM 删除操作受到限制。

按操作显示的限制关系图。

可以查找受限制的请求数以及按操作分组的所有请求数。

按操作显示总限制的示意图。

然后,可以按照 “建议的操作” 中的建议来减少限制。

关系图显示检测到群集自动缩放程序请求限制。

示例 2:云提供商限制

此示例介绍由云提供程序引起的限制。 在较大的群集中操作资源(例如,在节点数超过 500 的群集中预配Azure 负载均衡器)时,通常会发生这种情况。

如果在群集中发现限制,可以在 查看请求速率和限制详细信息 诊断中查看限制详细信息。 从“选择筛选器”下拉列表中选择“429”,可以看到云提供商请求被限制在 03:00 到 06:00。

显示检测到限制的示意图。

按用户代理显示的限制关系图。

还可以按操作进行筛选,找出受限制的操作是否为“Network/loadBalancers/read”。

按操作显示的限制关系图。

可以使用基于节点 IP 的 AKS 预览功能负载均衡器来降低此限制。

联系我们寻求帮助

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