[TOC]
0x00 前言简述
描述: 在国内(GFW)搭建k8s集群及其依赖组件间时, 常常会遇到无法下载k8s.gcr.io、quay.io的镜像, 那我们如何解决呢?
例如, 在K8S集群中部署nfs-subdir-external-provisioner
资源清单时报如下错误, 这是由于国内无法访问k8s.gcr.io
, 所以无法拉取下载k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
镜像1
Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
那如何畅快的下载:
常用的方式是使用k8s.gcr.io的镜像源, 例如["https://gcr.mirrors.ustc.edu.cn/google-containers/","https://registry.cn-hangzhou.aliyuncs.com/google_containers/"]
, 但是对于某一些镜像它是没有进行同步的此时我们将无法通过其下载,可能你还会采用一台海外的机器进行git pull、git tag、git push
一系列的操作将k8s.gcr.io、quay.io
仓库中的镜像传到国内, 但是对于没有海外机器的朋友来说是不是没有办法了。
答案: 当然是否定的,我们可以采用Github仓库中Dockerfile文件与阿里云提供的容器镜像服务(https://www.aliyun.com/product/acr?spm=5176.21213303.1362911.1.3d9153c9zZkQnr&scm=20140722.S_card)进行海外镜像构建,从而拉取构建后公共或者私有镜像。
0x01 操作实践
步骤 01.登录 github.com 创建一个公共仓库(如果没有请注册), 此处我创建了一个 imagesbuild 仓库,专门用于构建 k8s.gcr.io、quay.io 仓库中无法下载的镜像,此处以 nfs-subdir-external-provisioner 镜像为例,在 /sig-storage/nfs-subdir-external-provisioner
目录下创建一个 Dockerfile 文件,其内容如 tee 命令写入所示。1
2
3
4
5
6
7git clone git@github.com:WeiyiGeek/imagesbuild.git
mkdir -vp imagesbuild/sig-storage/nfs-subdir-external-provisioner
tee imagesbuild/sig-storage/nfs-subdir-external-provisioner/Dockerfile <<'EOF'
FROM k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
LABEL MAINTAINER=master@weiyigeeek.top BUILDTYPE=Aliyun
EOF
git add . && git commit -m "nfs-subdir-external-provisioner" && git push

WeiyiGeek.nfs-subdir-external-provisioner

WeiyiGeek.容器镜像服务
步骤 03.进入后我们需要先创建名称空间[WeiyiGeek]、之后再进行镜像仓库。 WeiyiGeek.创建名称空间
步骤 04.创建镜像仓库,填写的内容如下所示, 名称空间为weiyigeek
, 仓库名称为nfs-subdir-external-provisioner
, 仓库类型此处选择公开(方便拉取,注意如果是私有包含敏感信息的镜像一定要私有), 在摘要中注明该仓库主要用途。

WeiyiGeek.创建镜像仓库
步骤 05.点击下一步后,选择github代码源,然后选择 WeiyiGeek 再选择 imagesbuild 我们创建的仓库,并勾选[v]海外机器构建。

WeiyiGeek.代码源
步骤 06.创建完后将会显示如下界面, 该页面显示创建的镜像仓库的相关信息。
- 仓库名称 :nfs-subdir-external-provisioner
- 仓库地域 :华东1(杭州)
- 仓库类型 :公开
- 代码仓库 :https://github.com/WeiyiGeek/imagesbuild
- 公网地址 :registry.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner
- 专有网络 : registry-vpc.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner
- 经典网络 : registry-internal.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner
- 摘要 : mirror k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

WeiyiGeek.镜像仓库相关信息
步骤 07.然后点击左侧【构建】进行添加构建规则,类型选择【Branch】- main, 然后构建上下文目录收设置为【Dockerfile】存放的目录,此处以imagesbuild仓库名称下的目录为根/sig-storage/nfs-subdir-external-provisioner
, Dockerfile 就在当前路径之下, 其镜像版本为V4.0.2。
步骤 08.点击【确定】后保存,然后点击进行【立即构建】,构建完成后将会如下图所示:

WeiyiGeek.
步骤 09.然后可以从构建日志中发现构建出镜像的下载地址registry.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner:v4.0.2

WeiyiGeek.构建出的镜像地址
步骤 10.最后在k8s节点集群上进行构建的nfs-subdir-external-provisioner
镜像拉取测试,。
1 | $ crictl pull registry.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner:v4.0.2 |
支持, 完美解决国内无法顺畅下载k8s.gcr.io
的镜像问题,希望能帮助到大家,谢谢大家支持。