kubernetes - StatefulSet 重新创建 pod,为什么?
问题描述
我有我的部署,在那里我定义了 postgres statefulSet,但是我没有 PVC,所以如果 pod 死了 - 所有数据都消失了。如果我要列出所有豆荚,我会看到下图:
pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 10 min
一段时间后,我再次列出 pod 并查看以下内容:
pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 5 min
如您所见,postgresPod 运行了 5 分钟。我“描述”了 statefulset 并在下面看到:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 5m **(x2 over 10m)** statefulset-controller create Pod postgresPod in StatefulSet x-postgres successful
Warning RecreatingFailedPod 5m statefulset-controller StatefulSet xx/x-postgres is recreating failed Pod postgresPod
Normal SuccessfulDelete 5m statefulset-controller **delete Pod postgresPod** in StatefulSet x-postgres successful
所以我的问题是我怎么知道为什么statefulSet 会重新创建 pod?有没有额外的日志?可能它与机器的资源有某种关系,或者 pod 是在另一个节点上创建的,该节点在那个特定时刻拥有更多资源?
有任何想法吗?
解决方案
我想出的另一个漂亮的小技巧是describe
在 Pod 停止记录后立即使用
kubectl logs -f mypod && kubectl describe pod mypod
当 pod 失败并停止记录时,kubectl logs -f mypod
将终止,然后 shell 将立即执行kubectl describe pod mypod
,(希望)让您在重新创建失败 pod 之前捕获它的状态。
就我而言,它显示
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
与蒂莫西所说的一致
推荐阅读
- macos - 尝试在 mac os 上安装 caffe
- wordpress - 在前端仪表板 wordpress 插件中登录后的自定义重定向
- lambda - Java 8 forEach 无法在 lambda 表达式中计数
- ocaml - 如何编写一个获得两个函数之和的函数?
- json - 从多个 JSON 文件创建完整的结构
- mysql - Mysql 5.7 性能调优。存储过程响应时间过长
- sql - 在 SQL Server 中根据几个条件返回值
- mysql - sqoop 合并键创建多个部分文件,而不是一个不符合使用合并键目的的文件
- python - 如何解码网络抓取的数据..?
- javascript - 如何使用 await 使用 mocha 测试异步代码