首页 公告 项目 RSS

⬇️⬇️⬇️ 欢迎关注我的 telegram 频道和 twitter ⬇️⬇️⬇️


联系方式: Twitter Github Email Telegram

spegel搭建和使用

June 20, 2025 本文有 728 个字 需要花费 2 分钟阅读

简介

在 Kubernetes 集群中,频繁发布、扩容服务时,节点通常会直接从远程镜像仓库拉取镜像,这不仅加重了镜像仓库的压力,还容易受到如 DockerHub 等公共仓库的速率限制,导致镜像拉取变慢甚至失败。Spegel 正是为了解决这些问题,通过在本地节点缓存镜像,加速镜像分发,提升集群部署效率。

但是Spegel 目前仅支持 Containerd,如你使用的是 Docker,可以忽略后续内容。

原理

Spegel 通过在每个 Kubernetes 节点上部署本地镜像缓存代理,拦截并缓存节点拉取的镜像。当节点需要拉取镜像时,优先从本地 Spegel 缓存获取;如果本地没有,则从远程仓库拉取并缓存到本地。这样,后续节点或同一节点再次拉取同一镜像时,就可以直接从本地缓存获取,大幅提升拉取速度,减少对外部仓库的依赖和带宽消耗。

Spegel 依赖 Containerd 的镜像拉取机制,通过配置 Containerd 的 Registry Mirror,将镜像请求重定向到本地 Spegel 服务,实现透明加速和缓存。

修改containerd配置

Spegel 依赖于 containerd 的本地镜像层缓存,需确保 discard_unpacked_layers 配置为 false。编辑 /etc/containerd/config.toml,找到如下字段并修改:

[plugins."io.containerd.grpc.v1.cri".containerd]
   discard_unpacked_layers = false

如需针对不同 K8s 发行版的详细配置方法,可参考官方文档

https://spegel.dev/docs/getting-started/

下面是我在eks上的脚本

grep "discard_unpacked_layers" /etc/containerd/config.toml && \
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak && \
sudo sed -i 's/^\(\s*\)discard_unpacked_layers\s*=\s*true/\1discard_unpacked_layers = false/' /etc/containerd/config.toml && \
grep "discard_unpacked_layers" /etc/containerd/config.toml && \
sudo systemctl restart containerd

如果上面修改失败,那么下面部署的时候Spegel容器不会启动成功

部署

Spegel 的部署非常简单,推荐使用 Helm 或 Kustomize 进行一键安装。以下以 Kustomization 方式为例,直接贴出 kustomization.yaml 配置:

helmCharts:
  - name: spegel
    repo: oci://ghcr.io/spegel-org/helm-charts
    releaseName: spegel
    namespace: spegel
    valuesFile: values.yaml

values.yaml默认可以不用修改任何东西

https://github.com/spegel-org/spegel/blob/main/charts/spegel/values.yaml

之后使用argocd部署就好了

测试

你可以创建一个pod,然后观察Spegel的日志,当缓存不在节点上时候会提示

"err":"mirror with image component sha256:5fcf7ef29eb9819794924a97aba79c77c8810292cad53a90cbda7be1bd892d33 could not be found"

然后

"OCI event","key":"sha256:5fcf7ef29eb9819794924a97aba79c77c8810292cad53a90cbda7be1bd892d33","type":"CREATE"

当缓存在节点上会提示

"status":200,"method":"GET","latency":"107.376902ms","ip":"x.x.x.x","handler":"blob"

欢迎关注我的博客www.bboy.app

Have Fun