我的 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
和ContainerCreating
狀態 30 分鐘。
若要檢查 docker 是否正在下載映像,請執行:
$ ls -l /var/lib/docker/tmp
在叢集中,顯示正在下載的臨時映像文件,否則為空。
如果您在 minikube 中進行開發並使用 VPN,docker 可以透過以下方式使用您的 VPN提琴手。即docker會連接fiddler的ip:port,fiddler連接VPN。否則,VPN 不會在您的主機和 minikube VM 之間共用。
答案4
我第一次遇到這個問題是因為我的資源聲明意外地非常小。
資源:限制:cpu:1000m 記憶體:1024M 請求:cpu:1000m 記憶體:1024M
與
資源:限制:cpu:1000m 記憶體:1024m 請求:cpu:1000m 記憶體:1024m
利用 m 可以使資源利用產生很大的差異。我被困在 ContainerCreating 上,因為我沒有為我的容器提供足夠的記憶體。