在Minikube中加载任意镜像
背景
- registry.k8s.io等镜像,由于网络原因无法访问。在host配置代理,minikube集群仍然无法访问(因为在docker里)。
- 有时候自己写了dockerfile, 或者修改了开源项目重新打包了custom image, 并且希望把这个本地的image部署在minikube cluster中。
出于这些原因,我们希望:如果能支持把任何镜像塞进Minikube环境里就好了!
解决方案
分别针对上述两种情况给出方案。
网络原因拉不下来
在host上配好代理(systemd等支持docker配置代理,很简单),然后docker pull
拉到想要的镜像,再用minikube image load --daemon=true
加载进minikube。
# 原希望使用registry.k8s.io/autoscaling/vpa-recommender:0.13.0
# 先pull下来,再load
# --deamon=true,用来告诉minikube从本地docker daemon找这个镜像
docker pull registry.k8s.io/autoscaling/vpa-recommender:0.13.0
minikube image load registry.k8s.io/autoscaling/vpa-recommender:0.13.0 --daemon=true
记得在deployment.yaml
中设置imagePullPolicy
为Never
,或不设置;设置为Always
会导致仍然从网络pull.
containers:
- name: recommender
image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0
imagePullPolicy: Never
自编译image
如果是自己编译的,只有本地存在的镜像,可以参考这篇博客:
# 在合适的目录下
docker build -t demo/image-name <DIR>
# 加载进minikube
minikube image load demo/image-name
demo/image-name
是你给这个镜像起的名字,前后一致即可。这次不需要--daemon
参数。仍然要注意正确设置imagePullPolicy
。
甚至可以把build和load的过程二合一:
minikube image build -t demo/image-name <DIR>
这篇博客提供了一个现成的demo,可以体验一下全流程。
Last modified on 2023-03-27