运行创建操作后,我的 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 的评论):
minikube stop
minikube delete
export http_proxy=http://user:pass@ip:port
export https_proxy=http://user:pass@ip:port
export no_proxy=192.168.99.0/24
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
export no_proxy=$no_proxy,$(minikube ip)
export NO_PROXY=$no_proxy,$(minikube ip)
然后,要检查 docker 是否可以访问互联网,请运行:
$ docker pull tutum/hello-world
在集群中(使用 连接到集群minikube ssh
);如果它开始下载,则停止该过程。
我的第二个问题是网络连接速度很慢。由于所需的 Docker 镜像大约有 100MB,因此 Docker 容器和 Kubernetes Pod 都处于\pause
30ContainerCreating
分钟的状态。
要检查 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 上,因为我没有为容器提供足够的内存。