K8s集群环境在线部署Harbor镜像仓库全攻略

K8s在线安装Harbor镜像仓库全流程解析

一、环境准备与前置条件

1.1 Kubernetes集群基础要求

在K8s集群中部署Harbor需满足以下条件:

  • K8s版本:建议1.18+版本(支持Ingress API v1)
  • 存储类:需配置持久化存储(如NFS/Ceph/AWS EBS)
  • 节点资源:至少2核4G内存(生产环境建议4核8G+)
  • 网络策略:开放80/443/4443端口(对应Web/HTTPS/Docker Registry)

典型验证命令:

  1. kubectl version --short
  2. kubectl get storageclass

1.2 依赖组件安装

Helm 3.x是必需的包管理工具:

  1. # Linux安装示例
  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

验证安装:

  1. helm version

二、Harbor核心组件部署

2.1 使用Helm Chart部署

推荐使用Bitnami官方Chart(经过社区验证):

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

关键参数配置:

  1. helm install harbor bitnami/harbor \
  2. --set persistence.enabled=true \
  3. --set persistence.storageClass="nfs-client" \
  4. --set expose.type=ingress \
  5. --set expose.tls.enabled=true \
  6. --set expose.ingress.hosts[0].name="harbor.example.com" \
  7. --set adminPassword="StrongPassword123!" \
  8. --namespace harbor-system \
  9. --create-namespace

2.2 配置参数详解

参数组 关键配置项 说明
持久化存储 persistence.existingClaim 复用已有PVC时指定
暴露方式 expose.type=ingress 支持NodePort/LoadBalancer/Ingress
安全认证 expose.tls.secretName 自定义证书时指定Secret名
资源限制 resources.requests.cpu 避免节点资源争抢

三、高级配置优化

3.1 存储方案选型

生产环境推荐方案

  • 块存储:AWS EBS/Azure Disk(低延迟场景)
  • 文件存储:NFS/GlusterFS(成本敏感型)
  • 对象存储:S3兼容存储(大规模镜像存储)

配置示例(使用S3):

  1. # values.yaml片段
  2. persistence:
  3. persistentVolumeClaim:
  4. storageClass: ""
  5. imageChartStorage:
  6. type: s3
  7. s3:
  8. region: us-west-2
  9. bucket: harbor-registry
  10. accesskey: AKIAXXXXXXXXXXXX
  11. secretkey: XXXXXXXXXXXXXXXXXXX

3.2 高可用架构设计

三节点部署方案

  1. 数据库:外置MySQL/PostgreSQL集群
  2. 缓存:Redis Sentinel模式
  3. 存储:共享文件系统(如CephFS)

关键配置调整:

  1. database:
  2. type: external
  3. external:
  4. host: mysql-cluster.example.com
  5. port: 3306
  6. username: harbor
  7. password: dbpassword
  8. cache:
  9. type: redis
  10. redis:
  11. host: redis-sentinel.example.com
  12. port: 26379

四、运维管理实践

4.1 日常维护命令集

  1. # 升级Harbor版本
  2. helm upgrade harbor bitnami/harbor -f values.yaml
  3. # 备份配置(不含镜像数据)
  4. kubectl get configmap -n harbor-system harbor-core -o yaml > core-config.yaml
  5. # 日志查看
  6. kubectl logs -f deploy/harbor-core -n harbor-system

4.2 监控告警方案

推荐指标

  • 存储使用率(kubernetes_persistentvolumeclaim_info
  • 请求延迟(harbor_core_request_duration_seconds
  • 认证失败率(harbor_auth_failure_count

Prometheus配置示例:

  1. # scrape_configs片段
  2. - job_name: 'harbor'
  3. metrics_path: '/metrics'
  4. static_configs:
  5. - targets: ['harbor-core.harbor-system.svc.cluster.local:8001']

五、常见问题解决方案

5.1 证书配置错误

现象x509: certificate signed by unknown authority

解决方案

  1. 创建自定义证书Secret:

    1. kubectl create secret tls harbor-tls \
    2. --cert=tls.crt \
    3. --key=tls.key \
    4. -n harbor-system
  2. 修改Ingress配置:

    1. tls:
    2. - secretName: harbor-tls
    3. hosts:
    4. - harbor.example.com

5.2 存储性能瓶颈

诊断方法

  1. # 查看PVC状态
  2. kubectl describe pvc data-harbor-core-0 -n harbor-system
  3. # 测试IOPS
  4. kubectl run -it --rm test-io --image=busybox --restart=Never \
  5. -- dd if=/dev/zero of=/testfile bs=1M count=1024

优化建议

  • 调整storageClassprovisioner参数
  • 启用fsGroup提升文件系统权限
  • 对大文件存储启用sharding功能

六、最佳实践建议

  1. 版本管理策略

    • 季度性升级(避开业务高峰期)
    • 保留两个历史版本回滚点
  2. 镜像清理机制

    1. # 设置垃圾回收策略(CronJob示例)
    2. apiVersion: batch/v1beta1
    3. kind: CronJob
    4. metadata:
    5. name: harbor-gc
    6. spec:
    7. schedule: "0 2 * * *"
    8. jobTemplate:
    9. spec:
    10. template:
    11. spec:
    12. containers:
    13. - name: gc
    14. image: goharbor/harbor-garbage-collection:v2.4.0
    15. command: ["/harbor_garbage_collection"]
    16. args: ["--dry-run=false"]
  3. 安全加固方案

    • 启用OTP双因素认证
    • 配置项目级访问控制
    • 定期审计API调用日志

通过以上系统化的部署方案,可在K8s环境中构建出具备高可用性、安全性和可扩展性的Harbor镜像仓库,为企业的容器化转型提供坚实的基础设施支撑。实际部署时建议先在测试环境验证配置,再逐步推广到生产环境。