Kubernetes Pod网络挂断

时间:2019-10-22 16:42:21

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

我正在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即可将其发送出去,但应用程序仍无法到达目的地。

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

摘要:

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

其他说明:

  • 我能够ssh进入有问题的吊舱。
  • 重新启动Pod可以解决此问题。
  • 以前从未发生过。我正在运行此部署一年以上。
  • 有问题的吊舱在我杀死它的时候已经有4天半了。
  • 只有一个吊舱受此问题影响。所有其他(超过100个容器)都运行正常。

该如何做才能进一步预防此问题?

1 个答案:

答案 0 :(得分:2)

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

不幸的是,如果重新整理容器还不够,那么容器将进入crashLoopBackOff状态。您可以设置警报,以通知您如果广告连播是否进入此状态以触发广告连播删除。

虽然可能无法预防,但是您可以自动恢复它