来自 StatefulSet 的 Pod 卡在 ContainerCreating 状态 - FailedCreatePodSandBox
Posted
技术标签:
【中文标题】来自 StatefulSet 的 Pod 卡在 ContainerCreating 状态 - FailedCreatePodSandBox【英文标题】:Pod from StatefulSet stuck in ContainerCreating state - FailedCreatePodSandBox 【发布时间】:2019-06-06 14:16:46 【问题描述】:StatefulSet控制的Pod卡在ContainerCreating
状态
kubectl 获取 pod
md-0 1/1 Running 0 4h 10.242.208.59 node-5
md-1 1/1 Running 0 4h 10.242.160.36 node-6
md-2 0/1 ContainerCreating 0 4h <none> node-6
kubectl 描述 pod md-2
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreatePodSandBox 2m (x68 over 4h) kubelet, node-6 Failed create pod sandbox: rpc error: code = DeadlineExceeded desc = context deadline exceeded
kubectl 描述 statefulset md
Replicas: 3 desired | 3 total
Pods Status: 2 Running / 1 Waiting / 0 Succeeded / 0 Failed
...
Events: <none>
来自 node-6 的 kubelet 日志
RunPodSandbox from runtime service failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
CreatePodSandbox for pod "md-2_exc(a995dd3d-158d-11e9-967b-6cb311235088)" failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
createPodSandbox for pod "md-2_exc(a995dd3d-158d-11e9-967b-6cb311235088)" failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Error syncing pod a995dd3d-158d-11e9-967b-6cb311235088 ("md-2_exc(a995dd3d-158d-11e9-967b-6cb311235088)"), skipping: failed to "CreatePodSandbox" for "md-2_exc(a995dd3d-158d-11e9-967b-6cb311235088)" with CreatePodSandboxError: "CreatePodSandbox for pod \"md-2_exc(a995dd3d-158d-11e9-967b-6cb311235088)\" failed: rpc error: code = DeadlineExceeded desc = context deadline exceeded"
我还有另外两个 StatefulSet,它们按预期工作。由于某种原因,这个坏了。
也直接kubectl run
和docker run
工作正常。
2019-01-18 更新
在恢复更改的时间线后,我看到这个特定的 pod 被 docker 命令绕过 kubernetes 删除了。
可能这以某种方式破坏了 Kubernetes 的状态或其他东西。
经过多次搜索、询问和故障排除后,我仍然无法找到问题所在。所以我不得不在分配了 pod 的节点上重新启动 kubelet (systemctl restart kubelet
)。问题就解决了。
我希望了解如何检查 kubernetes(或 kubelet?)到底出了什么问题,但找不到任何线索。在这种情况下,kubelet 行为仍然是黑盒。
【问题讨论】:
你能分享 docker.log 吗? docker 是否挂在节点上? @EytanAvisror 目前只有这个 level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete" level=info msg="垫片搬运工-containerd-垫片启动”地址= “/ containerd-垫片/ MOBY / c89f44d12f912a4f93d5d7a526c65aac0eef8fac2184e9d54ccad9962d7c21e9 / shim.sock” 调试=假模块= “containerd /任务” PID = 73580水平=信息味精= “中间收获” ID = c89f44d12f912a4f93d5d7a526c65aac0eef8fac2184e9d54ccad9962d7c21e9模块="containerd/tasks" 并且每次 POD 重新启动时都会重复此消息。 @alexar 'kubectl logs md-2 -p' 是否返回更有用的信息? @Nepomucen 没有什么有用的“来自服务器的错误(BadRequest):未找到 pod“md-2”中先前终止的容器“md”,对于当前 pod(kubectl 记录 md-2)也是“错误来自服务器(BadRequest):pod“md-2”中的容器“md”正在等待启动:ContainerCreating” 你能为你的 StatefulSet 提供一个 YAML 文件吗?看起来问题完全出在应用程序方面。因此,您可能可以在应用程序支持网站上找到解决方案。 【参考方案1】:正如更新中提到的alexar:
在恢复更改的时间线后,我看到这个特定的 pod 被 docker 命令绕过 kubernetes 删除了。
可能这以某种方式破坏了 Kubernetes 的状态或其他东西。
经过多次搜索、询问和故障排除后,我仍然无法找到问题所在。所以我不得不在分配了 pod 的节点上重新启动 kubelet(systemctl restart kubelet)。问题就解决了。
【讨论】:
以上是关于来自 StatefulSet 的 Pod 卡在 ContainerCreating 状态 - FailedCreatePodSandBox的主要内容,如果未能解决你的问题,请参考以下文章
基于StatefulSet有状态部署与DaemonSet部署prometheus node-exporter
Kubectl 等待 statefulset 的一个 pod 就绪?