提高镜像拉取速度
在 Docker 中,通过配置 Docker Daemon 的镜像源地址,可以使用 Registry Mirror 来代替 Docker Hub 进行镜像的拉取操作。
问题描述
我们的应用场景如下所述:
1)User 需要将 Kubernetes 使用的镜像拉取并同步到 Harbor (Private) 中;
2)我们的 CI 也会将构建的镜像保存到 Harbor (Private) 中,以供集群使用;
3)然后,Kubernetes 从 Harbor (Private) 拉取其使用的镜像(极少直接从公开仓库中拉取镜像);
问题在于 Cloud ⇒ LAN 的带宽,其为直接的制约因素,带宽制约我们镜像的拉取速度;
解决方案
所以,在 LAN 中,我们部署 Registry Mirror 服务,来提高镜像拉取速度。
我们的使用方式如下:
1)Registry Mirror 没有直接配置在 containerd 中,所以集群拉取镜像并不会通过 Registry Mirror 来缓存;
2)针对业务镜像(指应用程序使用的镜像),Kubernetes 直接访问 Harbor (Private) 进行拉取。原因在于:
3)针对基础镜像(指集群组件使用的镜像),显式使用 Registry Mirror 来拉取;
国外镜像缓存策略
方案一、路径压缩
我们使用个人版来存储镜像:
- 新建命名空间,新建镜像仓库,所有镜像以 Tag 的方式保存到仓库中。
- 针对未查询到的镜像,我们不妨一试,例如 registry.cn-hangzhou.aliyuncs.com/rancher/shell:v0.3.1
限制:
- 部分镜像仓库存在最大 Tag 数量限制;
方案二、路径扁平
registry.k8s.io/external-dns/external-dns:v0.16.1 ⇒ ccr.ccs.tencentyun.com/d3rm-3rd/registry.k8s.io_external-dns_external-dns:v0.16.1
限制:
- 镜像仓库默认私有,需要针对多个仓库分别设置公开;