利用阿里云获取gcr.io上的k8s镜像

一、背景说明

工作需要搭建kubernetes集群,需要用到官方镜像,但是官方镜像都在谷歌仓库,受限于GFW,无法直接pull镜像,这里可以利用Github与阿里云的容器镜像服务来免费获取gcr.io上的镜像
要实现这一目的,你需要具备以下几个条件

  • github账号
  • 阿里云账号

二、获取官方的kubernetes镜像

以获取kubernetes 1.14.1为例

2.1.创建镜像仓库

登录容器镜像服务页
https://cr.console.aliyun.com/cn-shanghai/instances/repositories
03k8s3
创建镜像仓库
03k8s4
03k8s5
接下来我们就会发现在镜像列表中多了一行,点击改行右侧的管理
03k8s6
添加规则之前需要进行github上对应仓库的设置

2.2.编写Dockerfile

需要在github上的仓库docker-library上的对应目录上创建Dockerfile
在仓库docker-library的目录/kube-controller-manager-amd64下创建目录v1.14.1
在该目录下创建Dockerfile
cat Dockerfile

FROM gcr.io/google_containers/kube-controller-manager:v1.14.1

然后点击立即构建
03k8s8
几分钟后就构建成功了,这样就成功的利用github和阿里云构建了需要某个版本的原生kubernetes镜像,用此方法构建其他kubernetes镜像

2.3.镜像使用

拉取新构建的镜像
docker login --username=阿里云账号 registry.cn-shanghai.aliyuncs.com
输入仓库密码,注意这里不是输入阿里云账号密码
docker pull registry.cn-shanghai.aliyuncs.com/linuxwt/kube-controller-manager:v1.14.1

然后将其打上tag
docker tag registry.cn-shanghai.aliyuncs.com/linuxwt/kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1
不过flannel这个组件的原生镜像tag应该像下面这样打
docker tag registry.cn-shanghai.aliyuncs.com/linuxwt/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64

当然也可以推送镜像到阿里云镜像仓库,前提是要先建立一个镜像仓库(这里建立的是绑定了github仓库docker-library的,方便后期我们通过构建规则来获取不同版本的k8s原生镜像)
拿kubernetes其中一个组件kube-scheduler为例,首先在阿里云镜像服务上建立一个名为kube-schedule的仓库,然后将服务器上已有的镜像打一个tag
docker tag k8s.gcr.io/kube-scheduler:v1.14.1 registry.cn-shanghai.aliyuncs.com/linuxwt/kube-scheduler:v1.14.1

接着推送
docker push registry.cn-shanghai.aliyuncs.com/linuxwt/kube-scheduler:v1.14.1

最后的说明

其实一般来讲我们很难直接获取k8s的官方原生镜像,但是我们可以通过以上这种方式间接获取,同时我们也可以基于已有的镜像推送到阿里云镜像仓库上