Kubernetes 停留在 ContainerCreating

fou*_*r43 186 kubernetes

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

小智 228

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

  • 当您使用秘密并且找不到它们时会发生这种情况(例如 yaml 中的拼写错误或您之前忘记创建它)。对于几乎所有其他可能的错误,它会得到 CrashLoopback 或 Error 状态,但是对于秘密,它只会卡在 ContainerCreating 中,如果你描述了 pod,那么你会在最后看到一条消息,说没有找到秘密,但它几乎没有说没有关于这个问题。 (13认同)
  • 如果容器在没有任何事件的情况下停留在 ContainerCreating 怎么办?对我来说,事件显示为“无事件”。 (8认同)

Chr*_*ski 27

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

kubectl get events --all-namespaces  --sort-by='.metadata.creationTimestamp'
Run Code Online (Sandbox Code Playgroud)

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

就我而言,我有一个与 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]
Run Code Online (Sandbox Code Playgroud)


小智 7

就我而言,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
    
    Run Code Online (Sandbox Code Playgroud)
  7. export no_proxy=$no_proxy,$(minikube ip)
  8. export NO_PROXY=$no_proxy,$(minikube ip)

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

$ docker pull tutum/hello-world
Run Code Online (Sandbox Code Playgroud)

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

我的第二个问题是互联网连接缓慢。由于所需的泊坞窗图像是100MB的顺序,无论是码头工人容器和Kubernetes豆荚留在\pauseContainerCreating30分钟的状态。

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

$ ls -l /var/lib/docker/tmp
Run Code Online (Sandbox Code Playgroud)

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

如果您在 minikube 中开发并使用 VPN,docker 可以通过fiddler使用您的 VPN 。即docker连接到fiddler的ip:port,fiddler连接到VPN。否则,您的主机和 minikube 虚拟机之间不会共享 VPN。