首页 > 解决方案 > 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 是在另一个节点上创建的,该节点在那个特定时刻拥有更多资源?

有任何想法吗?

标签: kubernetesdeploymentdevopskubernetes-statefulset

解决方案


我想出的另一个漂亮的小技巧是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

与蒂莫西所说的一致


推荐阅读