问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

k3s新特性分布式注册表镜像,加速镜像拉取

创作时间:
作者:
@小白创作中心

k3s新特性分布式注册表镜像,加速镜像拉取

引用
1
来源
1.
https://blog.ysicing.net/k3s-spegel

k3s的分布式注册表镜像功能基于开源项目spegel实现,自2024年1月起作为实验性功能提供。该功能可以显著提升镜像拉取速度和效率,特别是在边缘计算场景中。但是需要注意的是,文章发布于2024年6月,部分内容可能已经过时,建议在使用前进行验证和更新。

什么是 spegel

spegel是一个无状态集群本地OCI注册表镜像,主要功能包括:

  • 本地缓存来自外部注册表的映像,无需显式配置
  • 避免在外部注册表停机期间发生集群故障
  • 通过首先从本地缓存中拉取镜像来提高镜像拉取速度和Pod启动时间
  • 从外部注册表(例如Docker Hub)提取映像时避免速率限制
  • 减少集群网络外部的出口流量
  • 提高边缘节点部署中的镜像拉取效率

总结来说,通过公网只需要拉取一次后,共享给所有节点使用。集群中的每个节点都可以充当本地注册表镜像服务,允许节点在它们之间共享映像,节点已拉取的任何映像都可供集群中的任何其他节点拉取。

硬性要求

  • 只支持containerd
  • 其他更多细节,可以阅读官方文档spegel-org/spegel

k3s 配置

需要将k3s更新到最近版本,且运行时使用内置containerd才行。

server 管理节点

控制平面节点,需要添加--embedded-registry参数来开启

--embedded-registry                        (experimental/components) Enable embedded distributed container registry; requires use of embedded containerd

agent 计算节点

计算节点,需要添加--disable-default-registry-endpoint

配置文件方式

使用配置文件方式:

write-kubeconfig-mode: "0644"
embedded-registry: true
disable-default-registry-endpoint: true
node-external-ip: 1.1.1.1

配置文件方式或者上述参数方式任选一个即可

registries.yaml 配置文件

这个文件需要所有参与共享的节点都需要

mirrors:
  docker.io:
  registry.k8s.io:
  gcr.io:
  quay.io:
  ghcr.io:

私有仓库也是可以支持

mirrors:
  ccr.ccs.tencentyun.com:
    endpoint:
- https://ccr.ccs.tencentyun.com
configs:
  ccr.ccs.tencentyun.com:
    auth:
      username: testuser
      password: password

自2024年3月版本起提供通配符支持:

mirrors:
  "*":

配置完成后验证

kubectl get --raw /api/v1/nodes/<NODENAME>/proxy/metrics | grep -F 'spegel'

--disable-default-registry-endpoint 禁用默认回退

如果没有特殊需求,建议不要禁用回退,除非你指定了回退。

mirrors:
  docker.io:           # 没有回退,会尝试从节点拉取,如果节点都没有拉取失败
  registry.k8s.io:     # 没有回退,会尝试从节点拉取,如果节点都没有拉取失败
  mirror.example.com:  # 有个默认回退,会尝试从节点拉取,如果节点都没有,默认尝试从endpoint节点处拉取
    endpoint:
- https://mirror.example.com

具体还可以阅读官网文档:Default Endpoint Fallback

其他问题

  • 安全性,需要保证环境可信,否则可能出现"一人中毒,全家中毒"的情况
  • 由于分布式注册表是只读模式,不支持push,但是可以通过ctr相关操作将镜像加到k8s.io命名空间
  • 缓存问题,推荐每次都用新tag,而不是反复使用latest或同一个tag更新,因为同名tag存在后,就不会更新了
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号