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