2. Harbor 核心组件及其在存储链路中的角色
在深入探讨镜像存储成本优化之前,必须清晰理解 Harbor 的架构骨架。Harbor 采用微服务架构,核心组件包括 Proxy、Core、Registry 和 JobService。每个组件在制品的推送、拉取、复制和清理链路中承担特定职责,直接影响存储 I/O 路径与成本构成。
2.1 核心组件总览与职责矩阵
下表梳理了四个核心组件在存储链路中的主要角色、数据流向及成本影响点:
| 组件 | 核心职责 | 存储链路角色 | 成本影响点 |
|---|---|---|---|
| Proxy (Nginx) | 反向代理、TLS 终止、访问控制 | 请求入口,分发至 Core 或 Registry | 缓存策略影响回源频率;日志存储量 |
| Core | API 服务、认证授权、项目管理、标签管理 | 元数据读写(数据库),不直接操作镜像层 | 数据库 I/O 与存储;审计日志 |
| Registry | 镜像层(Blob)存储与分发(Docker Distribution) | 实际读写对象存储或文件系统 | 主要成本来源:层数据存储、冗余层、跨区域复制流量 |
| JobService | 异步任务调度:复制、GC、扫描、清理 | 触发跨实例复制、垃圾回收、标签清理 | 复制流量成本;GC 后存储释放效率 |
成本视角提示: Registry 是存储成本的核心载体,但 Proxy 的缓存策略和 JobService 的清理调度同样显著影响总体存储账单。优化不能只关注 Registry 本身。
2.2 组件交互与存储链路流程
下图展示了 Harbor 核心组件在典型镜像推送流程中的交互关系,以及数据在存储链路中的实际流向:
2.3 各组件在存储链路中的详细角色
2.3.1 Proxy (Nginx) — 流量入口与缓存层
- 角色:所有外部请求的第一站,负责 TLS 卸载、速率限制、访问日志记录。
- 存储链路影响:可配置
proxy_cache缓存 Blob 元数据或清单文件,减少对 Registry 的重复请求,降低后端存储 I/O。 - 成本关联:日志存储量(建议轮转压缩);缓存命中率直接影响 Registry 负载。
2.3.2 Core Service — 元数据管理者
- 角色:提供 RESTful API,管理项目、用户、标签、机器人账户、复制规则等。
- 存储链路影响:不直接读写镜像层数据,但所有元数据(镜像清单、标签引用、层关系)存储在 PostgreSQL 中。
- 成本关联:数据库存储与备份成本;审计日志增长(建议定期归档)。
2.3.3 Registry — 镜像层存储核心
- 角色:基于 Docker Distribution 实现,负责 Blob 的存储、去重、分发。
- 存储链路影响:直接与后端存储(S3、GCS、Azure Blob、NFS 等)交互。每个镜像层存储为一个独立 Blob,通过 digest 进行内容寻址去重。
- 成本关联:最大成本来源。存储空间(冗余层、未清理的旧层)、跨区域复制流量、请求次数(GET/PUT 计费)。
优化关键点:Registry 的存储后端选择(对象存储 vs 本地文件系统)、Blob 去重效率、存储桶生命周期策略、定期 GC 释放未引用层。
2.3.4 JobService — 异步任务调度器
- 角色:执行复制、垃圾回收(GC)、镜像扫描、标签清理、Webhook 等异步任务。
- 存储链路影响:复制任务触发跨实例的 Blob 传输(产生网络与存储成本);GC 任务扫描并删除未被任何清单引用的 Blob,释放存储空间。
- 成本关联:复制流量成本;GC 执行频率与效率直接影响存储账单。
2.4 存储链路中的成本敏感路径
基于组件角色,以下路径是成本优化的重点区域:
- 推送路径:Client → Proxy → Registry → 存储后端。优化点:压缩传输、避免重复推送相同层。
- 拉取路径:存储后端 → Registry → Proxy → Client。优化点:Proxy 缓存、CDN 回源策略。
- 复制路径:源 Registry → JobService → 目标 Registry → 目标存储。优化点:增量复制、跳过已存在层。
- 清理路径:JobService → Registry → 存储后端(删除 Blob)。优化点:定期 GC、标签保留策略。
2.5 组件配置对存储成本的影响总结
| 组件 | 配置项 | 成本影响方向 | 建议 |
|---|---|---|---|
| Proxy | 缓存大小 / 缓存有效期 | 减少 Registry 请求次数 | 根据访问模式设置合理缓存 TTL |
| Core | 审计日志保留天数 | 数据库存储增长 | 设置 30-90 天自动清理 |
| Registry | 存储驱动(filesystem / s3 / gcs) | 直接决定存储单价与性能 | 优先选择对象存储并启用生命周期 |
| Registry | GC 定时策略 | 释放未引用层空间 | 每日低峰期执行 GC |
| JobService | 复制规则(同步/异步、过滤条件) | 跨区域流量与存储冗余 | 使用过滤器避免全量复制 |
常见误区:仅关注 Registry 的存储后端单价,而忽略 Proxy 缓存命中率、JobService 复制策略和 GC 频率。完整的成本优化需要从组件交互链路出发,系统性识别冗余存储与无效流量。