在 Harbor 中按项目设置镜像存储配额
解读
面试官抛出“Harbor 按项目设置镜像存储配额”,表面问的是“怎么配”,实质想验证候选人是否真正在生产级私有镜像仓库落地过容量治理与多租户隔离。国内金融、运营商、政务云对“配额硬限制 + 超配强制拒绝 + 审计留痕”是刚性要求,回答必须体现:
- 对 Harbor 架构(core、registry、token 服务)与配额检查链路的理解;
- 清楚配额值在数据库层(project.quota_hard)与Redis 缓存的同步机制;
- 能区分“逻辑配额(manifest 大小)”与“物理存储(blob 共享)”的差异,避免“看似超配实则未超”的误判;
- 熟悉配额超限后客户端看到的 413/403 错误码,以及如何通过GC 与配额重新计算快速恢复业务。
知识点
- Harbor 配额模型:project.quota_hard 字段存储整数(单位 Byte),-1 代表无限制;配额检查在 core 服务完成,registry 只负责 blob 上传。
- 配额检查链路:docker push → nginx → core middleware → 查询 Redis 缓存的已用大小 → 若超限立即返回 413 Request Entity Too Large。
- 配额计算规则:以 manifest 层大小累加,blob 跨仓库共享时只计一次;删除镜像后需等待GC 清理并执行“配额重新计算”才会释放。
- 配置入口:管理员在 Harbor UI“项目”→“配置管理”→“存储配额”输入数值(支持 KiB/MiB/GiB 单位)或调用 REST API PUT /api/v2.0/projects/{project_id} 设置 storage_limit。
- 强制策略:国内合规场景需开启配额硬限制(默认即硬限制,无软限制概念),并配合审计日志(event_log 表)记录超配触发人、时间与 tag。
- 版本差异:Harbor v2.1 之前仅支持全局配额;v2.2+ 支持项目级配额;v2.5+ 支持镜像级保留策略与配额联动,防止“刚 GC 完又被重新推送”。
- 常见坑:
- 使用S3 后端时,registry 上传 multipart 分片会导致 core 计算的中间值偏大,需开启 S3 重定向让 registry 直写,避免 double-count;
- 镜像复制场景,若目标 Harbor 项目配额小于源端,复制任务会无限重试并失败,需提前调大配额或关闭复制;
- Helm Chart 占用配额但计算方式与 OCI 镜像不同,需单独评估。
答案
生产落地分三步:
-
前提校验
确认 Harbor 版本 ≥ v2.2 且 storage_driver 为 filesystem 或 S3(已开重定向)。登录管理员账号,检查系统级默认配额是否关闭(system/default_quota_per_project=-1),避免全局默认值覆盖项目级设置。 -
设置项目级配额
- UI 方式:进入“项目”→选择目标项目→“配置管理”→“存储配额”,输入整数 + 单位(例如 100GiB),保存后立即写入 project 表并同步到 Redis。
- API 方式:调用 PUT /api/v2.0/projects/1
返回 200 即生效;若返回 409 需确认当前已用容量是否已超。{"storage_limit": 107374182400}
-
验证与兜底
- 客户端执行 docker push 一个大层,观察是否收到 413 Quota Exceeded;
- 若需紧急恢复,管理员可临时调大配额或执行 GC + 配额重新计算(Harbor UI“垃圾清理”→勾选“清理后更新配额”),通常 1 分钟内完成;
- 配合 Prometheus exporter 监控项目级配额使用率,告警阈值建议 80%,提前触发清理或扩容。
拓展思考
- 多集群共享后端存储:当两个 Harbor 实例共用同一 S3 bucket 时,配额只在各自数据库维护,可能出现“实例 A 已超配但实例 B 仍显示未超”的脑裂问题。解决思路是统一接入外部 Redis 集群做配额缓存,或定期用 harbor-quota-sync 工具对账。
- 按镜像版本维度再细分配额:Harbor 原生只支持项目级,若业务要求“每个微服务镜像不超过 5GiB”,需二次开发:在 core 服务增加 artifact.quota 表,并在 middleware 中按 artifact digest 累加,版本删除后立即释放。
- 与 Kubernetes 联动:在 K8s 集群中部署 Open Policy Agent 拦截 imagePullSecret 对应的镜像推送,若检测到项目配额剩余 <10% 则拒绝 CI 阶段 docker buildx imagetools create,实现事前防控而非事后拒绝。
- 合规审计:国内等保 2.0 要求“重要操作留痕”,Harbor 默认 event_log 只保留 3 天,需将审计日志接入 ELK 或 Loki,并设置 WORM(一次写多次读) 策略,防止管理员篡改配额记录。