基于K8s环境在线部署Harbor镜像仓库全流程指南

基于K8s环境在线部署Harbor镜像仓库全流程指南

一、Harbor与K8s集成价值分析

Harbor作为CNCF毕业的开源镜像仓库项目,在Kubernetes环境中具有显著优势:其内置的RBAC权限控制与K8s的ServiceAccount机制天然契合,镜像复制功能可实现多集群镜像同步,漏洞扫描模块能提前发现容器镜像安全隐患。据Gartner报告,采用Harbor的企业容器镜像管理效率平均提升40%,安全事件发生率下降65%。

二、部署前环境准备

2.1 集群资源要求

建议配置:3节点集群(每个节点≥4vCPU/16GB内存),存储类需支持ReadWriteMany模式。可通过以下命令验证节点资源:

  1. kubectl describe nodes | grep -A 10 "Allocated resources"

2.2 存储方案选择

生产环境推荐使用NFS或云存储(如AWS EBS、阿里云NAS)。以NFS为例,需提前创建PV和PVC:

  1. # nfs-pv.yaml
  2. apiVersion: v1
  3. kind: PersistentVolume
  4. metadata:
  5. name: harbor-pv
  6. spec:
  7. capacity:
  8. storage: 100Gi
  9. accessModes:
  10. - ReadWriteMany
  11. nfs:
  12. path: /data/harbor
  13. server: 192.168.1.100
  14. ---
  15. apiVersion: v1
  16. kind: PersistentVolumeClaim
  17. metadata:
  18. name: harbor-pvc
  19. spec:
  20. accessModes:
  21. - ReadWriteMany
  22. resources:
  23. requests:
  24. storage: 100Gi

2.3 网络配置要点

需确保NodePort范围(默认30000-32767)未被占用,或配置Ingress暴露服务。使用MetalLB时,需在ConfigMap中定义地址池:

  1. # metallb-config.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. namespace: metallb-system
  6. name: config
  7. data:
  8. config: |
  9. address-pools:
  10. - name: default
  11. protocol: layer2
  12. addresses:
  13. - 192.168.1.200-192.168.1.220

三、Helm安装详细步骤

3.1 添加Bitnami仓库

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm repo update

3.2 定制Values配置

关键参数说明:

  • expose.type=ingress:推荐使用Ingress暴露服务
  • persistence.existingClaim=harbor-pvc:绑定预创建的PVC
  • harborAdminPassword:设置强密码(建议≥16位包含大小写和特殊字符)
  • imagePullPolicy=IfNotPresent:优化镜像拉取策略

完整values.yaml示例:

  1. expose:
  2. type: ingress
  3. tls:
  4. enabled: true
  5. certSource: secret
  6. secret:
  7. secretName: harbor-tls
  8. name: tls
  9. ingress:
  10. hosts:
  11. - core.harbor.domain
  12. annotations:
  13. kubernetes.io/ingress.class: nginx
  14. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  15. persistence:
  16. enabled: true
  17. persistentVolumeClaim:
  18. registry:
  19. existingClaim: harbor-pvc
  20. storageClass: ""
  21. subPath: registry
  22. chartmuseum:
  23. existingClaim: harbor-pvc
  24. subPath: chartmuseum
  25. jobservice:
  26. existingClaim: harbor-pvc
  27. subPath: jobservice
  28. database:
  29. existingClaim: harbor-pvc
  30. subPath: database
  31. redis:
  32. existingClaim: harbor-pvc
  33. subPath: redis
  34. imageChartStorage:
  35. type: filesystem
  36. filesystem:
  37. rootdirectory: /storage

3.3 执行安装命令

  1. helm install harbor bitnami/harbor \
  2. --namespace harbor \
  3. --create-namespace \
  4. -f values.yaml \
  5. --set harborAdminPassword="StrongPassw0rd!" \
  6. --wait --timeout 10m

四、部署后验证与配置

4.1 服务状态检查

  1. kubectl get pods -n harbor
  2. # 预期输出:所有Pod状态为Running
  3. NAME READY STATUS RESTARTS AGE
  4. harbor-core-... 1/1 Running 0 5m
  5. harbor-database-... 1/1 Running 0 5m
  6. harbor-jobservice-... 1/1 Running 0 5m
  7. harbor-portal-... 1/1 Running 0 5m
  8. harbor-registry-... 1/1 Running 0 5m
  9. harbor-trivy-... 1/1 Running 0 5m

4.2 访问测试

通过Ingress访问时,需先配置DNS解析或修改本地hosts文件:

  1. 192.168.1.100 core.harbor.domain

浏览器访问https://core.harbor.domain,使用默认账号admin和设置的密码登录。

4.3 客户端配置

在开发机上配置docker信任Harbor证书:

  1. mkdir -p /etc/docker/certs.d/core.harbor.domain
  2. scp node1:/path/to/harbor-ca.crt /etc/docker/certs.d/core.harbor.domain/ca.crt
  3. systemctl restart docker

五、常见问题解决方案

5.1 Pod启动失败排查

  1. 数据库连接失败:检查harbor-database Pod日志,确认PVC是否正确挂载
  2. 存储权限问题:执行kubectl exec -it harbor-registry-xxx -- ls /storage验证写入权限
  3. 证书配置错误:使用openssl s_client -connect core.harbor.domain:443验证证书链

5.2 性能优化建议

  • 数据库调优:在values.yaml中添加PostgreSQL参数
    1. database:
    2. postgresql:
    3. postgresqlConfiguration:
    4. max_connections: "500"
    5. shared_buffers: "512MB"
  • 缓存配置:为Registry服务添加Redis缓存
    1. cache:
    2. enabled: true
    3. redis:
    4. usePassword: false
    5. master:
    6. persistence:
    7. enabled: false

六、运维管理最佳实践

6.1 备份策略

建议每周执行全量备份,每日执行增量备份:

  1. # 全量备份示例
  2. kubectl exec -n harbor harbor-database-xxx -- \
  3. pg_dump -U postgres -Fc harbor > harbor_backup_$(date +%Y%m%d).dump

6.2 升级流程

  1. 备份现有数据
  2. 更新Helm仓库:helm repo update
  3. 执行升级命令:
    1. helm upgrade harbor bitnami/harbor \
    2. -n harbor \
    3. -f values.yaml \
    4. --set harborAdminPassword="NewPassw0rd!"

6.3 监控集成

配置Prometheus监控指标端点,在values.yaml中启用:

  1. metrics:
  2. enabled: true
  3. serviceMonitor:
  4. enabled: true
  5. interval: 30s
  6. labels:
  7. release: prometheus-operator

通过以上步骤,可在Kubernetes环境中快速构建高可用的Harbor镜像仓库。实际部署时,建议先在测试环境验证配置,再逐步推广到生产环境。根据CNCF 2023年调查报告,采用自动化部署方案的企业,其Harbor集群可用性达到99.95%,显著高于手动部署的98.2%水平。