logo

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

作者:搬砖的石头2025.10.10 18:46浏览量:2

简介:本文详细介绍在Kubernetes集群中在线安装Harbor镜像仓库的全流程,涵盖资源准备、部署配置、验证测试及运维优化等关键环节,为开发者和运维人员提供可落地的技术方案。

一、环境准备与前提条件

1.1 Kubernetes集群基础要求

在线部署Harbor需确保K8s集群满足以下条件:

  • 版本兼容性:K8s 1.16+版本(推荐1.20+),支持StatefulSet和Ingress资源
  • 存储资源:至少100GB持久化存储(建议使用云存储或NFS)
  • 计算资源:节点配置建议4核CPU、8GB内存以上
  • 网络要求:开放80/443端口(Ingress)、22端口(可选SSH调试)

1.2 依赖组件安装

Helm Chart管理器部署

  1. # 安装Helm 3.x版本
  2. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
  3. chmod 700 get_helm.sh
  4. ./get_helm.sh
  5. # 验证安装
  6. helm version

存储类配置(以云存储为例)

  1. # 示例:阿里云NAS存储类配置
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: harbor-storage
  6. provisioner: nasplugin.csi.alibabacloud.com
  7. parameters:
  8. server: "nas-server-ip"
  9. path: "/harbor"
  10. vers: "4.0"
  11. options: "none"

二、Harbor部署核心流程

2.1 添加Bitnami Helm仓库

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

2.2 自定义Values配置

创建harbor-values.yaml文件,关键配置项如下:

  1. # 核心配置
  2. expose:
  3. type: ingress
  4. tls:
  5. enabled: true
  6. certSource: secret
  7. secret:
  8. secretName: "harbor-tls"
  9. certificate: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0t..."
  10. key: "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ..."
  11. ingress:
  12. hosts:
  13. - host: harbor.example.com
  14. paths:
  15. - path: /
  16. pathType: ImplementationSpecific
  17. persistence:
  18. persistentVolumeClaim:
  19. registry:
  20. storageClass: "harbor-storage"
  21. accessModes: ["ReadWriteOnce"]
  22. size: "50Gi"
  23. chartmuseum:
  24. enabled: true
  25. storageClass: "harbor-storage"
  26. size: "10Gi"
  27. # 高可用配置
  28. core:
  29. replicas: 3
  30. resources:
  31. requests:
  32. cpu: "500m"
  33. memory: "1Gi"
  34. limits:
  35. cpu: "1000m"
  36. memory: "2Gi"

2.3 部署命令执行

  1. # 创建命名空间
  2. kubectl create namespace harbor-system
  3. # 部署Harbor
  4. helm install harbor bitnami/harbor \
  5. --namespace harbor-system \
  6. -f harbor-values.yaml \
  7. --set service.type=ClusterIP
  8. # 验证部署状态
  9. kubectl get pods -n harbor-system
  10. kubectl get ingress -n harbor-system

三、部署后验证与测试

3.1 服务可用性验证

  1. # 获取Ingress地址
  2. INGRESS_HOST=$(kubectl get ingress -n harbor-system harbor -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  3. # 测试镜像推送
  4. docker login $INGRESS_HOST
  5. docker push $INGRESS_HOST/library/nginx:latest

3.2 关键组件检查

组件 检查命令 预期结果
Core服务 kubectl logs -f harbor-core... 无ERROR级别日志
Redis缓存 redis-cli ping 返回”PONG”
数据库 kubectl exec -it postgres... psql -l 显示harbor数据库

四、运维优化实践

4.1 备份恢复策略

定期备份方案

  1. # 数据库备份(PostgreSQL示例)
  2. kubectl exec -n harbor-system postgresql-0 -- \
  3. pg_dump -U postgres harbor > harbor_backup_$(date +%Y%m%d).sql
  4. # 存储卷快照(以EBS为例)
  5. aws ec2 create-snapshot \
  6. --volume-id $(kubectl get pv -o jsonpath='{.items[?(@.spec.csi.volumeHandle)].metadata.name}' | awk '{print $1}') \
  7. --description "Harbor-PVC-Snapshot"

4.2 性能调优建议

数据库优化配置

  1. -- 调整PostgreSQL参数(通过ConfigMap注入)
  2. ALTER SYSTEM SET max_connections = 200;
  3. ALTER SYSTEM SET shared_buffers = '512MB';

缓存层优化

  1. # 在values.yaml中增加Redis配置
  2. redis:
  3. usePassword: true
  4. password: "your-strong-password"
  5. resources:
  6. requests:
  7. memory: "256Mi"
  8. limits:
  9. memory: "512Mi"

五、常见问题解决方案

5.1 Ingress 502错误排查

  1. 检查Core服务Pod状态:kubectl get pods -n harbor-system -l app.kubernetes.io/component=core
  2. 验证服务端口:kubectl describe svc harbor-core -n harbor-system
  3. 检查网络策略:kubectl get networkpolicy -n harbor-system

5.2 存储空间不足处理

  1. # 扩展PVC容量(需存储类支持)
  2. kubectl patch pvc data-harbor-registry-0 \
  3. -n harbor-system \
  4. --type='json' \
  5. -p='[{"op": "replace", "path": "/spec/resources/requests/storage", "value":"100Gi"}]'

六、进阶部署场景

6.1 多集群部署架构

  1. graph LR
  2. A[生产集群Harbor] -->|镜像同步| B[开发集群Harbor]
  3. A -->|镜像同步| C[测试集群Harbor]
  4. B --> D[本地开发环境]

6.2 混合云部署实践

跨云存储配置示例

  1. # 使用Rook Ceph作为跨云存储
  2. persistence:
  3. enabled: true
  4. imagePullSecrets: []
  5. resources:
  6. requests:
  7. storage: "100Gi"
  8. storageClass: "rook-ceph-block"
  9. accessModes:
  10. - ReadWriteOnce

本文提供的部署方案已在多个生产环境验证,通过Helm Chart的模块化设计,可灵活适配不同规模的K8s集群。建议运维团队建立完善的监控体系(如Prometheus+Grafana),对Harbor的核心指标(存储使用率、请求延迟、API成功率)进行持续观测,确保镜像仓库的稳定运行。

相关文章推荐

发表评论

活动