在云容器引擎上部署业务时,容器镜像仓库是 CI/CD 和应用发布链路中的关键一环。您通常会将 Harbor 部署在云容器引擎集群内,或部署在独立云服务器上,并通过 ELB/Ingress 对外提供服务,后端对接 对象存储(OBS/S3/COS 等) 或云盘/NAS。
典型链路是:
-
CI 构建机将镜像推送到 Harbor;
-
云容器引擎节点从 Harbor 拉取镜像并启动 Pod;
-
在跨区域、跨云或灾备场景下,Harbor 还需将镜像同步到其他镜像仓库。
在云环境中,瓶颈往往不在 Harbor 软件本身,而在于:入口带宽、ELB/Ingress 超时与请求体限制、对象存储分片大小、跨区网络延迟、节点并发拉取数等。因此,下面按上传、下载、同步三个场景,给出适合云容器引擎客户的调参建议。实际调整时请结合云产品规格和业务负载测试后实施。
一、上传(Push)优化
目标:解决大镜像上传超时、失败,提升 CI 构建推送效率。
1. 入口层:Ingress / ELB
云容器引擎通常通过 Ingress 或 ELB 暴露 Harbor。需要重点调整:
-
解除请求体大小限制:避免
413 Request Entity Too Large。 -
延长读写超时:大镜像上传耗时长,默认 60 秒容易中断。
-
关闭请求缓冲:让上传数据流直接透传。
若使用 Nginx Ingress,可添加注解:
nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-read-timeout: "10800" nginx.ingress.kubernetes.io/proxy-send-timeout: "10800" nginx.ingress.kubernetes.io/proxy-request-buffering: "off" nginx.ingress.kubernetes.io/proxy-buffering: "off"
若使用云厂商 ELB Ingress,请在监听器或转发规则中调大:
-
最大请求体大小;
-
空闲超时时间;
-
请求超时时间。
2. Harbor / Registry 配置
-
调整对象存储分片大小:使用 S3/OBS/COS 等对象存储时,适当增大分片,避免超大镜像失败。
在registry/config.yml中
storage: s3: chunksize: 67108864 # 64MB,按对象存储限制调整
-
提高 Jobservice 并发:在
harbor.yml中适当增加:
jobservice: max_job_workers: 50 # 按 CPU/内存规格调整
-
延长内部 HTTP 客户端超时:在 Registry 容器中设置:
REGISTRY_HTTP_CLIENT_TIMEOUT: "300s"
3. 存储后端
-
优先使用云对象存储,而非本地磁盘,便于扩展和扛并发。
-
根据对象存储的并发上传能力,调整 Registry 的并发上传参数。
-
确保 Harbor 到对象存储走 VPC 内网,避免公网带宽成为瓶颈。
二、下载(Pull / 应用发布)优化
目标:加速云容器引擎节点拉取镜像,保障应用快速发布、弹性扩容。
1. 入口层:Ingress / ELB
-
启用 HTTP/2:减少连接开销,提升并发传输效率。可在 ELB 监听器或 Ingress Controller 中开启。
-
优化代理缓冲区:合理设置 Nginx 的
proxy_buffers、proxy_buffer_size。 -
延长空闲超时:避免大镜像拉取过程中连接被 ELB 断开。
2. Harbor 核心与缓存
-
启用 Redis 缓存:Harbor 默认使用 Redis,确保其规格充足,降低数据库压力。
-
使用代理缓存(Proxy Cache):若经常拉取 Docker Hub 等公共镜像,可配置 Harbor 代理缓存,后续拉取直接命中本地缓存。
-
启用对象存储重定向:在对象存储支持且节点网络可达时,让客户端直接从对象存储下载,绕过 Harbor 核心服务,减轻负载。
在registry/config.yml中:
storage: s3: redirect: disable: false
3. 云容器引擎节点侧
-
调整容器运行时并发下载数:
-
Docker:
/etc/docker/daemon.json中设置"max-concurrent-downloads": 3; -
containerd:在
/etc/containerd/config.toml中调整max_concurrent_downloads。
-
-
使用镜像预热 / P2P 加速:云容器引擎通常提供镜像缓存、预热或 P2P 分发能力,可显著降低大规模发布时的仓库压力。
-
分批发布:避免所有节点同时拉取同一大镜像,可结合滚动发布、分批策略错峰。
4. 存储后端
-
使用高性能存储:对象存储、NVMe SSD 云盘等。
本地存储场景下,文件系统挂载可使用 noatime 减少写操作。
三、同步到其他镜像仓库(Replication)优化
目标:提升跨区域、跨云、灾备场景下的镜像同步效率,减少带宽占用和延迟。
1. 提高后台任务并发
在 harbor.yml 中调整 Jobservice 并发:
jobservice: max_job_workers: 50 # 根据 CPU 核数和网络带宽评估
该参数直接影响复制任务的并发吞吐量。
2. 优化复制策略
-
错峰执行:将复制规则设为定时触发,例如每天凌晨低峰期执行:
text0 2 * * *
-
设置带宽限制:在复制规则中设置
Bandwidth(单位 KB/s),避免同步流量占满生产带宽。-1表示不限制。 -
关闭覆盖写入:若目标仓库无需覆盖,设置
override: false,减少写入。 -
按需使用 Flattening:压平目标端路径层级,简化镜像结构。
3. 网络与超时
-
跨区域复制建议走 云专线、VPN 或内网端点,避免公网抖动。
-
调大 Registry 内部 HTTP 客户端超时:
REGISTRY_HTTP_CLIENT_TIMEOUT: "300s"
4. 存储性能
复制的本质是“读源端、写目标端”,源端和目标端的存储 I/O 能力直接决定同步速度。建议两端都使用对象存储或高性能云盘。
四、通用建议
| 场景 | 核心优化方向 | 关键参数 / 配置 |
|---|---|---|
| 上传 Push | 解除限制、避免超时 | Ingress/ELB 调大 body size、超时;Registry chunksize |
| 下载 Pull | 缓存加速、减轻核心负载 | HTTP/2、Redis、代理缓存、对象存储重定向、节点并发下载数 |
| 同步 Replication | 提升并发、错峰调度 | max_job_workers、定时执行、带宽限制、内网/专线 |
其他建议:
-
资源保障:确保 Harbor 各组件(core、jobservice、registry、Redis、DB)有充足 CPU/内存。
-
高可用:生产环境建议 Harbor 组件独立部署,数据库和 Redis 高可用,对象存储多 AZ。
-
监控:重点关注 ELB 带宽、Ingress 5xx、Harbor 任务队列长度、对象存储请求数、节点拉取耗时。
-
持续调优:不同云容器引擎和存储产品能力不同,建议结合实际压测结果逐步调整。