通过kubeadm部署k8s集群,在执行kubeadm init命令时,默认生成的manifests文件夹下yaml文件的镜像都是gcr.io上的,在国内由于被墙而不能正常下载,也就导致了集群不能正常安装。那么问题来了,要怎样才能下载这些镜像呢?但是这个要带来一定的费用,所以我们要寻找免费下载gcr.io镜像的途径,阿里云就提供了这一服务。本文通过github设置代码源下载所需的gcr.io镜像。

Step 1

首先在github创建一个repository,创建好后然后git clone到本地,并在本地创建所需下载的镜像dockerfile,这里本地的目录层级为 镜像名称->版本号->dockerfile。创建之后再把所有的文件push到github仓库。最后的结果如下:

容器云平台镜像仓库 容器镜像下载_docker


选取其中一个组件的dockerfile,查看其中的内容

From k8s.gcr.io/kube-scheduler-amd64:v1.9.3
MAINTAINER polarwu <547636195@qq.com>

里面的内容非常少,就两行,其中第一行是基于某个镜像制作的新镜像,第二行为作者信息。通过这个dockerfile我们就可以看出端倪来了,其实我们什么都没做。

Step 2

登录阿里云的容器镜像服务网址https://www.aliyun.com/product/acr,进入管理控制台,在容器镜像服务->镜像列表->创建镜像仓库,按照要求填写相关信息,示例如下

容器云平台镜像仓库 容器镜像下载_docker_02


容器云平台镜像仓库 容器镜像下载_github_03


这里的设置代码源选择step 1中的github的镜像仓库,在构建设置处选择海外机器构建,选择分支,以及dockerfile目录,这里没有统一的格式,本人只是为了方便以按照 镜像名称->版本号->dockerfile的目录层级做分类。

对于需要下载多个不同镜像需重复操作这一过程,最后的仓库列表如下

容器云平台镜像仓库 容器镜像下载_gcr.io_04


创建完仓库之后,我们就可以进行构建了,在 容器镜像服务->镜像列表->(选择需要创建的镜像)->管理->构建->立即构建 就可以开始构建了,构建截图

容器云平台镜像仓库 容器镜像下载_gcr.io_05


可以通过构建日志查看构建过程中出现的错误。

下载镜像可以通过基本信息页面的公网网址和版本号下载,下载形式为docker pull 公网网址:版本号 。

总结

以上为通过阿里云容器镜像服务下载被墙的镜像,原理也挺简单的,这里把阿里云的服务器当作是一个代理服务器,重新制作新镜像达到下载gcr.io镜像,虽然麻烦了点,但是使用阿里云能够免费下载被墙的镜像,这点还是可取的,这点还是得感谢阿里云提供这样的服务。