一、场景描述
大家都知道在部署K8S时,有一些组件的镜像地址是存储在k8s.gcr.io上的,而对于国内用户来说,是无法访问到的,国内想要拉取的方法网上也可以搜索到很多,要不就是自己搞个代理,然后通过代理的方式去下载,要不就是替换成国内的镜像地址,但是对于很多用户其实搞代理也比较困难,替换成
二、操作实践
- 假设我们需要拉取的镜像是
gcr.io/kubernetes-helm/tiller:v2.16.10
- 首先搜索一下哪些源提供了你需要拉的镜像:
docker search tiller

- 从结果可以看出
sapcc/tiller
是缓存gcr.io/kubernetes-helm
的镜像,我们去docker.hub
上面去搜索一下sapcc/tiller
,验证一下源信息:

- 发现版本信息也吻合,那直接将地址换成该第三方的即可:
docker pull sapcc/tiller:v2.16.10
- 拉好之后可以查看本
原文链接:https://www.dqzboy.com 地镜像:
docker images
- 再通过以下命令 把来下来的镜像修改成
k8s.gcr.io
域名下的:
docker tag sapcc/tiller:v2.16.10 gcr.io/kubernetes-helm/tiller:v2.16.10
三、其他方式
另外的一种方式,是最靠谱的,就是自己买台国外的服务器,然后通过国外的服务器把镜像下载下来,进行打包后导入到国内的服务器上,然后将导入的镜像重新命名和打TAG;还有一种方式也是需要有国外的服务器,然后通过Docker开源的registry实现代理缓存k8s.gcr.io
仓库,这种方式比较麻烦。
例如我部署ingress-nginx时,需要用到的镜像就是
文章来源(Source):https://www.dqzboy.com k8s.gcr.io仓库的,这里我进行演示
1、下文章来源(Source):浅时光博客 载ingress镜像
- 查看
ingress-nginx
所需要下载的镜像
[root@k8s-master1 ingress-nginx]# grep image deploy.yaml

- 登入到国外的服务器上下载对应的镜像
docker pull k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
docker pull k8s.gcr.io/ingress-nginx/controller:v1.0.0
2、打包镜像为tar包
- 查看下载的镜像ID
docker images | grep ingress-nginx

- 打包镜像
docker save ef43679c2cae -o /root/ingress-nginx-controller_v1.tar
docker save 17e55ec30f20 -o /root/ingress-nginx-kube-webhook-certgen_v1.tar
3、导入到国内服务器
docker load -i ingress-nginx-controller_v1.tar
docker load -i ingress-nginx-kube-webhook-certgen_v1.tar
4、镜像重命名打TAG
说明:导入的镜像名称和TAG显示为
<none>
,但是镜像的ID跟打包之前的ID是一样的,我们根据镜像ID可以确定镜像的名称和TAG叫啥,然后给导入进来的镜像重新命名和打TAG
docker tag ef43679c2cae k8s.gcr.io/ingress-nginx/controller:v1.0.0
docker tag 17e55ec30f20 k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
必须 注册 为本站用户, 登录 后才可以发表评论!