如何使用 Harbor 和 Dragonfly 优化 Kubernetes 集群镜像拉取速度

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

e46f7a9ea4662a4c1fbec8d10bd17a43.png

本篇文章则分享在大规模的 Kubernetes 集群中,通过 Harbor 与 Dragonfly 来优化镜像的拉取速度。


Dragonfly(蜻蜓)简介


项目地址:https://github.com/dragonflyoss/Dragonfly2

官方文档:  https://d7y.io/zh/docs/

          Dragonfly(蜻蜓)是一款开源的基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。是由CNCF(云原生计算基金会)作为孵化级项目(阿里)。 


1.1 Dragonfly的功能

  • 基于 P2P 的文件分发:通过利用 P2P 技术进行文件传输,它能最大限度地利用每个对等节点(Peer)的带宽资源,以提高下载效率,并节省大量跨机房带宽,尤其是昂贵的跨境带宽。

  • 非侵入式接入:Dragonfly 可无缝支持多种容器用于分发镜像。

  • 主机级别的限速:除了像许多其他下载工具针对当前下载任务的限速之外,Dragonfly 还支持针对整个机器的限速。

  • 高度一致性:Dragonfly 可确保所有下载的文件是一致的,即使用户不进行最终一致性校验。

  • 隔离异常节点:Dragonfly 会自动隔离异常节点来提高下载稳定性。

  • 生态:Harbor 可以基于 Dragonfly 进行镜像分发以及预热。镜像加速项目 Nydus 可以在容器运行时使用 Dragonfly 进行数据分发。


1.2 特性

目前,蜻蜓专注于:

  • 简单:定义明确的面向用户的API(HTTP),对所有容器引擎都是非侵入性的;

  • 高效:种子对等支持,基于P2P的文件分发,节省企业带宽;

  • 智能:主机级限速,主机检测智能流量控制;

  • 安全:阻止传输加密,HTTPS连接支持。

1.3 架构浅析

006431f8061d96c00717db012fdc7e91.png
Dragonfly架构图
Manager组件
  • 用户管理:提供RBAC及用户态管理功能;

  • 维护P2P 集群关系:Manager管理整个P2P集群关系,保证Seed Peer集群和Scheduler集群为1:N的关系,并且选择最优Scheduler提供Dfdaemon使用;

  • 异步任务管理:提供统一异步任务管理,支持预热等功能;

  • 监控集群:监控整个P2P集群的运行状态,剔除异常节点;

  • 可视化UI:提供可视化管理界面,方便管理;

scheduler组件
  • 调度:基于Peer之间的网络、带宽流量等进行调度,组建有向无循环图为当前调度Peer寻找最优父节点;

  • 回源:通过当前Peer下载情况,若异常或无父节点则主动通知Peer回源;

  • 任务状态:维护Peer中下载的任务状态,主动推进其状态变更;

  • 下载任务优化:针对不同的下载任务进行优化处理,分为Tiny、Small、Normal类型;

  • 预热:实现镜像和对象存储的预热,文件同步任务分发。

Seed Peer组件

  Dfdaemon 打开种子对等模式可用作 P2P集群中的回源下载对等点, 这是整个集群中用于下载的根对等方。P2P客户端提供上传和下载功能。当集群内任务首次下载,Scheduler会触发Seed Peer回源。提供主动触发回源能力,可以作为P2P节点中的根节点。

Peer组件

  使用 dfdaemon 部署,基于 C/S 架构,提供命令下载工具, 以及提供任务下载功能的正在运行的守护程序。P2P客户端,提供上传和下载功能

Dfget

  客户端命令行下载工具,和Daemon之间为C/S模式。


docker部署Dragonfly

  Dragonfly支持docker-compose、Helm、源码三种安装方式

  因为Harbor是使用docker-compose部署的,所以本处也使用docker-compose部署Dragonfly。

2.1 拉取源码

$ yum install -y git
$ git clone https://github.com/dragonflyoss/Dragonfly2.git -b v2.0.9   #拉取v2.0.9版本的代码
$ cd ./Dragonfly2/deploy/docker-compose/

2.2 修改参数

  同harbor安装在同一主机上时需要调整redis服务的名称,否则会和Harbor的redis冲突。修改docker-compose.yaml文件的services.redis.container_name参数值。

$ cat docker-compose.yaml
services:
  redis:
    image: redis:6-alpine
    container_name: redis_dragonfly  #需要修改(harbor的为redis)
    command: >
      --requirepass dragonfly
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "dragonfly", "ping"]
      interval: 1s
      timeout: 2s
      retries: 30
    ports:
      - 6379:6379

