Lework Study hard, improve every day.

使用 Cloudflare Workers 加速镜像下载

2020-06-11
lework
本文 5039 字,阅读全文约需 15 分钟

因为不能直接访问国外的镜像仓库,下载国外的docker镜像速度一直让国内用户 头疼不已,虽然有群友使用定时同步的方式每天同步进行到国内仓库,但这种方式是有一定延迟的。我们通过 cloudflare 的全球 CDN 节点,以 Workers 中转代理的方式来访问国外镜像仓库,从而加速镜像的下载。

镜像下载的网络路径

+-----------+      +-------------+     +--------------+
|           +----->+  Cloudflare +---->+              |
|  Client   |      |   Workers   |     | [Docker Hub] |
|           +<-----+    [CDN]    +<----+              |
+-----------+      +-------------+     +--------------+                           

Cloudflare Workers

Cloudflare Workers 部署一个 Worker 时,它会在30秒之内部署到 Cloudflare 的整个边缘网络,全世界95个国家/200个城市节点。域中的每个请求都会由离用户更近地点的 Worker 来处理,基于此来实现代码的 “随处运行”。

借助 Cloudflare Workers,开发人员能够在 Cloudflare 的全球云网络上部署无服务器的 JavaScript 应用程序,应用程序能够在这个网络中无缝扩展,更加接近最终用户。 Workers 基于 Service Workers API 构建,可为向应用程序发出的每次 HTTP(S) 请求接收事件。 然后,Workers 运行应用程序逻辑,并可向 Cloudflare Cache、Cloudflare Workers KV 或应用程序原始服务器发出后续请求,以将数据返回给用户。 Workers 在 Cloudflare 全球云网络中的位置为无服务器创建了以下用例:

计费相关

overview 页面可参看使用情况。

  • 免费版每天有 10 万次免费请求,并且有每分钟1000次请求的限制,每个请求最多占用 10 毫秒 CPU 时间。超过限制后,会返回错误。

  • 每月 $5 的高级版本,每月可用 1000 万次请求(超出部分 $0.5/百万次请求),每个请求最多占用 50 毫秒 CPU 时间。

网络相关

如果说你访问workers.dev的域名也是非常慢,或者访问不到的时候,可以试试 hosts 绑定, 大几率你能访问到。

104.18.38.1 gcr.lework.workers.dev
104.18.38.1 docker.lework.workers.dev
104.18.38.1 quay.lework.workers.dev

# or

104.18.39.1 gcr.lework.workers.dev
104.18.39.1 docker.lework.workers.dev
104.18.39.1 quay.lework.workers.dev

更多内容请见 官方文档

下载 docker hub 的镜像

源地址: centos:latest or registry-1.docker.io/library/centos:latest

代理地址: docker.lework.workers.dev/library/centos:latest

# time docker pull docker.lework.workers.dev/library/centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for docker.lework.workers.dev/library/centos:latest

real    2m6.270s
user    0m0.061s
sys     0m0.043s

接着,将镜像标签还原成我们需要的

# docker tag docker.lework.workers.dev/library/centos:latest centos:latest

镜像信息

# docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
centos                                                             latest              470671670cac        4 months ago        237MB
docker.lework.workers.dev/library/centos                           latest              470671670cac        4 months ago        237MB

你也可以将 docker 的 registry-mirrors 设置为代理地址

# /etc/docker/daemon.json 
{
    "debug": true,
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "3"
    },
    "live-restore": true,
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ],
    "registry-mirrors": [
        "https://docker.lework.workers.dev/"
    ]
}

下载 grc 的镜像

源地址: gcr.io/google-containers/kube-controller-manager:v1.16.10

代理地址: gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10

# time docker pull gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10
v1.16.10: Pulling from google-containers/kube-controller-manager
83b4483280e5: Pull complete 
7cc17f1decf7: Pull complete 
Digest: sha256:2f162989247c7b6f3df63f98e139fec04058cd414063312564ced2e0500a3086
Status: Downloaded newer image for gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10

real    0m50.104s
user    0m0.088s
sys     0m0.044s

只耗费了50秒就下载完成了。

接着,将镜像标签还原成我们需要的

# docker tag gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10 gcr.io/google-containers/kube-controller-manager:v1.16.10

# docker tag gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10 k8s.gcr.io/kube-controller-manager:v1.16.10

这样,我们需要的k8s镜像就有了

# docker images  
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
gcr.io/google-containers/kube-controller-manager                   v1.16.10            95b2e4f548f1        3 weeks ago         162MB
gcr.lework.workers.dev/google-containers/kube-controller-manager   v1.16.10            95b2e4f548f1        3 weeks ago         162MB
k8s.gcr.io/kube-controller-manager                                 v1.16.10            95b2e4f548f1        3 weeks ago         162MB

手动下载比较麻烦?那试试脚本全自动吧

# 下载一个镜像
curl -sSL https://git.io/getgcr | bash -s gcr.io/google_containers/pause-amd64:3.1

# 下载多个镜像
curl -sSL https://git.io/getgcr | bash -s "k8s.gcr.io/kube-{apiserver,controller-manager,proxy,scheduler}:v1.16.10"

# 指定一个版本,下载k8s所有组件
# curl -sSL https://git.io/getgcr | bash -s - -t v1.16.10

下载 quay 的镜像

源地址:quay.io/calico/node:release-v3.14

代理地址: quay.lework.workers.dev/calico/node:release-v3.14

# time docker pull quay.lework.workers.dev/calico/node:release-v3.14 
release-v3.14: Pulling from calico/node
0a63a759fe25: Pull complete 
9d6c79b335fa: Pull complete 
793c7788adf2: Pull complete 
d6fd5aa1aa3b: Pull complete 
dd060b14165e: Pull complete 
b3a5c919884d: Pull complete 
98452efe85ce: Pull complete 
5cac849b45bb: Pull complete 
465b613925ba: Pull complete 
873a0e328036: Pull complete 
a8f25e74e20c: Pull complete 
ba4864f0dfd8: Pull complete 
463ffadd3f28: Pull complete 
Digest: sha256:e53bf963ef147b9ee9a955b8d14526fa6daf4abea4de3fa6f8b9fa9240a98b55
Status: Downloaded newer image for quay.lework.workers.dev/calico/node:release-v3.14

real    1m33.761s
user    0m0.113s
sys     0m0.096s

接着,将镜像标签还原成我们需要的

# docker tag quay.lework.workers.dev/calico/node:release-v3.14 quay.io/calico/node:release-v3.14

镜像信息

# docker tag quay.lework.workers.dev/calico/node:release-v3.14 quay.io/calico/node:release-v3.14                
[root@node130 ~]# docker images 
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
quay.io/calico/node                                                release-v3.14       2b480bbbe734        18 hours ago        263MB
quay.lework.workers.dev/calico/node                                release-v3.14       2b480bbbe734        18 hours ago        263MB

创建 workers

我已将上述的代理脚本放置在github中,大家可以在 workers 上创建自己的代理。

网址:https://workers.cloudflare.com

脚本:https://github.com/lework/cloudflare-workers

  1. 注册账号
  2. 登陆
  3. Start building
  4. 取一个子域名
  5. Create a Worker
  6. 复制 js 脚本内容 到左侧代码框,Save and deploy。
原文地址 https://lework.github.io/2020/06/11/workers/

Similar Posts

下一篇 SRE 实践

Comments