我是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状态。 e.g。
[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设置中的基本内容吗?
--- NEW INFO ---
有关背景信息以防万一...
Kubernetes节点在Windows 10 hyper-v上托管的CentOS 7虚拟机上运行。
--- NEW INFO ---
正在运行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]
--- NEW INFO ---
在我的工作时间结束后的晚上切断运行Kubernetes的Hyper-v虚拟机,今天早上我回到办公室时,我再次启动Kubernetes虚拟机进行操作,持续约15分钟,命令:
kubectl get pods --all-namespaces
仍然显示ContainerCreating
这些nginx pod与昨天一样,但是现在,该命令现在显示所有pod为Running
,包括nginx pods ... ie完全重启主节点和工作节点虚拟机后,问题就解决了。
我现在再次完全重新启动,所有pod都显示为Running,这很好。
答案 0 :(得分:3)
使用kubectl describe pod <name>
查看更多信息
答案 1 :(得分:2)
对运行Kubernetes主节点和Kubernetes工作节点的两个虚拟机进行完全重启,使所有Pod显示为Running
(注意:首次重启后,吊舱需要大约15-20分钟有问题进入Running
状态,并在随后重新启动时,相关的吊舱进入Running
状态相对更快... 3-5分钟。
答案 2 :(得分:2)
使用kubectl describe pod
将显示所有事件。在某些情况下,部署可能仍在从远程提取docker映像,因此状态仍将显示为ContainerCreating
答案 3 :(得分:1)
尝试systemctl restart kubelet.service
答案 4 :(得分:0)
昨天我遇到了同样的问题。当我将这些吊舱描述为ContainerCreating状态时,问题出在CNI上,它失败了,吊舱仍处于ContainerCreating状态。因此,我从控制面板中删除了CNI并重新部署了它。一分钟内所有吊舱的状态都会更改为运行状态。
答案 5 :(得分:0)
您可以删除De Pod,它将自动重新创建。
kubectl delete pod -n namespace podname
答案 6 :(得分:0)
就我而言,这是由于缺少Secret或在部署名称空间中说ConfigMap
答案 7 :(得分:0)
您可以在部署上运行kubectl describe
命令以确保发生的事件,或者可以在部署正在加速的Pod上运行describe
命令。
有时您的群集中可能没有足够的资源。在运行的Pod上使用kubectl top
命令检查一下,看其中一个是否耗尽了所有资源。
我希望这会有所帮助