完美解决 gcr.io 镜像下载失败的 4 种方法

作者: 王炳明 分类: Kubernetes 发布时间: 2022-03-03 21:25 热度:2,587

组建了个 Kube rnetes 交流群,有兴趣可以加我微信 stromwbm

在学习、研究 K8S 的过程中,相信你会经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的“国情”导致无法正常访问墙外资源。

这些镜像有的是 K8S 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,他们会存放于 gcr.io 或者 quay.io 中。

gcr.io 是 谷歌的镜像仓库,是禁止访问的,而 quay.io 是 RedHat 的镜像仓库,可以访问,但速度较慢。

那我是如何应对这种网络问题呢?

今天来和你分享一下,我使用过的几个小妙招

1. 现成的镜像代理仓库

k8s.gcr.io

这是 gcr.io/google-containers 的仓库,使用阿里云镜像

docker pull k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0
# 换成
docker pull registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.3.0

也可以使用 lank8s.cn,他们的对应关系 k8s.gcr.io –> lank8s.cn,gcr.io –> gcr.lank8s.cn

docker pull k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0
# 换成
docker pull lank8s.cn/sig-storage/csi-node-driver-registrar:v2.3.0

quay.io

这是Red Hat运营的镜像库,虽然没有被墙,但下载还是比较慢,可以使用中科大镜像

docker image pull quay.io/kubevirt/virt-api:v0.45.0
# 换成
docker pull quay.mirrors.ustc.edu.cn/kubevirt/virt-api:v0.45.0

2. 使用自己的代理下载

若你自己有梯子,并且是 http 和 https 协议的(sock5 的不行),可以先在自己的电脑上使用 docker 中配置代理

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:1080",
     "httpsProxy": "http://127.0.0.1:1080",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

有了代理后,就可以访问外面的镜像,下载完成后,使用 docker save 打包成 tar 包,再把 tar 上传到服务器上,最后使用 docker load 导入到服务器的镜像仓库中。

# 导出
docker save <image_name>:<tag>  -o /home/image.tar 

# 导入
docker load < /home/image.tar

3. 使用 github 仓库

在 Github 上有一个仓库(anjia0532/gcr.io_mirror),提供在线镜像代理服务,只要你以固定格式创建issue,就会自动触发脚本去下载镜像,然后你再使用对应的仓库名去下载即可

# origin / 原镜像名称
gcr.io/namespace/{image}:{tag}

# eq / 等同于
anjia0532/namespace.{image}:{tag}

# special / 特别的
k8s.gcr.io/{image}:{tag} <==> gcr.io/google-containers/{image}:{tag} <==> anjia0532/google-containers.{image}:{tag}

不过要注意的是,该仓库目前仅支持 gcr.io和k8s.gcr.io 镜像

4. 使用 docker playground 下载

docker playground 提供一个在线的 docker 运行环境,方便新手上去操作学习。

巧的是,docker playground 服务器也在墙外,因此拉取 gcr 的镜像非常快。

利用这个,可以用来拉取 gcr 的镜像,最后再 push 到我们的私人仓库(比如 docker hub,或者 harbor)

首先登陆 docker playground

没帐号的注册一个,进去后,新增一个实例

完美解决 gcr.io 镜像下载失败的 4 种方法

然后在终端上拉取镜像,打新 tag,然后再推送到私人仓库,速度都是非常快的。

完美解决 gcr.io 镜像下载失败的 4 种方法

完成后,在其他机器上,就可以直接拉取我们私人仓库的镜像

完美解决 gcr.io 镜像下载失败的 4 种方法

文章有帮助,请作者喝杯咖啡?

发表评论