minikube是单机版的k8s,方便学习和开发k8s
在 minikube 的官方案例中,使用了 k8s.gcr.io 镜像。gcr 是 Google Cloud 的镜像仓库,所以国内是无法访问的。 阿里云的镜像代理地址为:registry.aliyuncs.com/google_containers,需要将 gcr 的镜像地址替换为阿里云的地址,例如:k8s.gcr.io/echoserver:1.4 → registry.aliyuncs.com/google_containers/echoserver:1.4。
minikube 有非常多的插件,通过 minikube addons list 可以查看插件列表,通过 minikube addons enable xxx 可以启用 xxx 插件。官方案例启动的是 metrics server,但该插件也是 k8s.gcr.io 的镜像,所以无法正常运行,需要替换镜像地址。
这里先介绍一下如何定位到镜像拉取失败。因为 addons 并没有部署到默认空间,在 k8s 里面,可以通过kubectl get namespace
获取所有的命名空间。metrics server 在 kube-system 这个空间中,通过kubectl get pods -n kube-system
可以看到 metrics server 拉取镜像失败了。
需要将 metrics server 的镜像替换为阿里云的镜像,通过kubectl edit deploy metrics-server -n kube-system
,可以修改它的镜像地址。国内的地址为 registry.aliyuncs.com/google_containers/metrics-server:v0.4.2,修改之后进行保存,再次使用kubectl get pods -n kube-system
查看 metrics server 容器的状态,发现在启动中。
为了验证 metrics server 是否启动完成,可以执行kubectl top nodes
,可以查看 k8s 集群资源的使用情况。
ingress 插件和 metrics server 类似,也是镜像无法拉取。有点不同的是 ingress 的命名空间是 ingress-nginx,如果要获取所有命名空间的 pods,可以使用 kubectl get pods --all-namespaces
。很遗憾,在阿里云的镜像仓库,没有找到 ingress 的镜像,只能使用代理了。
笔者本机启动了一个 http 代理,本地可以通过 localhost:4567 访问。但 minikube 是在容器里面拉取镜像,容器本身的 localhost 并不是宿主机的 localhost。根据官方文档,minikube 在 v1.10 之后加入了host.minikube.internal
用来访问宿主机的 localhost,最终使用以下命令启动 minikube,成功拉取到 ingress 的镜像。
minikube start --docker-env HTTP_PROXY=http://host.minikube.internal:10180 \
--docker-env HTTPS_PROXY=http://host.minikube.internal:10180
搭建代理可以参考海外建站全攻略