【问题标题】:How to detect exception occured in a Pod in Kubernetes?如何在 Kubernetes 中检测 Pod 中发生的异常?
【发布时间】:2019-01-25 17:18:52
【问题描述】:

我有一个多节点 kubernetes 集群。多个服务部署为 Pod。它们通过rabbitmq相互通信,rabbitmq也作为集群中的Pod存在。

问题场景:

多次服务无法连接到 Rabbitmq 中所需的队列。 Rabbitmq pod 日志和服务 Pod 中也会报告相同的日志。这主要是由于连接问题而发生的,并且不一致。由于此故障,功能中断。而且由于这不是崩溃,因此 pod 在 kubernetes 中始终处于运行状态。为了解决这个问题,我们必须手动去重启 Pod。

我想为每个 pod 创建一个活跃度探测。但是这应该如何捕捉异常呢?由于服务中的许多进程都可以尝试访问连接,因此其中任何一个都可能失败。

【问题讨论】:

  • 我认为如果您将问题移至Server Fault 可能会更好。 StackOverflow 主要面向开发人员,换句话说,我们大部分时间都在享受应用层的乐趣。您可能会发现您的问题在 Server Fault 上的回答更快、更准确。

标签: docker kubernetes rabbitmq kubectl


【解决方案1】:

我建议为 liveness probe 实现 http 端点,该端点将检查与 rabbitmq 的连接状态,或者当 rabbitmq 连接不起作用时实际失败并退出整个过程。

但是...最好的解决方案是在连接失败时无限期地重试连接,以便透明地恢复临时网络问题。编写良好的服务应该等待依赖的服务开始运行,而不是将故障向上级联。

假设您使用该 rabvbit 或其他服务对 20 项服务进行了活动检查,就像您在此处询问的那样。该服务中断了一段时间,最终得到的集群有 20 多个处于 CrashLoopBackoff 状态的服务,这是由于故障时的增量回退。这意味着当最初失败的服务恢复时,您的集群将需要一些时间来恢复,而且画面会非常混乱,乍一看更难理解发生了什么。

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2012-03-14
    • 2014-08-03
    • 2019-08-09
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多