【问题标题】:Kubernetes pod network hang upKubernetes pod 网络挂了
【发布时间】:2020-02-18 20:58:27
【问题描述】:

我在 Google Cloud 上运行 Kubernetes 集群(版本 1.13.7-gke.24)。相同的代码在机器上运行了3个多月没有任何问题。今天我发现其中一个 Pod 与网络断开连接超过 24 小时。

首先我检查了 pod 是否有互联网连接,通常它有。我使用curl 查询了一些知名的互联网网站 - 所有这些网站都遥不可及。当我尝试运行 apt-get updateapt-get upgrade 时发生了同样的事情。

其次,我检查了我的应用程序的日志,发现异常如下:

Unable to log to provider GoogleStackdriverLogProvider, ex: Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
   at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at ***.LogService.Providers.GoogleStackdriverLogProvider.WriteAsync(IEnumerable`1 entries) in LogService/Providers/GoogleStackdriverLogProvider.cs:line 71

这些日志来自我运行的将新日志发送到 Google Stackdriver 的代码。请注意,那些日志存储在同一个数据中心 - 无需互联网将它们发送出去,应用程序仍然无法到达目的地。

最后,这很奇怪,与队列系统的连接一直在运行。不幸的是,应用程序继续从队列中下载新消息,但由于网络连接,所有消息都以失败告终。

总结:

Internet connectivity - NO
VPC connectivity - YES
GCP services connectivity - YES

其他说明:

  • 我能够ssh 进入有问题的 pod。
  • 重新启动 pod 解决了这个问题。
  • 以前从未发生过。我运行这个部署已经一年多了。
  • 当我杀死它时,有问题的 pod 已经 4 天半了。
  • 只有一个 pod 受到此问题的影响。所有其他(100 多个 pod)都在运行,没有任何问题。

为了防止这个问题进一步发生,应该怎么做?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine


    【解决方案1】:

    这听起来像是一个暂时性问题,可能是由于为 pod 创建的虚拟接口出现故障。这些类型的故障很少见且难以预防。但是,您可以使用 livenessProbes 将部署构建得更有弹性,这样这种类型的错误将导致容器失败并重新创建。

    不幸的是,如果重新启动容器还不够,pod 将进入 crashLoopBackOff 状态。如果 pod 进入此状态以触发 pod 删除,您可以设置警报通知您。

    虽然可能无法阻止,但您可以自动恢复它

    【讨论】:

    • 您好,感谢您的建议。听起来livenessProbes 可能是解决此问题的“快速而肮脏”的解决方案。问题是如何验证 pod 是否有互联网和服务连接? Ping网上有些地方可能对生产环境有危险,不是吗?
    • 测试互联网的最简单方法是 curl Google.com,但这不是探测。您需要检查您的 pod 是否有依赖互联网的功能。探测取决于您的代码如何工作以及它的作用。
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 2019-04-06
    • 2020-06-16
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2021-01-01
    相关资源
    最近更新 更多