logo

K8s环境下Docker+Harbor私有仓库与SpringBoot部署全攻略

作者:渣渣辉2025.10.10 18:49浏览量:1

简介:本文详细介绍在K8s集群中搭建Docker与Harbor私有镜像仓库,并部署SpringBoot应用的完整流程,涵盖环境准备、Harbor安装、Docker镜像管理、K8s部署及配置优化等关键步骤。

一、环境准备与基础架构设计

1.1 集群环境要求

在K8s环境下部署私有镜像仓库,首先需要确认集群环境满足以下条件:

  • K8s版本要求:建议使用1.18+版本,支持Ingress TLS配置与StatefulSet管理
  • 存储方案选择:推荐使用NFS或云存储(如AWS EBS、阿里云NAS)作为Harbor持久化存储
  • 网络拓扑规划:确保Worker节点可访问Harbor服务端口(默认80/443/8080)

典型架构示例:

  1. [开发终端] [K8s Ingress] [Harbor Service] [NFS Storage]
  2. [K8s Worker Nodes]

1.2 节点资源分配

建议按以下规格配置Harbor节点:

  • CPU:4核以上(支持并发镜像操作)
  • 内存:8GB+(数据库与缓存需求)
  • 磁盘:200GB+(根据镜像存储量调整)

二、Harbor私有仓库搭建

2.1 安装前配置

  1. 安装依赖组件

    1. yum install -y docker-ce docker-ce-cli containerd.io
    2. systemctl enable --now docker
  2. 配置HTTPS证书(以自签名证书为例):

    1. mkdir -p /data/cert/
    2. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    3. -keyout /data/cert/harbor.key -out /data/cert/harbor.crt \
    4. -subj "/CN=harbor.example.com"

2.2 Harbor部署流程

  1. 下载安装包

    1. wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
    2. tar xvf harbor-offline-installer-v2.5.3.tgz
    3. cd harbor
  2. 修改配置文件(harbor.yml):

    1. hostname: harbor.example.com
    2. https:
    3. certificate: /data/cert/harbor.crt
    4. private_key: /data/cert/harbor.key
    5. database:
    6. password: HarborDB@123
    7. harbor_admin_password: Admin@Harbor123
  3. 执行安装

    1. ./install.sh --with-trivy --with-chartmuseum

2.3 验证部署结果

  1. curl -k https://harbor.example.com/api/v2.0/health
  2. # 应返回:{"status":"healthy"}

三、Docker镜像管理实践

3.1 镜像构建规范

  1. 多阶段构建示例(SpringBoot应用):

    1. # 构建阶段
    2. FROM maven:3.8.4-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"]
  2. 镜像标签策略

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

3.2 镜像推送与拉取

  1. 登录Harbor

    1. docker login harbor.example.com
  2. 推送镜像

    1. docker push harbor.example.com/library/springboot-app:v1.0.0
  3. K8s节点配置

    1. mkdir -p /etc/docker/certs.d/harbor.example.com
    2. scp harbor.crt /etc/docker/certs.d/harbor.example.com/ca.crt
    3. systemctl restart docker

四、K8s部署SpringBoot应用

4.1 部署配置文件

  1. Deployment示例

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: springboot-app
    5. spec:
    6. replicas: 3
    7. selector:
    8. matchLabels:
    9. app: springboot
    10. template:
    11. metadata:
    12. labels:
    13. app: springboot
    14. spec:
    15. containers:
    16. - name: springboot
    17. image: harbor.example.com/library/springboot-app:v1.0.0
    18. ports:
    19. - containerPort: 8080
    20. resources:
    21. requests:
    22. cpu: "500m"
    23. memory: "512Mi"
    24. limits:
    25. cpu: "1000m"
    26. memory: "1Gi"
  2. Service配置

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

4.2 Ingress路由配置

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

五、高级配置与优化

5.1 Harbor高级功能

  1. 项目权限管理

    • 创建独立项目(如dev-team
    • 设置开发者角色为Guest(仅拉取权限)
    • 设置运维角色为Developer(推送权限)
  2. 镜像复制策略

    1. # 在Harbor的UI中配置复制规则
    2. source_registry: "harbor.example.com"
    3. destination_registry: "harbor-backup.example.com"
    4. trigger_method: "immediate"

5.2 K8s资源优化

  1. HPA自动扩缩

    1. apiVersion: autoscaling/v2
    2. kind: HorizontalPodAutoscaler
    3. metadata:
    4. name: springboot-hpa
    5. spec:
    6. scaleTargetRef:
    7. apiVersion: apps/v1
    8. kind: Deployment
    9. name: springboot-app
    10. minReplicas: 2
    11. maxReplicas: 10
    12. metrics:
    13. - type: Resource
    14. resource:
    15. name: cpu
    16. target:
    17. type: Utilization
    18. averageUtilization: 70
  2. Pod反亲和性配置

    1. affinity:
    2. podAntiAffinity:
    3. preferredDuringSchedulingIgnoredDuringExecution:
    4. - weight: 100
    5. podAffinityTerm:
    6. labelSelector:
    7. matchExpressions:
    8. - key: app
    9. operator: In
    10. values:
    11. - springboot
    12. topologyKey: "kubernetes.io/hostname"

六、运维监控体系

6.1 日志收集方案

  1. Filebeat配置示例
    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: filebeat-config
    5. data:
    6. filebeat.yml: |
    7. filebeat.inputs:
    8. - type: container
    9. paths:
    10. - /var/log/containers/*.log
    11. processors:
    12. - add_kubernetes_metadata:
    13. in_cluster: true
    14. output.elasticsearch:
    15. hosts: ["elasticsearch:9200"]

6.2 监控告警规则

  1. Prometheus告警规则
    1. groups:
    2. - name: springboot.rules
    3. rules:
    4. - alert: HighErrorRate
    5. expr: rate(http_server_requests_seconds_count{status="5xx"}[1m]) > 0.1
    6. for: 5m
    7. labels:
    8. severity: critical
    9. annotations:
    10. summary: "High 5xx error rate on {{ $labels.instance }}"

七、故障排查指南

7.1 常见问题处理

  1. 镜像拉取失败

    • 检查节点证书配置:ls /etc/docker/certs.d/
    • 验证网络连通性:curl -v https://harbor.example.com/v2/_catalog
  2. Pod启动异常

    • 查看事件日志:kubectl describe pod <pod-name>
    • 检查镜像是否存在:kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'

7.2 性能优化建议

  1. 镜像优化

    • 使用docker-slim工具减小镜像体积
    • 合并多层RUN指令减少镜像层数
  2. 启动优化

    • 在SpringBoot中配置spring.main.lazy-initialization=true
    • 使用initContainers预加载依赖

本指南完整覆盖了从环境搭建到生产运维的全流程,通过标准化操作流程和配置模板,可帮助团队快速构建企业级私有镜像仓库与K8s应用部署体系。实际实施时建议结合具体业务场景进行参数调优,并建立完善的CI/CD流水线实现自动化部署。

相关文章推荐

发表评论

活动