kubernetes - Kubernetes pod 网络挂了
问题描述
我在 Google Cloud(版本 1.13.7-gke.24)上运行 Kubernetes 集群。相同的代码在机器上运行了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 connectivity - NO
VPC connectivity - YES
GCP services connectivity - YES
其他注意事项:
- 我能够
ssh
进入有问题的吊舱。 - 重新启动 pod 解决了这个问题。
- 以前从未发生过。我运行这个部署已经一年多了。
- 当我杀死它时,有问题的豆荚已经 4 天半了。
- 只有一个 pod 受到此问题的影响。所有其他(100 多个 pod)都在运行,没有任何问题。
怎么做才能进一步防止这个问题?
解决方案
这听起来像是一个暂时性问题,可能是由于为 pod 创建的虚拟接口出现故障。这些类型的故障很少见且难以预防。但是,您可以使用livenessProbes构建更具弹性的部署,这样这种类型的错误将导致容器失败并重新创建。
不幸的是,如果重新启动容器还不够,pod 将进入 crashLoopBackOff 状态。如果 pod 确实进入此状态以触发 pod 删除,您可以设置警报通知您。
虽然可能无法阻止,但您可以自动恢复
推荐阅读
- java - 为什么在链表的节点中插入值时需要一个临时节点?
- javascript - npm 中的 ERR_SSL_WRONG_VERSION_NUMBER
- python - TypeError: __init__(): 构造函数参数与 face_recognition 调用不兼容
- sql - 如何在 sqlite 中过滤 SUM(flag) OVER (...)
- c++ - 为什么这种替换失败会产生错误?
- flutter - 根据警报对话框响应更改开关按钮颜色
- c - 在IDE中为什么不自动出现;(分号)?
- javascript - 更改文本时可以触发 contenteditable 文本吗?HTML Javascript
- javascript - Discord.js v12 - deleteMessage 抛出旧消息错误
- arrays - 计算数组矩阵的问题