来自 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 rundocker 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

Statefulset详细解析

Kubectl 等待 statefulset 的一个 pod 就绪?

Kubernetes 如何在 StatefulSet 中跟踪哪个云盘挂载到哪个 Pod?

k8s实践18:statefulset学习配置记录

在 Kubernetes 中配置 StatefulSet 的 Pod 的起始索引