gpt4 book ai didi

kubernetes - 间歇性 502 错误网关

转载 作者:行者123 更新时间:2023-12-05 03:27:35 28 4
gpt4 key购买 nike

背景故事优先:

我们有一个正在运行的部署在尝试使用 JMeter 等工具对其进行负载测试时遇到间歇性 502。它是一个将 POST 数据记录到另一个容器上的 mysql 数据库的容器。它每秒处理大约 85 个请求,在 Jmeter 中几乎没有错误,但是一旦这个数字开始增加,错误率也开始增加。在对 jmeter 的响应中,错误以 502 bad gateways 的形式返回:

<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx</center>
</body>
</html>

现在有趣的 - 或者,相当令人困惑的部分是,这似乎是一个 NGINX 错误 - 我们根本不使用 NGINX 作为我们的入口。这一切都是通过 IBM Cloud Bluemix 等实现的。

到目前为止,我们已经推断出当来自 Jmeter 的返回此错误的请求实际上没有命中我们在容器上运行的 main.py 脚本时会发生这些 502 错误 - 没有这些错误的日志在 pod 级别(使用 kubectl logs -n 命名空间部署)。有什么方法可以拦截/捕获基本上不会进入 pod 的错误吗?所以我们至少可以控制客户端在发生这些故障时返回的消息?

最佳答案

我假设设置是 Ingress --> Service --> Deployment。从这里https://cloud.ibm.com/docs/containers?topic=containers-ingress-types我的结论是您正在使用 nginx 入口 Controller ,因为没有提到正在使用的自定义入口 Controller /入口类。

502 仅出现在 85 req/sec 以上,因此 Ingress/Service/Deployment k8s 资源配置正确......应该不需要检查您的服务端点和入口配置。

请参阅下面有关来自入口 Controller 的间歇性 502 错误的一些故障排除提示:

  • Pod 可能无法应对增加的负载(这可能不适用于您,因为 85 请求/秒非常低,您还说过 kubectl get pods 显示 0 RESTARTS,但它可能对其他人有用):
    • 如果您配置了 pod,它们会达到内存/cpu 限制,例如在 kubectl get pods 中检查 pod 状态 OOMKilled ;也做一个kubectl describe在你的 pods/deploymet/replicaset 上检查是否有任何错误
    • Pod 可能不会响应 Liveness Probe,Pod 将重新启动,您将看到 502;做一个kubectl describe svc <your service> | grep Endpoints并检查您是否有任何后端 pod 为您的服务做好准备
    • Pod 可能不会响应 Readiness Probe,在这种情况下,它们将不符合作为您服务的后端 Pod 的条件,当您开始看到 502 时,再次检查服务是否有任何端点
  • 缺少就绪探测:即使应用程序尚未启动,您的 pod 也将被视为就绪并可用作服务的端点。但这意味着仅在您的 jmeter 测试开始时获得 502 ...所以我想这不适用于您的用例
    • 您是否自动缩放?当负载增加时,另一个 pod 可能会在没有就绪探测的情况下启动吗?
  • 您在 Jmeter 中使用 Keep Alive 吗?您可能会用完文件描述符,因为您创建了太多连接,但是我没有看到这会导致 502,但仍然值得检查...
  • 入口 Controller 本身无法处理流量(在 85 个请求/秒时这很难想象,但为了完整起见添加它)
    • 如果您有足够的权限,您可以执行 kubectl get ns并查找包含入口 Controller 的命名空间,ingress-nginx或类似的东西。在该命名空间中查找 pod 重启或其他事件。
  • 如果以上几点都不能帮助您继续调查,请尝试其他方法,寻找线索:
    • 尝试更好地隔离问题,使用 kubectl port-forward而不是通过入口。你能注入(inject)更多 85 req/sec 吗?如果是,那么您的 Pod 可以处理负载并且您已将问题隔离到入口 Controller 。
    • 尝试启动更多 Pod 副本
    • 使用 Jmeter Throughput Shaping Timer Plugin 并逐渐增加负载;然后随着负载的增加监控您的服务和 Pod 发生了什么,也许您可​​以找到 502 的确切触发器并获得更多关于可能是根本原因的线索

关于kubernetes - 间歇性 502 错误网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71428308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com