containerd配置常用镜像代理加速

起因

最近把测试的k8s集群迁移到containerd中,正好整理下相关配置,考虑到k8s中大量项目使用k8s.gcr.io或者quay.io的镜像,在国内无法正常拉取,希望做一个完美无缝的方式实现镜像拉取自由

考虑

虽然我的电脑使用全局透明代理,网络环境几乎完美,不存在任何障碍,但是在测试服务器上我不喜欢设置透明代理这样的网络方案,在这次迁移containerd的过程中发现containerd支持设置多个registry的镜像地址打算尝试下镜像的方案

实施

搭建镜像代理

搭建代理的方案有很多,例如使用vps做反向代理,或者使用国内部分镜像,我选择使用cloudflare提供的worker,其原理是使用js自定义代理逻辑实现网站代理,关键最良心的提供一定量的免费额度

折腾cloudflare worker的过程并不顺利,好在最近完美解决,具体过程改天另写,详细记录下各家镜像仓库在docker协议上实现的不同导致的兼容性小坑,最终都要我用js来修改协议实现兼容,最终实现的效果如下:

github加速代理

代理地址:https://github.920111.xyz

使用方法,简单在所有需要clone或者download的地址前面加上上述代理地址,
例如git clone https://github.com/aaa/bbb
可以写成 git clone https://github.920111.xyz/https://github.com/aaa/bbb解决临时下载的问题,

虽然使用cloudflare下载速度不算快,不能我的vps相比,但是也能有几百K/s,一般下载足够使用了。

k8s镜像加速代理

代理地址: https://k8s.920111.xyz

使用方法,拉取镜像的时候替换k8s.gcr.iok8s.920111.xyz

gcr镜像加速代理

代理地址: https://gcr.920111.xyz

使用方法,拉取镜像的时候替换gcr.iogcr.920111.xyz

quay镜像加速代理

代理地址:https://quay.920111.xyz

使用方法,拉取镜像的时候替换quay.ioquay.920111.xyz

docker镜像加速代理

代理地址:https://docker.920111.xyz

使用方法,拉取镜像的时候替换docker.iodocker.920111.xyz

containerd配置镜像加速

由于containerd支持配置任意域名的镜像,相比之前docker只能配置docker.io的镜像,大大增加镜像配置的灵活性,通读了相关文档,并且调试了一下午终于搞定,其中最大的一个坑就是配置文件中如果没有version这个字段的话,配置文件无法生效,之所以调试了一下午也是因为怎么配置实际使用效果都不符合预期,晕。

最终配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat /etc/containerd/config.toml
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.920111.xyz"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
endpoint = ["https://k8s.920111.xyz"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
endpoint = ["https://gcr.920111.xyz"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
endpoint = ["https://quay.920111.xyz"]

效果

配置完成后,k8s环境中直接拉取原本无法拉取的镜像,再也不用去改镜像地址,在k8s端使用是无感的,管理起来方便多了,关键这个方案还是白嫖CF的CDN,这样的良心公司什么时候国内才能有啊。

这个域名?

920111.xyz这个域名是我随手注册的,用来放些没用的东西,这个域名之前100块购买了10年,反正也没用,这次正好用上了