【问题标题】:Kubernetes - Pod Remains in ContainerCreating StatusKubernetes - Pod 保持 ContainerCreating 状态
【发布时间】:2018-01-10 15:34:50
【问题描述】:

我是 Kubernetes 的新手,所以还有很多东西要学。

已经创建了一个双节点 Kubernetes 集群,并且两个节点(主节点和工作节点)都准备好工作了,这很好:

[monkey@k8s-dp1 nginx-test]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
k8s-dp1   Ready     master    2h        v1.9.1
k8s-dp2   Ready     <none>    2h        v1.9.1

此外,所有 Kubernetes Pod 看起来都还不错:

[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE     NAME                              READY     STATUS    RESTARTS   AGE
kube-system   etcd-k8s-dp1                      1/1       Running   0          2h
kube-system   kube-apiserver-k8s-dp1            1/1       Running   0          2h
kube-system   kube-controller-manager-k8s-dp1   1/1       Running   0          2h
kube-system   kube-dns-86cc76f8d-9jh2w          3/3       Running   0          2h
kube-system   kube-proxy-65mtx                  1/1       Running   1          2h
kube-system   kube-proxy-wkkdm                  1/1       Running   0          2h
kube-system   kube-scheduler-k8s-dp1            1/1       Running   0          2h
kube-system   weave-net-6sbbn                   2/2       Running   0          2h
kube-system   weave-net-hdv9b                   2/2       Running   3          2h

但是,如果我尝试在集群中创建新部署,则会创建部署,但其 pod 无法进入适当的 RUNNING 状态。例如

[monkey@k8s-dp1 nginx-test]# kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment.yaml
deployment "nginx-deployment" created

[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                READY     STATUS              RESTARTS   AGE
default       nginx-deployment-569477d6d8-f42pz   0/1       ContainerCreating   0          5s
default       nginx-deployment-569477d6d8-spjqk   0/1       ContainerCreating   0          5s
kube-system   etcd-k8s-dp1                        1/1       Running             0          3h
kube-system   kube-apiserver-k8s-dp1              1/1       Running             0          3h
kube-system   kube-controller-manager-k8s-dp1     1/1       Running             0          3h
kube-system   kube-dns-86cc76f8d-9jh2w            3/3       Running             0          3h
kube-system   kube-proxy-65mtx                    1/1       Running             1          2h
kube-system   kube-proxy-wkkdm                    1/1       Running             0          3h
kube-system   kube-scheduler-k8s-dp1              1/1       Running             0          3h
kube-system   weave-net-6sbbn                     2/2       Running             0          2h
kube-system   weave-net-hdv9b                     2/2       Running             3          2h

我不确定如何找出问题所在,但如果我执行kubectl get ev,我可以看到以下可疑事件:

<invalid>   <invalid>    1         nginx-deployment-569477d6d8-f42pz.15087c66386edf5d   Pod
             Warning   FailedCreatePodSandBox   kubelet, k8s-dp2        Failed create pod sandbox.

但我不知道从这里去哪里。我还可以看到 nginx docker 映像本身从未出现在 docker images 中。

如何了解有关该问题的更多信息?我是否遗漏了 Kubernetes 设置中的一些基本内容?

--- 新信息 ---

有关背景信息,以防万一……

Kubernetes 节点在 Windows 10 hyper-v 上托管​​的 CentOS 7 虚拟机上运行。

--- 新信息 ---

运行 kubectl describe pods 显示以下警告:

Warning  NetworkNotReady         1m                             kubelet, k8s-dp2  network is not ready: [runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized]

--- 新信息 ---

在我一天的工作时间结束后,我关闭了运行 Kubernetes 的 Hyper-v 虚拟机一夜,今天早上我回到办公室时,我再次启动了 Kubernetes 虚拟机以继续运行,大约 15 分钟,命令:

kubectl get pods --all-namespaces 仍然像昨天一样为那些 nginx pod 显示 ContainerCreating,但是现在,该命令现在将所有 pod 显示为 Running,包括 nginx pod...即问题在经过一段时间后自行解决完全重启主节点和工作节点虚拟机。

我现在再次完全重启,所有 pod 都显示为正在运行,这很好。

【问题讨论】:

    标签: kubernetes kubectl weave


    【解决方案1】:

    使用kubectl describe pod &lt;name&gt;查看更多信息

    【讨论】:

    • 添加了您建议的输出,显示cni config uninitialized 警告。有关详细信息,请参阅帖子编辑。
    • CNI 警告表明您的内部集群网络运行不正常。根据您为集群网络选择的内容及其所在位置,可能存在路由冲突,不允许拉取和启动容器。确保您没有冲突的网络。您可以在weave.works/docs/net/latest/kubernetes/kube-addon 找到更多有用的调试技巧
    • 就我而言,describe pod &lt;name&gt; 未找到。吊舱还没有开始。在这种情况下如何获取信息?
    • 你是说当你列出 pod 时你可以看到它的创建状态,但是当你描述它时它不存在?
    【解决方案2】:

    对运行 Kubernetes 主节点和 Kubernetes 工作节点的两个虚拟机进行完全重启后,Pod 全部显示为 Running(注意:第一次重启后,有问题的 pod 大约需要 15-20 分钟进入Running 状态,然后在随后重新启动时,有问题的 pod 进入Running 状态相对要快得多...... 3-5 分钟)。

    【讨论】:

    • 为我工作。谢谢!
    【解决方案3】:

    使用kubectl describe pod 将显示所有事件。在某些情况下,部署可能仍在从远程拉取 docker 映像,因此状态仍将显示为 ContainerCreating

    【讨论】:

      【解决方案4】:

      尝试systemctl restart kubelet.service

      【讨论】:

        【解决方案5】:

        你可以删除de pod,它会自动重新创建。

        kubectl delete pod -n namespace podname
        

        【讨论】:

          【解决方案6】:

          在我的情况下,这是由于在部署命名空间中缺少 Secret 或说 ConfigMap

          【讨论】:

            【解决方案7】:

            我昨天也遇到了同样的问题。当我在 ContainerCreating 状态中描述这些 Pod 时,问题出在 CNI,它失败了,Pod 保持在 ContainerCreating 状态。所以我从控制平面中删除了 CNI 并重新部署它。所有 pod 都会在一分钟内将其状态更改为运行状态。

            【讨论】:

              【解决方案8】:

              您可以在部署上运行 kubectl describe 命令以确保正在发生的事件,或者您可以在部署正在启动的 Pod 上运行 describe 命令。

              有时您的集群中可能没有足够的资源。检查您在运行的 pod 上使用 kubectl top 命令的内容,看看其中一个是否耗尽了您的所有资源。

              我希望这对你有足够的帮助

              【讨论】:

                【解决方案9】:

                有同样的问题,但我这边的问题是集群花费了太多时间来拉取图像,可能快速重启集群有助于加快进程

                【讨论】:

                  【解决方案10】:

                  只是分享这个命令对找出我的 ContainerCreating Status 问题有很大帮助:

                  kubectl get events --sort-by=.metadata.creationTimestamp
                  

                  【讨论】:

                    猜你喜欢
                    • 2017-12-13
                    • 2018-02-28
                    • 1970-01-01
                    • 2017-05-18
                    • 2018-03-04
                    • 1970-01-01
                    • 2021-04-08
                    • 2018-11-17
                    • 2018-12-07
                    相关资源
                    最近更新 更多