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 限制是订阅区域级别的共享限制。 例如,子区域中的所有群集和客户端和美国东部区域共享虚拟机规模集 GET API 的限制。 因此,可以在新区域中移动或缩放新的 AKS 群集,并在 Azure API 限制上解除阻止。 如果预期群集具有高活动(例如,如果具有活动群集自动缩放程序),则此方法会有所帮助。 如果你拥有许多客户端(如 Rancher、Terraform 等),它也很有帮助。 由于所有群集的弹性和轮询 Azure API 的客户端数不同,因此没有关于每个订阅区域级别可以运行的群集数量的通用准则。 有关特定指南,可以创建支持票证。
使用 AKS 诊断和解决问题来分析和识别错误
对于 AKS 群集,可以使用 AKS 诊断和解决问题 来分析和识别这些错误的原因,并获取解决问题的建议。 导航到Azure 门户中的群集,然后在左侧导航中选择“诊断并解决问题”以打开 AKS 诊断和解决问题。 搜索并打开 Azure 资源请求限制,可在其中获取包含一系列诊断的报告。 这些诊断可以显示群集是否经历了 Azure 资源管理器(ARM)或资源提供程序(RP)的任何请求速率限制(429 响应),以及限制来自何处。 例如:
已为群集检测到请求速率限制:如果当前 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 地址。
- 主机:检测到 HTTP 状态 429 响应的主机。 Azure 资源管理器限制来自
请求限制可能是此订阅中任何群集的组合造成的,而不仅仅是此群集的请求速率。
示例 1:群集自动缩放程序限制
此示例与分析群集自动缩放程序导致的限制有关。
如果在 AKS 诊断中检测到群集自动缩放程序限制并解决了>已知问题、可用性和性能>Azure 资源请求限制,则表明群集自动缩放程序发出的请求已受到限制。
可以在“限制”中查找受限制的请求数以及请求限制时间 - Azure 资源管理器诊断。
可以在同一时间段内找到所有 ARM 请求的数目。
可以查看 “查看请求速率”和“限制详细信息 ”诊断来查找限制详细信息。 从“选择筛选器”下拉列表中选择 429s,可以看到自动缩放程序请求被限制为 15:00 到 16:00。
还可以查找群集自动缩放程序和其他用户代理的限制请求总数。
还可以按操作筛选限制。 在这种情况下,VMSS VM 删除操作会受到限制。
可以找到受限制的请求数以及按操作分组的所有请求数。
然后,可以按照建议操作中的建议来减少限制。
示例 2:云提供商限制
此示例与云提供商造成的限制有关。 在较大的群集中运行资源(例如,在具有 500 个节点的群集中预配Azure 负载均衡器)时,通常会发生这种情况。
如果在群集中找到限制,可以在“查看请求速率”和“限制详细信息”诊断中看到 限制详细信息 。 从“选择筛选器”下拉列表中选择 429s,可以看到云提供商请求被限制为 03:00 到 06:00。
还可以按操作进行筛选,找出受限制的操作为“Network/loadBalancers/read”。
可以使用基于 AKS 预览功能节点 IP 的负载均衡器来减少此限制。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。