Kubernetes 卡在 ContainerCreating 上

Kubernetes 卡在 ContainerCreating 上

运行创建操作后,我的 Kubernetes 集群中的 Pod 卡在“ContainerCreating”上。如何查看此操作的日志以诊断其卡住的原因?kubectl logs似乎不起作用,因为容器需要处于非待处理状态。

答案1

kubectl describe pods将列出一些(可能是大多数但不是全部)与 pod 相关的事件,包括拉取镜像、启动容器。

答案2

活动中可以提供更多信息。

kubectl get events --all-namespaces  --sort-by='.metadata.creationTimestamp'

但请注意,由于此错误,排序事件可能无法正常工作:https://github.com/kubernetes/kubernetes/issues/29838


或者:

从 Kubernetes 1.18 开始,所有新对象都具有用于服务器端应用的元数据,这为我们提供了一种对事件进行排序的新方法:

kubectl get events --sort-by=".metadata.managedFields[0].time"

从:https://github.com/kubernetes/kubernetes/issues/29838#issuecomment-789660546


在我的例子中,我有一个与 pod 相关的事件:

default       13s         Warning   FailedMount               Pod          Unable to mount volumes for pod "restore-db-123-1-5f24s_default(9b7df264-2976-11ea-bb8f-42010a9a002c)": timeout expired waiting for volumes to attach or mount for pod "default"/"restore-db-123-1-5f24s". list of unmounted volumes=[nfsv]. list of unattached volumes=[nfsv default-token-hxrng]

答案3

在我的案例中,docker 的互联网访问被阻止了。使用代理解决了这个问题(使用 sandylss 的评论):

  1. minikube stop
  2. minikube delete
  3. export http_proxy=http://user:pass@ip:port
  4. export https_proxy=http://user:pass@ip:port
  5. export no_proxy=192.168.99.0/24
  6. minikube start --logtostderr --v=0 --bootstrapper=localkube --vm-driver hyperv 
      --hyperv-virtual-switch "Primary Virtual Switch" --docker-env HTTP_PROXY=$http_proxy \
      --docker-env HTTPS_PROXY=$https_proxy --docker-env NO_PROXY=$no_proxy
    
  7. export no_proxy=$no_proxy,$(minikube ip)
  8. export NO_PROXY=$no_proxy,$(minikube ip)

然后,要检查 docker 是否可以访问互联网,请运行:

$ docker pull tutum/hello-world

在集群中(使用 连接到集群minikube ssh);如果它开始下载,则停止该过程。

我的第二个问题是网络连接速度很慢。由于所需的 Docker 镜像大约有 100MB,因此 Docker 容器和 Kubernetes Pod 都处于\pause30ContainerCreating分钟的状态。

要检查 docker 是否正在下载镜像,请运行:

$ ls -l /var/lib/docker/tmp

在集群中,显示正在下载的临时图像文件,否则为空。

如果你在 minikube 中开发并使用 VPN,docker 可以通过以下方式使用你的 VPN提琴手。也就是说,docker 将连接到 fiddler 的 ip:port,而 fiddler 连接到 VPN。否则,您的主机和 minikube VM 之间不会共享 VPN。

答案4

我遇到这个问题的一次原因是因为我的资源声明意外地非常小。

资源:限制:cpu:1000m 内存:1024M 请求:cpu:1000m 内存:1024M

对比

资源:限制:cpu:1000m 内存:1024m 请求:cpu:1000m 内存:1024m

大写 m 会对资源使用产生很大影响。我被困在 ContainerCreating 上,因为我没有为容器提供足够的内存。

相关内容