gcr.io镜像:解决kubernetes镜像无法访问的问题

kubernetes镜像(gcr.io)无法访问的问题

经常会遇到gcr.io/google_containers被墙的问题,可以使用:https://hub.docker.com/u/googlecontainer

使用方法

gcr.io/google_containers/$repo替换为googlecontainer/$repo,例如需要使用gcr.io/google_containers/kubernetes-dashboard-amd64镜像,则使用googlecontainer/kubernetes-dashboard-amd64即可。

docker pull googlecontainer/kubernetes-dashboard-amd64 # for docker
kubeadm init –image-repository googlecontainer # for kubernetes

原理

travis-ci安装gcloud并授权,然后利用travis-ci的网络来拉取google_containers镜像,并将镜像push到docker仓库。每天定时出发travis来拉取google_containers的更新。

  1. 使用gcloud命令列列举gcr.io/google_containers下的所有镜像repo
  2. 遍历第1步的repo,获取该repo的所有tag,然后对比gcr-complete-tasks,如果该tag已经被同步,则跳过
  3. 拉取gcr.io/google_containers/$repo:$tag的镜像:image。如果$image已经在gcr-complete-images内存在,则跳过。
  4. 修改$image的repo和tag,打docker tag为googlecontainer/$repo:$tag,并push到googlecontainer$repo:$tag
  5. 重复2-4步,直到所有$repo都已经同步

优点

  • 不需要自己vps
  • 不需要搭梯子
  • 理论镜像的延迟时间是24H,比较实时
  • 全自动检测新镜像,不需要人为参与

缺点

  • 比较依赖git来存储进度,造成git的commit log非常大(已经解决,通过使用travis-ci的cache解决)
  • 有被travis封禁的风险(每次限制存储量和任务量)
  • 新增owner(目前owner=google_containers)时无法检测(已经解决,使用owners文件来新增owner。如需增加,请留言或者提交Pull request。)

代码

https://github.com/blademainer/google_containers_mirror