23

我对 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

我不确定如何找出问题所在,但如果我例如执行 a 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仍然显示ContainerCreating与昨天相同的那些 nginx pod,但是现在,该命令现在将所有 pod 显示为Running包括 nginx pod...即,在主节点和工作节点虚拟机完全重新启动后,问题自行解决。

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

4

10 回答 10

21

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

于 2018-01-10T16:03:53.997 回答
11

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

于 2018-01-11T11:13:38.123 回答
10

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

于 2018-12-14T15:52:49.980 回答
4

尝试systemctl restart kubelet.service

于 2018-08-09T09:08:21.250 回答
3

您可以删除 de pod,它将自动重新创建。

kubectl delete pod -n namespace podname
于 2020-09-01T21:02:21.463 回答
2

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

于 2020-10-21T10:41:43.460 回答
1

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

于 2020-06-24T10:25:47.960 回答
1

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

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

我希望这足够有帮助

于 2020-11-29T21:42:49.967 回答
0

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

kubectl get events --sort-by=.metadata.creationTimestamp
于 2021-12-03T16:17:40.070 回答
0

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

于 2021-09-11T09:55:53.557 回答