lio*_*tur 6 deployment kubernetes devops kubernetes-statefulset
我有我的部署,我在其中定义了 postgres statefulSet,但是我没有 PVC,所以如果 pod 死了 - 所有数据都消失了。如果我将列出所有豆荚,我会看到下图:
pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 10 min
Run Code Online (Sandbox Code Playgroud)
一段时间后,我再次列出豆荚,如下所示:
pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 5 min
Run Code Online (Sandbox Code Playgroud)
如您所见,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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我怎么知道为什么statefulSet 会重新创建 Pod?有没有额外的日志?可能它与机器的资源有某种关系,或者 pod 是在另一个节点上创建的,该节点在特定时刻拥有更多资源?
有任何想法吗?
我想出的另一个巧妙的小技巧是在describe
Pod 停止记录时立即使用
kubectl logs -f mypod && kubectl describe pod mypod
Run Code Online (Sandbox Code Playgroud)
当 Pod 失败并停止记录时,kubectl logs -f mypod
将终止,然后 shell 将立即执行kubectl describe pod mypod
,(希望)让您在重新创建失败的 Pod 之前捕获其状态。
就我而言,它显示
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Run Code Online (Sandbox Code Playgroud)
与蒂莫西所说的一致
你应该考虑两件事:
使用以下命令检查 pod 的当前状态和最近发生的事件:
kubectl describe pods ${POD_NAME}
查看 Pod 中容器的状态。他们都在跑步吗?最近有重启吗?根据 Pod 的状态继续调试。
特别是仔细看看Pod 崩溃的原因。
更多信息可以在我提供的链接中找到。
StatefulSet 提供了一种调试机制,可以使用注释暂停 Pod 上的所有控制器操作。在任何 StatefulSet Pod 上将注释设置pod.alpha.kubernetes.io/initialized
为“false”将暂停 StatefulSet 的所有操作。暂停时,StatefulSet 将不会执行任何缩放操作。设置调试挂钩后,您可以在 StatefulSet Pod 的容器内执行命令,而不会受到扩展操作的干扰。您可以通过执行以下命令将注释设置为“false”:
kubectl annotate pods <pod-name> pod.alpha.kubernetes.io/initialized="false" --overwrite
当注释设置为“false”时,StatefulSet 将不会响应其 Pod 变得不健康或不可用。在每个 StatefulSet Pod 上的注释被删除或设置为“true”之前,它不会创建替换 Pod。
请告诉我这是否有帮助。
归档时间: |
|
查看次数: |
1514 次 |
最近记录: |