我正在Google Cloud(版本)上运行Kubernetes集群 1.13.7-gke.24)。相同的代码在计算机上运行了3个月以上,没有任何问题。今天,我发现其中一个Pod已与网络断开连接超过24小时。
首先,我检查了Pod是否可以正常连接互联网。我使用curl
来查询一些知名的互联网网站-所有这些网站都无法访问。当我尝试运行apt-get update
或apt-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
进入有问题的吊舱。该如何做才能进一步预防此问题?
答案 0 :(得分:2)
这听起来像是暂时性的问题,可能是由于为Pod创建的虚拟接口失败。这些类型的故障很少见并且很难预防。但是,您可以使用livenessProbes将部署构建为更具弹性,以便这种类型的错误将导致容器失败并重新创建。
不幸的是,如果重新整理容器还不够,那么容器将进入crashLoopBackOff状态。您可以设置警报,以通知您如果广告连播是否进入此状态以触发广告连播删除。
虽然可能无法预防,但是您可以自动恢复它