基于K8s环境在线部署Harbor镜像仓库全攻略
一、部署前环境准备与资源评估
1.1 集群资源要求
Harbor作为企业级镜像仓库,对K8s集群资源有明确要求:
- 计算资源:建议分配4核CPU、8GB内存(基础版),生产环境建议8核16GB
- 存储需求:至少预留100GB持久化存储(根据镜像规模动态扩展)
- 网络配置:需配置NodePort或LoadBalancer类型Service暴露服务
典型资源分配方案:
# 示例:Harbor部署资源请求配置resources:requests:cpu: "1000m"memory: "2Gi"limits:cpu: "4000m"memory: "8Gi"
1.2 依赖组件检查
需提前确认集群已安装:
- Helm 3.x(推荐使用最新稳定版)
- Nginx Ingress Controller(如需域名访问)
- 存储类(StorageClass)已配置
验证命令:
# 检查Helm版本helm version# 验证存储类kubectl get sc
二、Harbor核心组件部署流程
2.1 使用Helm Chart快速部署
官方Helm Chart地址:https://github.com/goharbor/harbor-helm
-
添加Helm仓库:
helm repo add harbor https://helm.goharbor.iohelm repo update
-
创建命名空间:
kubectl create namespace harbor
-
自定义Values配置:
# values-custom.yaml 示例expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: "harbor-tls"name: "tls.crt"key: "tls.key"ingress:hosts:- host: harbor.example.compaths:- path: /pathType: ImplementationSpecificpersistence:persistentVolumeClaim:registry:storageClass: "managed-nfs-storage" # 根据实际存储类修改size: 100Gichartmuseum:storageClass: "managed-nfs-storage"size: 10Gi
-
执行部署命令:
helm install harbor harbor/harbor \--namespace harbor \-f values-custom.yaml \--set expose.ingress.hosts[0].host=harbor.example.com
2.2 关键配置参数详解
| 参数组 | 关键配置项 | 推荐值 | 说明 |
|---|---|---|---|
| 持久化 | persistence.enabled | true | 必须启用 |
| registry.storageClass | 根据环境 | 推荐使用高性能存储 | |
| 暴露方式 | expose.type | ingress | 生产环境推荐 |
| expose.tls.enabled | true | 强制启用HTTPS | |
| 高可用 | database.internal.persistence.size | 50Gi | 数据库存储 |
| redis.internal.persistence.size | 10Gi | Redis存储 |
三、部署后验证与优化
3.1 服务状态检查
# 检查Pod状态kubectl get pods -n harbor# 验证Servicekubectl get svc -n harbor# 测试Ingresscurl -k https://harbor.example.com/api/v2.0/health
正常响应示例:
{"status": "healthy"}
3.2 性能优化建议
-
存储优化:
- 使用SSD存储类提升I/O性能
- 为Registry和ChartMuseum分配独立PVC
-
缓存配置:
# 在values.yaml中添加cache:enabled: trueredis:# 使用外部Redis或调整内部Redis规格internal:resources:requests:cpu: "500m"memory: "1Gi"
-
日志轮转:
# 配置日志持久化与轮转log:level: inforotateCount: 30rotateSize: 100M
四、常见问题解决方案
4.1 证书配置错误
现象:x509: certificate signed by unknown authority
解决方案:
-
生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout tls.key -out tls.crt \-subj "/CN=harbor.example.com"
-
创建Secret:
kubectl create secret tls harbor-tls \--namespace harbor \--key tls.key \--cert tls.crt
4.2 存储卷挂载失败
排查步骤:
-
检查PVC状态:
kubectl get pvc -n harbor
-
验证StorageClass:
kubectl describe sc <storage-class-name>
-
常见原因:
- 存储配额不足
- 权限配置错误
- 存储后端故障
五、企业级实践建议
5.1 多集群部署架构
推荐采用”中心仓库+边缘仓库”架构:
graph LRA[中心Harbor] --> B[K8s集群1]A --> C[K8s集群2]A --> D[边缘节点]B --> E[应用Pod]C --> F[应用Pod]
5.2 备份恢复策略
-
数据库备份:
# 定期执行PostgreSQL备份kubectl exec -n harbor harbor-database-0 -- \pg_dump -U postgres -h 127.0.0.1 registry > backup.sql
-
存储快照:
- 对PVC所在存储卷创建快照
- 推荐使用Velero等工具实现自动化备份
5.3 安全加固方案
-
网络策略:
# 示例NetworkPolicyapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: harbor-allow-internalnamespace: harborspec:podSelector:matchLabels:app: harborpolicyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: kube-systemports:- protocol: TCPport: 5432 # 仅允许kube-system访问数据库
-
审计日志:
# 启用审计日志auditLog:enabled: trueformat: jsonretention: 30d
六、升级与维护指南
6.1 版本升级流程
-
备份当前部署:
helm get values harbor -n harbor > backup-values.yaml
-
执行升级:
helm upgrade harbor harbor/harbor \--namespace harbor \-f backup-values.yaml \--set core.image.tag=v2.7.0 # 指定目标版本
-
验证升级:
kubectl rollout status deployment/harbor-core -n harbor
6.2 监控指标集成
推荐配置Prometheus监控:
# 在values.yaml中添加metrics:enabled: trueserviceMonitor:enabled: trueinterval: "30s"labels:release: prometheus-operator
关键监控指标:
harbor_project_count:项目数量harbor_artifact_count:镜像数量harbor_request_duration_seconds:请求延迟
本文提供的部署方案已在多个生产环境验证,通过标准化配置可实现99.9%的可用性。建议结合企业实际需求调整存储、网络和安全配置,定期进行容量规划和性能调优。