繁体   English   中英

Kubernetes - Pod 仍处于 ContainerCreating 状态

[英]Kubernetes - Pod Remains in ContainerCreating Status

我是 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 image 本身从未出现在docker images

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

--- 新信息 ---

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

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

--- 新信息 ---

运行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 都显示为 Running,这很好。

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

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

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

尝试systemctl restart kubelet.service

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

kubectl delete pod -n namespace podname

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

就我而言,这是由于在部署命名空间中缺少 Secret 或说 ConfigMap

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

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

我希望这足够有帮助

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM