Minikube 在创建容器时卡住了

Minikube got stuck when creating container

我最近开始在 Mac 本地使用 Minikube 学习 Kubernetes。以前,我能够使用 Minikube 0.10.0 启动本地 Kubernetes 集群,创建部署并查看 Kubernetes 仪表板。

昨天我试图删除集群并从头开始重新做所有事情。但是,我发现我无法部署资产并且无法查看仪表板。据我所见,一切似乎都在容器创建过程中卡住了。

我运行minikube start后,报

Starting local Kubernetes cluster...
Kubectl is now configured to use the cluster.

当我运行kubectl get pods --all-namespaces时,报(注意STATUS栏):

kubectl get pods --all-namespaces
NAMESPACE     NAME                          READY     STATUS              RESTARTS   AGE
kube-system   kube-addon-manager-minikube   0/1       ContainerCreating   0          51s

docker ps 什么都没显示:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

minikube status 告诉我虚拟机和集群是 运行:

minikubeVM: Running
localkube: Running

如果我尝试创建部署和自动缩放器,我被告知它们已成功创建:

kubectl create -f configs
deployment "hello-minikube" created
horizontalpodautoscaler "hello-minikube-autoscaler" created

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY     STATUS              RESTARTS   AGE
default       hello-minikube-661011369-1pgey   0/1       ContainerCreating   0          1m
default       hello-minikube-661011369-91iyw   0/1       ContainerCreating   0          1m
kube-system   kube-addon-manager-minikube      0/1       ContainerCreating   0          21m

暴露服务时说:

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

$ kubectl get service
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-minikube   10.0.0.32    <nodes>       8080/TCP   6s
kubernetes       10.0.0.1     <none>        443/TCP    22m

当我尝试访问该服务时,我被告知:

curl $(minikube service hello-minikube --url)
Waiting, endpoint for service is not ready yet...

docker ps 仍然没有任何显示。在我看来,创建容器时一切都卡住了。我尝试了一些其他方法来解决此问题:

  1. 升级到 minikube 0.11.0
  2. 使用 xhyve 驱动程序而不是 Virtualbox 驱动程序
  3. 删除缓存的所有内容,如 ~/.minikube、~/.kube 和集群,然后重试

None 其中对我有用。

Kubernetes 对我来说还是个新手,我想知道:

  1. 如何解决此类问题?
  2. 导致此问题的原因可能是什么?

感谢任何帮助。谢谢。

我没有尝试 minikube,但我使用了 kubernetes。根据提供的信息,很难说出问题的原因。您的 minikube 在创建资源时没有问题,但 ContainerCreating 是与 docker 守护程序相关的问题或 kube-apidocker 守护程序之间的不正确通信或 kubelet.

您可以尝试以下命令:

kubectl describe po POD_NAME

这将为您提供 POD 的事件。也许这将提供解决问题根本原因的途径。

您也可以查看 kubelet 的日志以获取事件。

horizo​​ntalpodautoscaler (hpa) 需要使用 heapster。你需要在 minikube 中 运行 heapster 才能工作。您始终可以使用 minikube logs 或通过位于 minikube dashboard 的仪表板以交互方式调试此类问题。

您可以在 https://github.com/kubernetes/heapster

找到 运行 heapster 和 grafana 的步骤

原来是我的网络问题。

pod状态为“ContainerCreating”,我在创建容器时发现,docker镜像会从gcr.io拉取,国内无法访问(被GFW屏蔽)。上一次它对我有用,因为我碰巧通过 VPN 连接到它。

对我来说,需要几分钟才能看到 ContainerCreating 问题。执行以下命令后:

systemctl status kube-controller-manager.service

我收到这个错误:

Sync "default/redis-master-2229813293" failed with unable to create pods: No API token found for service account "default", retry after the token is automatically created and added to the service account.

有两种方法可以解决这个问题:

  1. 使用令牌设置服务帐户
  2. 删除 api-server
  3. KUBE_ADMISSION_CONTROLServiceAccount 设置

我在 Windows 上遇到过这个问题,但它与 NTLM proxy 有关。我删除了 minikube VM,然后使用正确的代理设置为我的 CNTLM 安装重新创建它:

minikube start \
--docker-env http_proxy=http://10.0.2.2:3128 \
--docker-env https_proxy=http://10.0.2.2:3128 \
--docker-env no_proxy=localhost,127.0.0.1,::1,192.168.99.100

参见 https://blog.alexellis.io/minikube-behind-proxy/