K8s环境下Docker+Harbor私有仓库搭建与SpringBoot部署指南

一、环境准备与架构设计

1.1 基础设施要求

在K8s集群中部署私有镜像仓库需满足以下条件:

  • 至少3个节点的K8s集群(1.20+版本)
  • 每个节点需安装Docker(20.10+)或containerd运行时
  • 持久化存储方案(推荐使用NFS或云存储)
  • 负载均衡器(Nginx Ingress或MetalLB)

典型架构设计:

  1. [开发终端] [K8s Ingress] [Harbor服务]
  2. [K8s Worker节点] ←→ [Docker守护进程]

1.2 网络规划要点

  • 为Harbor服务分配独立DNS记录(如harbor.example.com)
  • 配置80/443端口转发
  • 建议使用自签名证书或Let’s Encrypt证书
  • 防火墙规则开放5000(HTTP)和8443(HTTPS)端口

二、Harbor私有仓库安装配置

2.1 安装前准备

  1. 下载Harbor安装包:

    1. wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
    2. tar xvf harbor-offline-installer-v2.7.0.tgz
  2. 配置持久化存储:

    1. # 在harbor.yml中配置
    2. storage:
    3. filesystem:
    4. rootdir: /data/harbor
    5. # 或使用云存储配置
    6. # s3:
    7. # accesskey: xxx
    8. # secretkey: xxx

2.2 核心配置参数

修改harbor.yml关键配置:

  1. hostname: harbor.example.com
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /path/to/cert.pem
  7. private_key: /path/to/key.pem
  8. harbor_admin_password: Harbor12345
  9. database:
  10. password: root123
  11. max_open_conns: 1000
  12. max_idle_conns: 50

2.3 安装执行流程

  1. # 安装依赖
  2. sudo apt install -y docker.io
  3. # 启动安装
  4. sudo ./install.sh --with-trivy --with-chartmuseum
  5. # 验证服务状态
  6. docker-compose ps

安装完成后应检查以下服务状态:

  • harbor-core
  • harbor-db
  • harbor-jobservice
  • harbor-portal
  • nginx

三、Docker镜像管理实践

3.1 镜像构建规范

推荐采用多阶段构建:

  1. # 基础镜像层
  2. FROM maven:3.8.6-jdk-11 AS build
  3. WORKDIR /app
  4. COPY pom.xml .
  5. RUN mvn dependency:go-offline
  6. COPY src ./src
  7. RUN mvn package -DskipTests
  8. # 运行时镜像层
  9. FROM openjdk:11-jre-slim
  10. WORKDIR /app
  11. COPY --from=build /app/target/*.jar app.jar
  12. EXPOSE 8080
  13. ENTRYPOINT ["java","-jar","app.jar"]

3.2 镜像推送流程

  1. 登录Harbor仓库:

    1. docker login harbor.example.com
  2. 标记镜像:

    1. docker tag springboot-app:latest harbor.example.com/library/springboot-app:v1.0.0
  3. 推送镜像:

    1. docker push harbor.example.com/library/springboot-app:v1.0.0

3.3 镜像安全策略

建议配置:

  • 镜像签名验证(使用cosign)
  • 漏洞扫描集成(Trivy)
  • 镜像保留策略(自动清理旧版本)
  • 镜像复制策略(多区域同步)

四、SpringBoot应用K8s部署

4.1 部署文件示例

  1. # deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: springboot-app
  6. spec:
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: springboot
  11. template:
  12. metadata:
  13. labels:
  14. app: springboot
  15. spec:
  16. containers:
  17. - name: springboot
  18. image: harbor.example.com/library/springboot-app:v1.0.0
  19. ports:
  20. - containerPort: 8080
  21. resources:
  22. requests:
  23. cpu: "500m"
  24. memory: "512Mi"
  25. limits:
  26. cpu: "1000m"
  27. memory: "1Gi"
  28. readinessProbe:
  29. httpGet:
  30. path: /actuator/health
  31. port: 8080
  32. initialDelaySeconds: 30
  33. periodSeconds: 10

4.2 服务暴露配置

  1. # service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: springboot-service
  6. spec:
  7. selector:
  8. app: springboot
  9. ports:
  10. - protocol: TCP
  11. port: 80
  12. targetPort: 8080
  13. type: ClusterIP

4.3 Ingress路由配置

  1. # ingress.yaml
  2. apiVersion: networking.k8s.io/v1
  3. kind: Ingress
  4. metadata:
  5. name: springboot-ingress
  6. annotations:
  7. nginx.ingress.kubernetes.io/rewrite-target: /
  8. spec:
  9. rules:
  10. - host: app.example.com
  11. http:
  12. paths:
  13. - path: /
  14. pathType: Prefix
  15. backend:
  16. service:
  17. name: springboot-service
  18. port:
  19. number: 80

五、运维管理最佳实践

5.1 监控告警配置

推荐配置:

  • Prometheus监控端点暴露
  • Grafana仪表盘(JVM指标、请求延迟)
  • Alertmanager告警规则(内存溢出、响应超时)

5.2 日志收集方案

采用EFK堆栈:

  1. # fluentd配置示例
  2. <match springboot.**>
  3. @type elasticsearch
  4. host "elasticsearch"
  5. port 9200
  6. index_name "springboot-${tag}"
  7. </match>

5.3 持续部署流程

建议的CI/CD流程:

  1. 代码提交触发构建
  2. 单元测试与代码扫描
  3. 镜像构建与漏洞扫描
  4. 自动推送至Harbor测试仓库
  5. 金丝雀发布到K8s测试环境
  6. 自动化测试验证
  7. 生产环境滚动更新

六、故障排查指南

6.1 常见问题处理

  1. 镜像拉取失败

    • 检查Docker镜像凭证
    • 验证网络连通性
    • 检查Harbor服务状态
  2. Pod启动失败

    • 查看容器日志:kubectl logs <pod-name>
    • 检查资源限制是否合理
    • 验证应用配置是否正确
  3. Ingress路由失效

    • 检查Ingress控制器状态
    • 验证DNS解析是否正确
    • 检查证书配置

6.2 性能优化建议

  1. 镜像优化:

    • 使用精简基础镜像
    • 合并运行层
    • 启用镜像压缩
  2. 部署优化:

    • 合理设置资源请求/限制
    • 启用HPA自动扩缩容
    • 配置Pod反亲和性
  3. 网络优化:

    • 启用TCP快速打开
    • 配置连接池
    • 优化服务网格配置

通过以上完整方案,开发者可以在K8s环境中构建起安全、高效的Docker+Harbor私有镜像仓库体系,并实现SpringBoot应用的自动化部署与运维管理。实际实施时建议先在测试环境验证完整流程,再逐步推广到生产环境。