2.3 执行安装脚本进行安装

$ export IP=192.168.2.19  && echo $IP  #声明环境变量指定当前主机IP
$ ./run.sh
9e8bf7a862232358105f0b4deaf24e1d.png

2.4 查看组件服务状态

$ docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
manager             "/opt/dragonfly/bin/…"   manager             running (healthy)   0.0.0.0:8080->8080/tcp, 0.0.0.0:65003->65003/tcp
mysql               "docker-entrypoint.s…"   mysql               running (healthy)   0.0.0.0:3306->3306/tcp
peer                "/opt/dragonfly/bin/…"   dfdaemon            running (healthy)   0.0.0.0:65000-65002->65000-65002/tcp
redis-dragonfly     "docker-entrypoint.s…"   redis               running (healthy)   0.0.0.0:6379->6379/tcp
scheduler           "/opt/dragonfly/bin/…"   scheduler           running (healthy)   0.0.0.0:8002->8002/tcp
seed-peer           "/opt/dragonfly/bin/…"   seed-peer           running (healthy)   0.0.0.0:65006-65008->65006-65008/tcp
87ecb3f427488bf6797a98205905c926.png

2.5 修改docker配置

$ cat /etc/docker/daemon.json
{
   ...
"registry-mirrors":["http://127.0.0.1:65001"],   #添加该项配置参数
...
}
$ sudo systemctl restart docker      #重启docker

2.6 重启Dragonfly2

$ docker-compose down && docker-compose up -d && docker-compose ps

2.7 验证测试

从dockerhub上拉取一个镜像,然后检验该镜像是否通过 Dragonfly 来传输完成。

$ docker rmi nginx:1.23.3
$ docker pull nginx:1.23.3
$ docker-compose exec dfdaemon grep "peer task done" /var/log/dragonfly/daemon/core.log

输出以下结果则正常:

{
  "level":"info",
  "ts":"2023-06-08 01:55:19.445",
  "caller":"peer/peertask_conductor.go:1330",
  "msg":"peer task done, cost: 37128ms",
  "peer":"192.168.2.19-1-a40c51df-315d-462a-ac4b-f55e9610065b",
  "task":"baaea6a3f961160e86d114571b3dd4d95b2145bc72d27969448da4570b32ae3f",
  "component":"PeerTask",
  "trace":"31814778b12db5a0834f916dc269e442"
}
f8707a027740b05053121189e0b3aeea.png
测试结果

2.8 登录Manager控制台管理界面

在浏览器输入主机IP和8080端口访问manager控制台,再输入用户和密码:root/dragonfly首次登录:

47c38eaa3e4aa3d1257e57aeafd549f4.png2702ae041793e389a651897cf43c95cf.png561abb715285f91fb2f93cfffd81c6d6.png
重新登录:

c3d941b18cf53fe8988304ba0f9dae86.png
登录界面
c2b221c768922d3f9384f1ed4b46d481.png
主界面

Harbor配置分布式分发

登录Harbor UI管理界面,找到【系统管理】-【分布式分发】-【新建实例】

60fb1f15de8fd5d66311e04e395783a4.png

填写信息:

  • 供应商(必填):本处选择Dragonfly;

  • 名称(必填):自定义一个名称即可;

  • 端点(必填):http协议与Dragonfly地址及manager组件服务端口

  • 认证模式:NONE(无需身份验证)、Basic(需要 HTTP 基本身份验证模式、用户名和密码)、OAuth(OAuth 持有者令牌模式,需要持有者令牌)

  • 选项:选择“启用”

5a244c40a439ea3f22179f30cfa5eee1.png检测失败可查看harbor的服务日志/var/log/harbor/core.log进行排错。

7e7fecdb2dd94008afe2a35a5a07f213.png
配置完成

本文转载自:「Harbor进阶实战」,原文:https://url.hi-linux.com/pWFoN,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

ef3c6a69865831c4145764f1910806d3.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

bdbd3540628ebcd86f928a88bd4819de.png

你可能还喜欢

点击下方图片即可阅读

cf2e3323636cfe202df4dcf1d4df9164.jpeg

GitHub 星标 22.5K Star,这款 Rust 编写的后现代编辑器太赞了!

179d1a4a574329732efd245d6b314b90.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

6ff028257221ae49e8cf97e93db953eb.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值