3. Harbor 部署方式:在线安装、离线安装、Helm Chart 部署、Docker Compose 部署
Harbor 作为企业级制品仓库,支持多种部署路径以适应不同环境与运维习惯。本章系统梳理四种主流部署方式——在线安装、离线安装、Helm Chart 部署与Docker Compose 部署,帮助你在实际项目中根据网络条件、集群类型与团队技能选择最合适的方案。
选型提示:生产环境推荐优先使用 Helm Chart 部署(Kubernetes 集群)或离线安装(无外网访问的物理机/虚拟机);开发测试环境可使用 Docker Compose 或在线安装快速验证。
3.1 四种部署方式对比总览
下表从安装复杂度、网络依赖、适用场景、升级维护四个维度进行横向对比:
| 部署方式 | 安装复杂度 | 网络依赖 | 适用场景 | 升级维护 |
|---|---|---|---|---|
| 在线安装 | 低(一键脚本) | 需外网下载镜像与依赖 | 开发环境、快速原型 | 在线更新,依赖网络 |
| 离线安装 | 中(需提前准备离线包) | 无外网要求 | 生产环境、内网隔离 | 手动替换离线包 |
| Helm Chart 部署 | 中(需 Kubernetes 集群) | 需访问 Chart 仓库或本地加载 | Kubernetes 原生环境 | Helm upgrade 滚动更新 |
| Docker Compose 部署 | 低(单机编排) | 需拉取镜像或本地加载 | 单机测试、小规模部署 | docker-compose pull & up |
3.2 部署架构与组件关系
无论采用哪种部署方式,Harbor 的核心组件架构保持一致。下图展示了 Harbor 各服务模块及其依赖关系:
3.3 在线安装
在线安装是 Harbor 官方推荐的快速入门方式,通过 install.sh 脚本自动完成环境检测、镜像拉取与容器启动。
安装步骤
- 下载 Harbor 在线安装包(
harbor-online-installer-<version>.tgz) - 解压并编辑
harbor.yml配置文件 - 执行
sudo ./install.sh启动安装
关键配置示例
# harbor.yml 核心配置
hostname: harbor.example.com
http:
port: 80
https:
port: 443
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
harbor_admin_password: Harbor12345
database:
password: root123
data_volume: /data/harbor
注意:在线安装要求目标主机能够访问 Docker Hub 和 GitHub 等外网资源。若网络受限,安装脚本会因拉取镜像超时而失败,此时应改用离线安装方式。
3.4 离线安装
离线安装适用于内网隔离或安全合规环境。需提前在有外网的机器上准备离线安装包(包含所有 Harbor 镜像的 tar 文件),然后传输到目标主机。
准备工作
- 从 GitHub Releases 下载
harbor-offline-installer-<version>.tgz - 将离线包 scp 到目标主机:
scp harbor-offline-installer-*.tgz user@target:/opt/ - 解压后执行
sudo ./install.sh,脚本会自动从本地 tar 包加载镜像
离线包内容结构
harbor-offline-installer-v2.10.0.tgz
├── harbor.yml.tmpl
├── install.sh
├── prepare
├── common/
├── harbor.v2.10.0.tar.gz # 所有 Harbor 组件镜像打包
└── docker-compose.yml
最佳实践:离线部署时建议将
harbor.v2.10.0.tar.gz 提前导入到私有镜像仓库或本地 Docker 缓存,避免 install.sh 重复加载大文件。导入命令:docker load -i harbor.v2.10.0.tar.gz
3.5 Helm Chart 部署(Kubernetes 原生)
Helm Chart 部署是 Kubernetes 环境下的首选方案,利用 Helm 包管理器实现声明式安装、升级与回滚。Harbor 官方维护的 Chart 位于 https://helm.goharbor.io。
部署命令
# 添加 Harbor Helm 仓库
helm repo add harbor https://helm.goharbor.io
helm repo update
# 创建命名空间
kubectl create namespace harbor
# 使用 values.yaml 自定义配置并安装
helm install harbor harbor/harbor \
--namespace harbor \
--set expose.type=ingress \
--set expose.ingress.hosts.core=harbor.example.com \
--set persistence.persistentVolumeClaim.registry.size=100Gi \
--set persistence.persistentVolumeClaim.database.size=20Gi
Helm 部署架构特点
| 组件 | Kubernetes 资源类型 | 说明 |
|---|---|---|
| Nginx | Deployment + Service + Ingress | 支持 Ingress 暴露,可配置 TLS |
| Harbor Core | Deployment | API 与 UI 服务 |
| Registry | Deployment + PVC | 镜像存储,支持 PVC 或 S3 后端 |
| Jobservice | Deployment | 后台任务执行器 |
| PostgreSQL | StatefulSet + PVC | 数据库持久化 |
| Redis | Deployment | 缓存与队列 |
生产建议:Helm 部署时务必配置
persistence.enabled=true 并指定 StorageClass,否则 Pod 重启后数据丢失。保留策略与清理窗口的定时任务由 Jobservice 管理,可通过 jobservice.jobLoggers 配置日志输出。
3.6 Docker Compose 部署(单机快速部署)
Docker Compose 部署是 Harbor 最传统的单机部署方式,适合开发测试或小规模团队使用。Harbor 安装包内置了 docker-compose.yml 文件,install.sh 脚本本质上是调用 docker-compose up -d 启动所有服务。
手动启动流程
# 1. 准备配置文件
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
# 2. 生成配置文件与证书
sudo ./prepare
# 3. 启动所有容器
sudo docker-compose up -d
# 4. 查看运行状态
sudo docker-compose ps
Compose 文件核心服务定义
# docker-compose.yml 关键片段
services:
proxy:
image: goharbor/nginx-photon:v2.10.0
ports:
- "80:8080"
- "443:8443"
core:
image: goharbor/harbor-core:v2.10.0
depends_on:
- database
- redis
registry:
image: goharbor/registry-photon:v2.10.0
volumes:
- /data/harbor/registry:/storage
jobservice:
image: goharbor/harbor-jobservice:v2.10.0
depends_on:
- core
- redis
database:
image: goharbor/harbor-db:v2.10.0
volumes:
- /data/harbor/database:/var/lib/postgresql/data
redis:
image: goharbor/redis-photon:v2.10.0
限制说明:Docker Compose 部署不具备 Kubernetes 的自动扩缩容与自愈能力。若需高可用或水平扩展,请迁移至 Helm Chart 部署。保留策略的清理窗口在单机模式下受限于 Jobservice 单实例性能,大量制品清理时可能阻塞其他任务。
3.7 部署方式选择决策树
以下决策树帮助你根据实际环境快速定位合适的部署方式:
3.8 部署方式对保留策略与清理窗口的影响
不同部署方式在保留策略执行与清理窗口配置上存在细微差异,下表总结关键影响点:
| 部署方式 | Jobservice 运行模式 | 清理窗口配置位置 | 注意事项 |
|---|---|---|---|
| 在线/离线安装 | Docker 容器(单实例) | harbor.yml → jobservice.max_job_workers |
清理任务过多时可能阻塞复制任务 |
| Helm Chart 部署 | Kubernetes Deployment(可多副本) | values.yaml → jobservice.replicas + jobservice.maxJobWorkers |
可通过 HPA 自动扩缩 Jobservice 实例 |
| Docker Compose 部署 | Docker 容器(单实例) | docker-compose.yml 环境变量 MAX_JOB_WORKERS |
重启 Compose 后配置生效 |
核心结论:无论采用哪种部署方式,保留策略与清理窗口的底层逻辑完全一致——由 Jobservice 根据规则定时扫描 Registry 中的制品标签,执行删除或移动操作。部署方式仅影响 Jobservice 的可用性与扩展能力。在生产环境中,建议为 Jobservice 分配独立资源限制(CPU/内存),避免清理任务影响核心 API 响应。