机器学习平台技术栈之 Harbor:构建安全高效的云原生 AI 制品中心

当我们谈论构建庞大且复杂的机器学习平台(如基于 Kubernetes 的 MLOps 平台)时,大家往往热衷于讨论如何榨干 GPU 算力、如何设计极速的网络通信。然而,有一个常常被忽视却又在每天的日常开发中卡住系统脖子的重灾区——AI 镜像与制品的分发

在传统的 Web 微服务时代,一个 Java 或 Go 业务镜像的大小通常在几百 MB 以内。但在 AI 领域,包含完整 CUDA Toolkit、cuDNN、PyTorch 以及海量 Python 依赖的基础镜像动辄 15GB 到 20GB 起步
当千卡集群并发启动一个分布式训练任务,上千个节点同时向中心服务器拉取几十 GB 的镜像,瞬时产生的几十 Tbps 流量能在几秒钟内彻底击穿普通网络交换机和存储的极限(拉取风暴 / Pull Storm)。

此外,算法团队有极具敏感性的商业模型需要隔离(多租户权限),有严格的开源协议漏洞需要审查(CVE 扫描),而且我们不仅要存镜像,渐渐地还要利用 OCI 标准来存储 Helm Charts 和大模型权重本身。

作为首个从 CNCF 毕业的中国开源项目,Harbor 凭借其企业级的权限控制、强大的漏洞扫描能力以及极具扩展性的 OCI 制品托管体系,成为了各大企业 AI 中台搭建不可或缺的制品级数据“大后方”

本文将极度硬核地解构 Harbor。从核心业务概念到系统微服务架构,再深度切入对于 AI 平台尤为重要的 大规模 P2P 镜像加速分发、模型 OCI 化托管以及 GC 垃圾回收算法等深水区,为你打造一面坚不可摧的云原生 AI 基础设施盾牌。

1. 痛点:AI 平台的“制品”护城河危机

在缺乏现代企业级镜像中心的早期 AI 集群中,平台的开发者往往会面临以下几个致命困局:

  1. 超大镜像并发拉取风暴:就像前文所述,在多机多卡分布式训练场景(如 MPIJob 或 PyTorchJob)下,成百上千个 Pod 被调度引擎(如 Volcano)“砰”地一下同时拉起,普通 Docker Registry 会瞬间因为并发连接数耗尽或带宽被打满而陷入 OOM 瘫痪。
  2. 安全合规的“黑盒”灾难:算法工程师随意从 Docker Hub 下载一个包含恶意挖矿植入或者 log4j 严重高危漏洞的基础环境包开始炼丹。安全部门发现时往往已经运行在核心算力节点上了。
  3. 多租户数据泄露风险:自动驾驶团队的镜像和 NLP 团队的镜像混在一起。缺乏细粒度的项目级(Project-level)RBAC 权限管控。
  4. 拉取限流与公网带宽浪费:国内环境反复从 Docker Hub 或 NVIDIA NGC (nvcr.io) 外网拉取镜像,不仅速度奇慢,还常常因为达到拉取阈值(Rate Limiting)被封禁 IP。

Harbor 针对这些“顽疾”,提供了一套具备权限治理、P2P生态融合、缓存代理、漏洞拦截的完备解决方案。

2. 核心概念与关系

要掌握 Harbor,我们需要从它的核心领域驱动模型(Domain Model)入场。其设计完全面向了“企业级治理”。

2.1 核心概念字典

  • **Project (项目)**:Harbor 的顶层隔离单元,类似于 K8s 里的 Namespace。每个 Project 代表一个业务团队或功能模块(如 cv-training-base, nlp-models)。权限(RBAC)是绑定在 Project 上的。
  • **Role-Based Access Control (RBAC)**:Harbor 内置了系统级管理员、项目管理员、开发者、访客(仅拉取)等角色。更支持对接企业级的 OIDC / LDAP / AD 域认证。
  • Artifact (制品):Harbor v2.0 的最大飞跃是将自己从“容器镜像仓库”升级为“OCI 制品仓库”。现在存放于 Project 内部的不仅有 Docker 镜像,还可以包含 Helm Charts、OPA 策略,甚至大模型的文件压缩包(只要它符合 OCI 标准规范)。
  • **Tag Retention & Immutable (标签保留与不可变)**:为防止生产环境使用的标签(如 v1.0.0)被恶意覆盖而导致业务事故,指定的标签可以被设为不可变(Immutable)。同时也可以定义保留策略以自动删除如 latest 等冗余历史版本。
  • **Vulnerability Scanning (漏洞扫描)**:在镜像构建推送到 Harbor 后,触发后台扫描器(如 Trivy、Clair),分析所有 OS 层和应用依赖(Python 包、Node 包)的 CVE 并生成报告。

