logo

基于K8s的Harbor镜像仓库在线部署指南:从零到一的完整实践

作者:谁偷走了我的奶酪2025.10.10 18:49浏览量:0

简介:本文详细介绍在Kubernetes集群中在线安装Harbor镜像仓库的完整流程,涵盖环境准备、资源配置、安装部署及验证测试等关键环节,提供可复用的YAML配置和故障排查建议。

一、技术背景与核心价值

Harbor作为云原生基金会(CNCF)毕业项目,已成为企业级容器镜像管理的标准解决方案。其核心价值体现在三个方面:

  1. 安全增强:支持RBAC权限控制、镜像签名、漏洞扫描等安全功能
  2. 性能优化:通过代理缓存加速镜像拉取,降低跨区域网络延迟
  3. 管理便捷:提供Web界面和REST API,支持多租户和项目级隔离

在Kubernetes环境中部署Harbor,可实现与CI/CD流水线的深度集成,构建完整的容器化应用交付链路。根据CNCF 2023年度调查报告,72%的企业选择在K8s集群内部署私有镜像仓库,其中Harbor占比达58%。

二、环境准备与前提条件

1. 集群要求

  • Kubernetes版本:1.20+(推荐1.24+)
  • 存储类:需配置持久化存储(如NFS、Ceph、AWS EBS等)
  • 负载均衡:需有可用的Ingress Controller或LoadBalancer
  • 资源配额:建议至少4核8G内存(基础版)

2. 网络配置

  1. # 检查节点间网络连通性
  2. for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do
  3. kubectl debug node/$node -it --image=busybox -- sh -c "ping -c 3 <其他节点IP>";
  4. done

需确保Pod CIDR(如10.244.0.0/16)与Service CIDR(如10.96.0.0/12)无冲突。

3. 依赖组件

  • Helm 3.0+(推荐3.12+)
  • Cert-Manager(用于自动签发证书)
  • 外部数据库(可选,默认使用内置SQLite)

三、Harbor核心组件解析

Harbor在K8s中的部署包含以下关键组件:
| 组件 | 功能说明 | 副本数建议 |
|——————-|—————————————————-|——————|
| Core | 主服务,处理API请求 | 2 |
| Registry | 镜像存储核心 | 2 |
| JobService | 异步任务处理(扫描、复制等) | 1 |
| Trivy | 漏洞扫描引擎 | 1 |
| Database | 数据持久化(PostgreSQL/MySQL) | 1 |
| Redis | 缓存与任务队列 | 1 |

四、在线安装详细步骤

1. 添加Helm仓库

  1. helm repo add harbor https://helm.goharbor.io
  2. helm repo update

2. 创建命名空间

  1. # namespace.yaml
  2. apiVersion: v1
  3. kind: Namespace
  4. metadata:
  5. name: harbor
  6. labels:
  7. app: harbor

应用配置:kubectl apply -f namespace.yaml

3. 配置持久化存储

以NFS为例创建StorageClass:

  1. # nfs-storageclass.yaml
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: nfs-harbor
  6. provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
  7. parameters:
  8. server: 192.168.1.100
  9. path: /data/harbor
  10. readOnly: false

4. 自定义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. namespace: "harbor"
  10. ingress:
  11. hosts:
  12. - core.harbor.domain
  13. annotations:
  14. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  15. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  16. persistence:
  17. persistentVolumeClaim:
  18. registry:
  19. storageClass: "nfs-harbor"
  20. accessMode: ReadWriteOnce
  21. size: 20Gi
  22. chartmuseum:
  23. storageClass: "nfs-harbor"
  24. size: 5Gi
  25. jobservice:
  26. storageClass: "nfs-harbor"
  27. size: 1Gi
  28. database:
  29. storageClass: "nfs-harbor"
  30. size: 1Gi
  31. redis:
  32. storageClass: "nfs-harbor"
  33. size: 1Gi
  34. trivy:
  35. enabled: true
  36. ignoreUnfixed: false
  37. skipUpdate: false
  38. githubToken: "<YOUR_GITHUB_TOKEN>" # 用于更新漏洞数据库

5. 执行安装命令

  1. helm install harbor harbor/harbor \
  2. --namespace harbor \
  3. -f values-custom.yaml \
  4. --set expose.ingress.hosts[0]=core.harbor.domain \
  5. --set harborAdminPassword="Harbor12345"

6. 验证部署状态

  1. kubectl get pods -n harbor --watch
  2. # 等待所有Pod状态变为Running
  3. kubectl get svc -n harbor
  4. # 确认Service类型和端口配置

五、安装后配置要点

1. 配置DNS解析

在核心DNS服务器添加记录:

  1. core.harbor.domain IN A <LoadBalancer_IP>
  2. notary.harbor.domain IN A <LoadBalancer_IP>

2. 配置客户端

在/etc/docker/daemon.json中添加:

  1. {
  2. "insecure-registries": [],
  3. "registry-mirrors": [],
  4. "allow-nondistributable-artifacts": ["core.harbor.domain"]
  5. }

重启Docker服务:systemctl restart docker

3. 登录测试

  1. docker login core.harbor.domain
  2. # 输入用户名admin和设置的密码

六、常见问题解决方案

1. Pod启动失败排查

  1. # 查看事件日志
  2. kubectl describe pod <pod-name> -n harbor
  3. # 检查日志
  4. kubectl logs <pod-name> -n harbor -c <container-name>

常见原因:

  • 存储卷挂载失败(检查PVC绑定状态)
  • 数据库连接失败(验证数据库密码)
  • 资源不足(检查节点资源使用率)

2. 证书配置问题

若使用自签名证书,需在客户端配置:

  1. # 信任证书
  2. mkdir -p /etc/docker/certs.d/core.harbor.domain
  3. scp harbor-ca.crt /etc/docker/certs.d/core.harbor.domain/ca.crt

3. 性能优化建议

  • 数据库调优:调整PostgreSQL的shared_buffers和work_mem参数
  • 缓存配置:为Registry组件配置CDN加速
  • 水平扩展:根据负载增加Core和Registry的副本数

七、进阶功能配置

1. 启用复制策略

  1. # 在values.yaml中添加
  2. replication:
  3. enabled: true
  4. policies:
  5. - name: "replicate-to-remote"
  6. filters:
  7. - project: "library"
  8. tag_filter: "latest"
  9. destinations:
  10. - name: "remote-harbor"
  11. url: "https://remote.harbor.domain"
  12. insecure: false

2. 配置垃圾回收

  1. # 进入JobService Pod执行
  2. kubectl exec -it <jobservice-pod> -n harbor -- /harbor/harbor_jobservice --config /etc/jobservice/config.yml gc

3. 集成Prometheus监控

  1. # 在values.yaml中添加
  2. metrics:
  3. enabled: true
  4. serviceMonitor:
  5. enabled: true
  6. namespace: monitoring
  7. interval: 30s

八、最佳实践总结

  1. 高可用架构:建议部署3节点Harbor集群,数据库使用外部PostgreSQL集群
  2. 备份策略:每日备份数据库和配置文件,存储至异地
  3. 升级路径:遵循小版本迭代升级原则,每次升级前测试
  4. 安全加固:定期轮换管理员密码,启用双因素认证

通过本文的详细指导,开发者可以在Kubernetes环境中快速部署企业级Harbor镜像仓库。实际部署中,建议先在测试环境验证配置,再迁移至生产环境。根据Gartner预测,到2025年,85%的企业将采用容器化镜像仓库作为应用交付的核心组件,Harbor与K8s的深度集成将成为主流方案。

相关文章推荐

发表评论

活动