k8s

Dragonfly总结

背景

无论是使用共有的镜像仓库,或者自建的,拉取镜像都是非常重要的一环。一般企业都是使用自建的私有仓库,且不联网,保证安全性。

虽然镜像仓库保证了高可用,但是如果:

  • 集群节点数很多,某个应用大规模的迁移或者紧急扩容,然后这个镜像文件又很大,容器的镜像拉取策略imagePullPolicy又是always,这批节点都去拉取镜像。
  • 批处理作业需要启动很多pod,这些pod都来拉取镜像。

这两种情况对镜像仓库的压力都是很大的,很可能会导致镜像仓库崩掉。镜像拉取失败了,k8s还有重试策略,恢复起来也很困难。

所以能不能采用镜像缓存的方式来减少镜像仓库的压力,就可以使用Dragonfly。

介绍

项目地址:https://github.com/dragonflyoss/Dragonfly2
官方文档:https://d7y.io/zh/docs/
Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高文件传输的效率和速率,最大限度地利用网络带宽,尤其是在分发大量数据时,例如应用分发、缓存分发、日志分发和镜像分发。

特点

  • 基于 P2P 的文件分发
  • 高性能
  • 非侵入式支持所有类型的容器技术
  • 自动隔离异常
  • 机器级别的限速
  • 对文件源无压力
  • 被动式 CDN
  • 支持标准 HTTP 头文件
  • 高度一致性
  • 有效的 Registry 鉴权并发控制
  • 磁盘保护和高效IO
  • 简单易用

镜像下载流程

  • dfget proxy:也称为 dfdaemon,会拦截来自 docker pull 或 docker push 的 HTTP 请求,然后使用 dfget 来处理请求。
  • Registry:镜像仓库。
  • cluster manager:协调组件,整个系统的控制中心。

file

  1. docker pull 被 dfget proxy 拦截,然后,由 dfget proxy 向 Cluster-Manager 发送调度请求。
  2. Cluster-Manager 在收到请求后会检查对应的下载文件是否已经被缓存到本地,如果没有被缓存,则会从 Registry 中下载对应的文件。
  3. 如果已经缓存了,那么直接生成分块任务,dfget proxy解析任务,并从其他peer下载block数据。
  4. 当某个 Layer 的所有分块下载完成后,一个 Layer 也就下载完毕了,同样,当所有的 Layer 下载完成后,整个镜像也就下载完成了。

安装

helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/
helm install --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly

file

我这里安装失败了,包下载不了。根据报错中的下载链接,浏览器下载再上传到服务器上。

 # 修改value.yaml
 containerRuntime:
  containerd:
    enable: true
# 安装
k create ns dragonfly-system
helm install dragonfly dragonfly/ -n dragonfly-system

file

# 查看pod
k get po -n dragonfly-system
# 我这里node1的dfdaemon报错了,未解决。。。
k logs -f dragonfly-dfdaemon-8fwfv -n dragonfly-system
Error: can not find available addresses

file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x