🐒0. 本文适用
- 一切由于网络需要代理原因,导致的镜像pull 时间超时问题。
- 基与mac os,其他系统可以参考。
💣1. 错误描述
在弄之前,你当然需要适用proxy来弄你的终端:
export http_proxy=http://192.168.1.48:8118;
export https_proxy=http://192.168.1.48:8118;
在各种一顿操作之后,发现无法看到想要的结果,看下log如下:
kubectl log hello-node-7f8df9f98d-rrmb2 # log后面是你的pod名
却出现如下错误:
Error from server (BadRequest): container "hello-node" in pod "hello-node-7f8df9f98d-rrmb2" is waiting to start: trying and failing to pull image
他的意思是我孩子尝试pull镜像。
找了好久,没找到关键所在,因为执行:
docker images
是可以看到这个镜像的。但是却不在本地pull,他出去下载又失败了,我随风而立。。。。
🍉2.问题的解决
一顿思考加🔍后,我发现:
minikube的逻辑是创建一个vm,在这个vm里去运行k8s需要的各种docker image
所以你需要解决的是在vm中的docker在pull镜像的时候的代理问题。
starkoverflow上很多人回答的十分不清楚,完全没有找到问题的根源。
其实这个问题有官方解答:
- 第一步:
Minikube creates a Virtual Machine that includes Kubernetes and a Docker daemon. When Kubernetes attempts to schedule containers using Docker, the Docker daemon may require external network access to pull containers.
If you are behind an HTTP proxy, you may need to supply Docker with the proxy settings. To do this, pass the required environment variables as flags during minikube start.
For example:
$ minikube start --docker-env HTTP_PROXY=http://$YOURPROXY:PORT \
--docker-env HTTPS_PROXY=https://$YOURPROXY:PORT
ps:如果你已经执行了代理设置
也就是这一步:
export http_proxy=http://192.168.1.48:8118; # ⚠️这个http://192.168.1.48:8118是我的代理配置,你需要弄一个自己的,详情自己🔍
export https_proxy=http://192.168.1.48:8118;
那么直接执行
minikube start --docker-env HTTP_PROXY=${http_proxy} --docker-env HTTPS_PROXY=${https_proxy}
- 第二步
If your Virtual Machine address is 192.168.99.100, then chances are your proxy settings will prevent kubectl from directly reaching it. To by-pass proxy configuration for this IP address, you should modify your no_proxy settings. You can do so with:
$ export no_proxy=$no_proxy,$(minikube ip)
执行以上两条命令,我这里就解决了。
✈️3.后记
- ☝️一定要看官方文档,英文可以慢慢啃
- 一定要用google,可以看中文的各个小伙伴的博客分析,不要太迷信starkoverflow,上面也有沙子的雕塑。
4.参考
Using Minikube With an HTTP Proxy
mac上安装minikube及排错记
随风飘散k8s minikube setup