十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

云原生 AI 平台镜像拉取加速实战:基于 Dragonfly P2P 架构支撑百节点秒级分发

云原生 AI 平台镜像拉取加速实战:基于 Dragonfly P2P 架构支撑百节点秒级分发 云原生 AI 平台镜像拉取加速实战基于 Dragonfly P2P 架构支撑百节点秒级分发在基于 Kubernetes 构建的大规模 AI 算力平台中容器镜像的快速分发是实现秒级弹性伸缩Autoscaling与故障节点快速漂移的核心前提。然而AI 领域的容器镜像由于内嵌了深度学习框架PyTorch/TensorFlow、CUDA 驱动支持库、底层编译工具链以及推理运行时单镜像体积通常高达 10GB~25GB。当生产平台因为流量激增或大促突发洪峰触发数十甚至数百个 Pod 并发扩容时传统的中心化容器镜像仓库如 Harbor、Docker Registry会瞬间遭遇毁灭性的“拉取风暴Image Pull Storm”中心仓库的出站网卡带宽在几秒内被打满 100%并发请求引发大量的连接重置与 HTTP 504 Gateway Timeout 报错导致大批计算节点长时间陷入ErrImagePull或ImagePullBackOff状态。为了彻底攻克大规模 AI 镜像分发的网络瓶颈我们引入了 CNCF 毕业项目 Dragonfly基于 P2PPeer-to-Peer对等网络技术构建了一套支持百节点并发秒级分发的镜像加速体系。一、中心化镜像分发瓶颈与 P2P 物理破局在传统的 C/S 镜像分发模型中所有 Kubernetes 计算节点Worker Nodes作为客户端通过单向链路直接向中心化 Registry 发起 HTTP GET 请求拉取 OCI 镜像分层Layers。这种拓扑结构存在致命的带宽瓶颈假设单镜像大小为 15GB当 100 台宿主机节点同时执行docker pull时中心 Registry 需要在短时间内向内网吐出高达 $100 \times 15\text{GB} 1500\text{GB} 1.5\text{TB}$ 的数据量。即便中心仓库配备了 40Gbps 的高规格物理网卡在满载传输下也至少需要持续打满带宽近 6 分钟极易导致集群内其他核心业务的网络通信发生严重抖动。Dragonfly 的 P2P 架构则彻底颠覆了数据流向Peer 节点协同Swarm Sharing每个下载镜像的 Kubernetes 节点在从对端下载数据块Piece的同时立即作为种子Seeder将已下载的数据块上传给局域网内的其他相邻节点。调度器智能分片调度Scheduler OrchestrationDragonfly 控制面根据节点间的物理拓扑如机架位置、交换机亲和度、当前网络负载构建最优的数据传输树Directed Acyclic Graph, DAG。中心仓库压力恒定无论并发节点数是 10 个还是 1000 个中心 Registry 仅需向最早的一两个 Peer 节点传输一份完整镜像其余 99% 以上的数据流量完全在计算节点之间的内网 P2P 局域网中分摊消化。[Harbor 中心镜像仓库] │ ▼ (仅需传输 1~2 次镜像源数据) [Dragonfly 种子节点] │ ┌───────────────┴───────────────┐ ▼ ▼ [计算节点 Peer 1] ◄──────P2P 传输──────► [计算节点 Peer 2] │ │ ├───────────────┬───────────────┤ ▼ ▼ ▼ [计算节点 Peer 3] ◄──P2P 传输──► [计算节点 Peer 4] ... [Peer N]二、Dragonfly 核心组件架构与集群部署Dragonfly 2.0 体系主要包含三大核心组件Manager管理控制面负责维护集群元数据、P2P 节点状态以及调度策略。Scheduler核心调度引擎负责实时收集各 Peer 的下载进度、网络 RTT并动态为每个 4MB 的数据分片Piece指派最优的供种 Peer。DfdaemonPeer 守护进程以 DaemonSet 形式运行在每个 Kubernetes 节点上劫持 Containerd 的镜像拉取流量充当本地 P2P 传输代理。在 Kubernetes 集群中部署 Dfdaemon DaemonSet 配置如下apiVersion: apps/v1 kind: DaemonSet metadata: name: dragonfly-dfdaemon namespace: dragonfly-system spec: selector: matchLabels: app: dragonfly-dfdaemon template: metadata: labels: app: dragonfly-dfdaemon spec: hostNetwork: true # 必须使用宿主机网络保障高吞吐 containers: - name: dfdaemon image: registry.internal/dragonflyoss/dfdaemon:v2.1.0 securityContext: privileged: true volumeMounts: - name: dfdaemon-config mountPath: /etc/dragonfly/dfdaemon.yaml subPath: dfdaemon.yaml - name: cache-storage mountPath: /var/lib/dragonfly volumes: - name: dfdaemon-config configMap: name: dfdaemon-config - name: cache-storage hostPath: path: /mnt/fast-cache/dragonfly # 绑定本地 NVMe SSD三、Containerd 容器运行时无侵入代理配置为了让 Kubernetes 在拉取镜像时自动走 Dragonfly P2P 网络且对上层业务 Deployment 保持 100% 透明我们需要在节点的 Containerd 配置文件中配置 Registry 镜像镜像Mirror Proxy。修改各节点的/etc/containerd/config.toml[plugins.io.containerd.grpc.v1.cri.registry] [plugins.io.containerd.grpc.v1.cri.registry.mirrors] [plugins.io.containerd.grpc.v1.cri.registry.mirrors.registry.internal] # 将私有镜像仓库的流量无缝重定向到本地 Dragonfly 代理端口 endpoint [http://127.0.0.1:65001]当 Kubelet 触发镜像拉取时请求被本地的dfdaemon监听 65001 端口拦截。dfdaemon自动向 Dragonfly Scheduler 注册下载任务将 20GB 的镜像拆分为数千个 4MB 的 Piece并从同一交换机下的其他计算节点并发通过 P2P 协议拉取全过程对于 Kubelet 而言就像是从一个极速本地 HTTP 服务下载一样透明。四、调度拓扑亲和性与防跨机房流量外溢在多机房与多可用区Multi-AZ架构中必须严禁 P2P 流量跨越昂贵且带宽有限的跨机房专线。在 Dragonfly Manager 中我们通过注入节点拓扑标签Rack, Switch, Zone强制 Scheduler 优先在同机架、同交换机子网内构建 P2P 下载树apiVersion: v1 kind: ConfigMap metadata: name: dragonfly-scheduler-config namespace: dragonfly-system data: scheduler.yaml: | scheduler: algorithm: default # 开启拓扑感知打分 topology: enable: true rules: - key: topology.kubernetes.io/zone weight: 100 # 严格禁止跨 AZ 供种 - key: topology.kubernetes.io/rack weight: 50 # 优先同机架 P2P 传输五、生产压测成效与收益对比我们在拥有 120 台 GPU 计算节点的物理集群中针对一个包含 18.5GB 的大型推理镜像进行了极限并发拉取压测压测场景与指标原生 Harbor 中心化拉取Dragonfly P2P 镜像加速性能提升100 节点并发拉取耗时14 分 35 秒且有 12 节点超时38 秒100% 成功速度提升 23 倍Harbor 仓库网卡出站峰值带宽38.5 Gbps网卡打满堵塞1.8 Gbps仅提供最初种子中心带宽节省 95.3%单节点平均下载速度21 MB/s490 MB/s打满局域网吞吐量提升 23.3 倍大促 Pod 弹性扩容就绪时间16 分钟55 秒含容器初始化扩容延迟降低 94.2%通过全面引入 Dragonfly P2P 镜像分发网络平台彻底拔除了制约大模型算力秒级弹性扩容的最后一道网络枷锁在大促与紧急容灾场景下展现出了极其强悍的算力交付爆发力。
返回列表