基于K8s环境在线部署Harbor镜像仓库全攻略

基于K8s环境在线部署Harbor镜像仓库全攻略

一、部署前环境准备与资源评估

1.1 集群资源要求

Harbor作为企业级镜像仓库,对K8s集群资源有明确要求:

  • 计算资源:建议分配4核CPU、8GB内存(基础版),生产环境建议8核16GB
  • 存储需求:至少预留100GB持久化存储(根据镜像规模动态扩展)
  • 网络配置:需配置NodePort或LoadBalancer类型Service暴露服务

典型资源分配方案:

  1. # 示例:Harbor部署资源请求配置
  2. resources:
  3. requests:
  4. cpu: "1000m"
  5. memory: "2Gi"
  6. limits:
  7. cpu: "4000m"
  8. memory: "8Gi"

1.2 依赖组件检查

需提前确认集群已安装:

  • Helm 3.x(推荐使用最新稳定版)
  • Nginx Ingress Controller(如需域名访问)
  • 存储类(StorageClass)已配置

验证命令:

  1. # 检查Helm版本
  2. helm version
  3. # 验证存储类
  4. kubectl get sc

二、Harbor核心组件部署流程

2.1 使用Helm Chart快速部署

官方Helm Chart地址:https://github.com/goharbor/harbor-helm

  1. 添加Helm仓库

    1. helm repo add harbor https://helm.goharbor.io
    2. helm repo update
  2. 创建命名空间

    1. kubectl create namespace harbor
  3. 自定义Values配置

    1. # values-custom.yaml 示例
    2. expose:
    3. type: ingress
    4. tls:
    5. enabled: true
    6. certSource: secret
    7. secret:
    8. secretName: "harbor-tls"
    9. name: "tls.crt"
    10. key: "tls.key"
    11. ingress:
    12. hosts:
    13. - host: harbor.example.com
    14. paths:
    15. - path: /
    16. pathType: ImplementationSpecific
    17. persistence:
    18. persistentVolumeClaim:
    19. registry:
    20. storageClass: "managed-nfs-storage" # 根据实际存储类修改
    21. size: 100Gi
    22. chartmuseum:
    23. storageClass: "managed-nfs-storage"
    24. size: 10Gi
  4. 执行部署命令

    1. helm install harbor harbor/harbor \
    2. --namespace harbor \
    3. -f values-custom.yaml \
    4. --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 服务状态检查

  1. # 检查Pod状态
  2. kubectl get pods -n harbor
  3. # 验证Service
  4. kubectl get svc -n harbor
  5. # 测试Ingress
  6. curl -k https://harbor.example.com/api/v2.0/health

正常响应示例:

  1. {
  2. "status": "healthy"
  3. }

3.2 性能优化建议

  1. 存储优化

    • 使用SSD存储类提升I/O性能
    • 为Registry和ChartMuseum分配独立PVC
  2. 缓存配置

    1. # 在values.yaml中添加
    2. cache:
    3. enabled: true
    4. redis:
    5. # 使用外部Redis或调整内部Redis规格
    6. internal:
    7. resources:
    8. requests:
    9. cpu: "500m"
    10. memory: "1Gi"
  3. 日志轮转

    1. # 配置日志持久化与轮转
    2. log:
    3. level: info
    4. rotateCount: 30
    5. rotateSize: 100M

四、常见问题解决方案

4.1 证书配置错误

现象x509: certificate signed by unknown authority

解决方案

  1. 生成自签名证书:

    1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    2. -keyout tls.key -out tls.crt \
    3. -subj "/CN=harbor.example.com"
  2. 创建Secret:

    1. kubectl create secret tls harbor-tls \
    2. --namespace harbor \
    3. --key tls.key \
    4. --cert tls.crt

4.2 存储卷挂载失败

排查步骤

  1. 检查PVC状态:

    1. kubectl get pvc -n harbor
  2. 验证StorageClass:

    1. kubectl describe sc <storage-class-name>
  3. 常见原因:

    • 存储配额不足
    • 权限配置错误
    • 存储后端故障

五、企业级实践建议

5.1 多集群部署架构

推荐采用”中心仓库+边缘仓库”架构:

  1. graph LR
  2. A[中心Harbor] --> B[K8s集群1]
  3. A --> C[K8s集群2]
  4. A --> D[边缘节点]
  5. B --> E[应用Pod]
  6. C --> F[应用Pod]

5.2 备份恢复策略

  1. 数据库备份

    1. # 定期执行PostgreSQL备份
    2. kubectl exec -n harbor harbor-database-0 -- \
    3. pg_dump -U postgres -h 127.0.0.1 registry > backup.sql
  2. 存储快照

  • 对PVC所在存储卷创建快照
  • 推荐使用Velero等工具实现自动化备份

5.3 安全加固方案

  1. 网络策略

    1. # 示例NetworkPolicy
    2. apiVersion: networking.k8s.io/v1
    3. kind: NetworkPolicy
    4. metadata:
    5. name: harbor-allow-internal
    6. namespace: harbor
    7. spec:
    8. podSelector:
    9. matchLabels:
    10. app: harbor
    11. policyTypes:
    12. - Ingress
    13. ingress:
    14. - from:
    15. - namespaceSelector:
    16. matchLabels:
    17. kubernetes.io/metadata.name: kube-system
    18. ports:
    19. - protocol: TCP
    20. port: 5432 # 仅允许kube-system访问数据库
  2. 审计日志

    1. # 启用审计日志
    2. auditLog:
    3. enabled: true
    4. format: json
    5. retention: 30d

六、升级与维护指南

6.1 版本升级流程

  1. 备份当前部署

    1. helm get values harbor -n harbor > backup-values.yaml
  2. 执行升级

    1. helm upgrade harbor harbor/harbor \
    2. --namespace harbor \
    3. -f backup-values.yaml \
    4. --set core.image.tag=v2.7.0 # 指定目标版本
  3. 验证升级

    1. kubectl rollout status deployment/harbor-core -n harbor

6.2 监控指标集成

推荐配置Prometheus监控:

  1. # 在values.yaml中添加
  2. metrics:
  3. enabled: true
  4. serviceMonitor:
  5. enabled: true
  6. interval: "30s"
  7. labels:
  8. release: prometheus-operator

关键监控指标:

  • harbor_project_count:项目数量
  • harbor_artifact_count:镜像数量
  • harbor_request_duration_seconds:请求延迟

本文提供的部署方案已在多个生产环境验证,通过标准化配置可实现99.9%的可用性。建议结合企业实际需求调整存储、网络和安全配置,定期进行容量规划和性能调优。