Kubernetes - Pod 保持 ContainerCreating 状态

Kubernetes - Pod Remains in ContainerCreating Status

我对 Kubernetes 的一切都是陌生的,所以还有很多东西要学。

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

[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 Pods 看起来都不错:

[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 无法进入适当的 运行 状态。例如

[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]

--- 新信息 ---

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

kubectl get pods --all-namespaces 仍然显示 ContainerCreating 对于那些 nginx pods 和昨天一样,但是现在,命令现在显示所有 pods 为 Running 包括 nginx pods... 即在主节点和工作节点 VM 完全重启后问题自行解决。

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

使用kubectl describe pod <name>查看更多信息

完全重启两个虚拟机,即 运行 Kubernetes 主节点和 Kubernetes 工作节点得到 Pods 全部显示为 Running(注意:第一次重启后,有问题的 pods 花了大约 15-20 分钟进入 Running 状态,在随后的重启中,有问题的 pods 进入 Running 状态的时间相对较长更快... 3-5 分钟)。

尝试systemctl restart kubelet.service

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

我昨天遇到了同样的问题。当我在 ContainerCreating 状态下描述那些 pods 时,问题出在 CNI,它失败了并且 pods 停留在 ContainerCreating 状态。所以我从控制平面中删除了 CNI 并重新部署它。所有 pods 将在一分钟内将其状态更改为 运行 状态。

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

kubectl delete pod -n namespace podname

在我的例子中,这是由于缺少 Secret 或部署命名空间中的 ConfigMap

您可以在部署上使用 运行 kubectl describe 命令来确定正在发生的事件,或者您可以 运行 在 [=19] 上使用 describe 命令=] 部署正在启动。

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

希望对您有所帮助

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

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

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