2.2 核心实体关系网

1
2
3
4
5
6
7
8
9
10
11
12
erDiagram
OIDC_LDAP ||--o{ USER : "Authenticates"
USER }|--|{ PROJECT : "Has Role in (Project Admin/Developer/Guest)"

PROJECT ||--o{ REPOSITORY : "Contains"
REPOSITORY ||--o{ ARTIFACT : "Hosts (Images, Helm, Models)"

ARTIFACT ||--o{ TAG : "Is labeled by"
ARTIFACT ||--o{ VULNERABILITY_REPORT : "Scanned to yield"

PROJECT ||--o{ REPLICATION_POLICY : "Configured with"
PROJECT ||--o{ RETENTION_POLICY : "Cleaned up by"

3. 总体微服务架构设计

Harbor 并不是一个单纯的单一二进制文件,它在内部极其复杂地集成了多个微服务生态组件,以保证极高的扩展性和可靠性。

3.1 架构全景图

我们俯瞰一下 Harbor 的总体组件拓扑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
graph TD
Client([Docker / K8s Kubelet / containerd])

subgraph Harbor Proxy Layer
Proxy[Nginx Proxy / Ingress]
end

Client <-->|HTTPS / REST API| Proxy

subgraph Harbor Core Platform
Core[Harbor Core \n (Auth, RBAC, Webhooks, API)]
JobService[Harbor JobService \n (Async Tasks, GC, Replication)]
Portal[Web UI / Portal]
end

subgraph OCI Storage Engine
Registry[Docker Distribution Registry \n (Actual Blob Handler)]
RegistryCtl[Registry Controller \n (Security/Event Intercept)]
end

subgraph Data & Cache
PostgreSQL[(PostgreSQL \n Metadata, Users, Tags)]
Redis[(Redis \n Caching, Job Queue)]
Storage[(S3 / Ceph / Local File \n Physical Image Blobs)]
end

subgraph Ecosystem Integrations
Trivy[Trivy Scanner]
Notary[Notary/Cosign \n Image Signing]
end

Proxy <--> Portal
Proxy <--> Core
Proxy <--> Registry

Core <--> PostgreSQL
Core <--> Redis
Core -.-> |Triggers| JobService
Core -.-> |Triggers scan| Trivy

JobService <--> Redis
JobService --> |Pull/Push for Replication| Registry

Registry --> |Save/Load layer layers| Storage
RegistryCtl --> |Auth check| Core

3.2 模块职能拆解

  • Harbor Core: 整套系统的大脑,使用 Go 编写。负责权限控制、REST API 的处理、认证模块的对接,并在镜像推送/拉取时提供身份拦截发牌(Token Service)。
  • Registry (Docker Distribution): 原生的 Docker 官方 registry 组件,被 Harbor 收入麾下。负责真刀真枪地把分层的文件流(Blobs)落入后端的真实存储介质(物理磁盘或者外部挂载的 Ceph RGW (S3) 中)。
  • JobService: Harbor 的异步任务调度中心。镜像同步复制(将镜像自动推送到备用机房)、定时垃圾回收(GC)以及漏洞扫描任务的下发,全部由 JobService 借助 Redis 队列处理。它的高可用直接决定了 Harbor 管理能力的稳健度。
  • Trivy: 默认打包的 Aqua Security 组件。专门针对操作系统的依赖(Apt/Yum)与程序依赖(pip/npm)进行深度的静态漏洞透视分析扫描。

4. 面向 AI 的关键技术:高阶深水区

如果仅仅把 Harbor 当个普通的 Docker 仓库,那完全体现不出其在机器学习中台里的价值。我们来看看下面这几大企业级的实战武器库。

4.1 超大镜像拉取风暴化解法:与 P2P 引擎 (Dragonfly) 的联姻

AI 平台上,一个装满了 NVIDIA 驱动驱动体系的镜像可能超过 15 GB。如果 100 台 GPU 节点同时被 Kubernetes 调度启动训练并拉取,1.5 TB 的瞬间出口流量足以把单点 Harbor 的物理网卡冲爆,导致整个集群训练任务卡死在 ContainerCreating

在这一场景下,将 Harbor 结合 P2P(点对点)分发网络(如 CNCF 里的 Dragonfly 或 Kraken)是绝对标配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sequenceDiagram
participant Harbor as Harbor (Seeder)
participant DF_Super as Dragonfly SuperNode
participant NodeA as GPU Node A (DF Daemon)
participant NodeB as GPU Node B (DF Daemon)
participant NodeC as GPU Node C (DF Daemon)

Note over NodeA, NodeC: Job Scheduled: 100 Nodes request same 15GB PyTorch image simultaneously.

NodeA->>DF_Super: Kubelet asks locally to pull image
NodeB->>DF_Super: Same request
NodeC->>DF_Super: Same request

DF_Super->>Harbor: SuperNode fetches the image chunks (Blobs) ONCE
Harbor-->>DF_Super: Return Data Chunks

DF_Super->>NodeA: Send Chunk 1
DF_Super->>NodeC: Send Chunk 2
NodeA->>NodeB: NodeA (Peer) forwards Chunk 1 to NodeB
NodeC->>NodeA: NodeC (Peer) forwards Chunk 2 to NodeA
NodeB->>NodeC: NodeB forwards Chunk 1 to NodeC

Note over NodeA,NodeC: P2P Swarm formed. Cross-rack bandwidth is utilized. Harbor network stress reduced by 99%

工作原理
Harbor 在此架构中实际上成为了 P2P 的终极种子节点(Seed)。Kubelet 被配置为指向本地的 Dragonfly 代理代理(dfdaemon)。
当发生大规模拉取时,只有超级节点(SuperNode)或少量节点作为先头部队向 Harbor 真理地获取 镜像块(Chunks)。一旦数据块落入任何一台 GPU 宿主机上,这台机器瞬间变身为 P2P 网络的服务端,将自己的切片分享给同机架上的其他 GPU 宿主机。
借助这一套“吸血鬼+做种”的 P2P 机制,AI 平台极大提升了大镜像的拉链速度,Harbor 再也无需因为网络拥堵而宕机崩溃。

4.2 Proxy Cache(拉取限速与外网阻隔的救星)

在模型训练实验阶段,算法工程师频繁在 Dockerfile 里写到:
FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
或者是从 NVIDIA NGC 官方拉取基础镜像卡。对于无法联通外网的生产级内网集群,这种请求会全部失败。而在半联网的开发网内,频繁对官方 Registry 进行大规模多节点拉取,会导致本公司外网 IP 直接触发对方 API Rate Limit 而遭全员封杀。

Harbor 推出了绝佳的特性:**Proxy Cache 模式 (代理缓冲)**。
你可以建立一层特殊的 Project,选择它的身份为 Proxy Cache,并在此处维护外部公网凭证(如对接 nvcr.iodocker.io)。

  • 当 K8s 内网尝试 docker pull harbor.mycompany.com/proxy-dockerhub/pytorch/pytorch:latest 时。
  • 如果 Harbor 本地未命中,它充当反向代理去远端真实仓库把那几十个 GB 搬回来,缓存并保存回自己的物理后备存储里
  • 后续所有集群内的请求再来拉,Harbor 即可瞬间以千兆内网速度全速吐出,彻底掐断了外部网络依赖瓶颈,做到了对算法组研发的透明化提速。

4.3 终极利器:以 OCI 标准托管大模型权重及制物 (AI Models as OCI Artifacts)

这可以说是 Harbor 走向泛 AI 时代的重要飞跃(OCI Artifacts)。
模型不再需要痛苦地维护内部自己的 FTP 服务器或散乱在 CephFS 原生态目录里,AI 工程界正在推进一套新标准:将模型直接打成 OCI 镜像包管理

比如 HuggingFace 或者 Llama3 的权重,包含 config.json, tokenizer.model 甚至几个 10GB 的 .safetensors 文件。
我们可以利用开源的 ORASHelm 等工具,无需生成任何 Base Image 和 Linux 文件系统,直接将这些纯文本和大文件按照 OCI Layout(也是一层层的 Blobs)打包,推送到 Harbor。

  • 收益 1:你可以通过像给镜像打标签一样来给大模型发版(llama3:v1, llama3:v2)。
  • 收益 2:它们能享受到 Harbor 强大的 RBAC(只有 AI-Core 组的人可以拉取最新的商业私有微调版模型)。
  • 收益 3:可以直接走上文提到的 P2P (Dragonfly) 高速将几十 GB 的模型通道极速散发给大规模并行推理的 vLLM 集群里进行启动加载!这就是 OCI 大一统规范的优雅。

4.4 垃圾回收 (Garbage Collection) 与 Untagged 幽灵

由于 AI 算法流水线(CI/CD)实验非常庞杂,每天会使用 Jenkins / GitLab Runner 触发数千次定制基础镜像的构建,并疯狂地将 Build-XXX 版本打进 Harbor。
日积月累,Harbor 映射在 Ceph 底层的对象存储里会迅速吃掉几百个 TB,存储开销甚至超过算力开销。

如何有效删除旧镜像?这里有非常危险的深水区。
单纯用接口删除一个镜像名称(API Delete),实际上只是在 PostgreSQL 的数据库层删除了 Manifest(清单清单)索引记录。底层真正耗费几百个 G 空间的 Blob(分层数据文件)并没有被删除!它们变成了悬空虚设的幽灵(Dangling Blobs)。

为了真正节约空间,你需要掌握 Harbor 的组合拳:

  1. **Tag Retention Rules (版本清理策略)**:结合正则写规则,如“针对 ai-models 项目,属于 test-* 标签的镜像只保留最近 7 天,属于 prod-* 的保留最近 10 个”。引擎会自动将多余版本变为 Untagged。
  2. 垃圾回收 (System GC):这才是干底层的脏活。管理员必须配置定期执行 JobService 的 GC 任务系统。GC 会开启一个排他锁(甚至使整个 Registry 进入只读状态),扫描所有后备存储盘上的全部 Blob,找出那些在数据库中没有任何 Manifest 依赖的幽灵层对象进行纯物理上的 rm -rf 彻底释放和断根。

在极大生产模型仓库中,GC 的耗时常常长达几小时。最好的实践是利用业务凌晨低峰窗口自动拉起 GC,并且目前 Harbor 支持开启 Non-blocking GC 以避免在这期间阻断 AI CI 业务的正常推流。

5. 平台最佳实践:多租户权限安全架构隔离

基于 Harbor,企业级机器学习平台在注册账户与命名空间层有着一套严禁的范式指导设计:

  1. ai-base-images (系统级 Public Project):平台管理员维护。存放经过了安全加固、注入了系统基建监控(如 DCGM Exporter 等特定环境变量封装)的官方推荐基础库(py310-cuda12.2-ubuntu22)。任何算法组都能拉取,但严禁写入,从而防止“有毒环境”扩散。必须配置强制 Trivy CVE 安全门禁。
  2. **{team-name}-models (团队级 Private Project)**:业务自身创建。用来保存经过自己专有预训练后产出的 OCI 模型制品以及业务自身训练镜像。绑定至本团队特定的 LDAP Group,做绝对物理隔离,其他租户越权拉取会直接遭受 401 Unauthorized
  3. **proxy-nvcr (Proxy Project)**:应对网络受限节点,利用此通道做全场公网统一加速缓存。

6. 总结:连接数字原材料与无尽可能的心脏

在庞大精密如钟表般的云原生机器学习平台中,如果算力(GPU)是轰鸣作响的内燃机,如果 K8s(Volcano)是精准调配传动的变速箱,那么 Harbor 就是稳稳守卫整个燃料库的不二防线

它不仅彻底解除了在多卡大规模并行运算启动瞬间,由几十 Gb 动辄上 Tb 流量带来的企业网络崩塌危机(通过 P2P 及 Cache),更以极为深邃的企业级角色管理、CVE 白天鹅门禁和前瞻的 OCI 模型托管体系,使得大模型生产的全生命周期终于有迹可循、有法可依。

全面运用好 Harbor,不仅能够为高昂的算力提供迅捷的弹药物资补给速度,更能彻底将算法安全和资产从混乱的代码时代中解脱出来,成为每一支云原生 AI 研发团队不可逆转的共同标准。