Kubernetes stuck on ContainerCreating
Solution 1:
kubectl describe pods
will list some (probably most) of the events associated with the pod, including pulling of images, starting of containers.
Solution 2:
More info could be provided in the events.
kubectl get events --all-namespaces --sort-by='.metadata.creationTimestamp'
However do note that sorting events might not work correctly due to this bug: https://github.com/kubernetes/kubernetes/issues/29838
In my case I had an event relating to a 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]
Solution 3:
In my case, docker's access to internet was blocked. It was solved using a proxy (using sandylss's comment):
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)
Then, to check if docker has access to internet, run:
$ docker pull tutum/hello-world
in the cluster (connect to the cluster using minikube ssh
); stop the process if it starts downloading.
My second problem was slow internet connection. Since the required docker images are on the order of 100MB, both docker containers and Kubernetes pods remained in \pause
and ContainerCreating
states for 30 minutes.
To check if docker is downloading the images, run:
$ ls -l /var/lib/docker/tmp
in the cluster, which shows the temporary image file[s] that are being downloaded, empty otherwise.
If you are developing in minikube and using VPN, docker can use your VPN via fiddler. That is, docker will be connected to fiddler's ip:port, and fiddler is connected to the VPN. Otherwise, VPN is not shared between your host and minikube VM.