一、场景描述
大家都知道,在部署K8S时,一些关键组件的镜像地址通常存储在k8s.gcr.io,然而对于国内用户而言,访问这些地址可能会受限。国内用户想要解决这个问题,一般有两种方法,可以通过搭建代理来实现,也可以替换成国内镜像地址。但是,这些方法都有一些挑战。
使用代理可能对许多用户来说比较复杂,需要配置等步骤,不太方便。另一方面,替换成国内镜像地址可能会带来新问题,例如某些版本可能无法找到合适的镜像。
针对这些问题,我想分享一个可能的解决思路,供大家参考。这个思路是将K8S相关镜像预先下载并制作成一个可用的镜像集合,然后将这个集合上
这个方法可以简化国内用户在部署K8S时的镜像获取过程,减少了复杂的配置步骤和可能出现的问题。当然,每种解决方案都有其优缺点,这只是其中的一种思路,希望能够对大家有所帮助。
公共镜像代理服务:https://dockerproxy.com/ 也可以参考下面的文章进行自建镜像代理服务:
二、操作实践
- 假设我们需要拉取的镜像是
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
- 拉好之后可以查看本地镜像:
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时,需要用到的镜像就是k8s.gcr.io仓库的,这里我进行演示
1、下载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、导入到国原文链接:https://dqzboy.com 内服务器
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

必须 注册 为本站用户, 登录 后才可以发表评论!