Banson's Blog
在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中设置imagePullPolicyNever,或不设置;设置为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