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)
典型架构示例:
[开发终端] → [K8s Ingress] → [Harbor Service] → [NFS Storage]↓[K8s Worker Nodes]
1.2 节点资源分配
建议按以下规格配置Harbor节点:
- CPU:4核以上(支持并发镜像操作)
- 内存:8GB+(数据库与缓存需求)
- 磁盘:200GB+(根据镜像存储量调整)
二、Harbor私有仓库搭建
2.1 安装前配置
安装依赖组件:
yum install -y docker-ce docker-ce-cli containerd.iosystemctl enable --now docker
配置HTTPS证书(以自签名证书为例):
mkdir -p /data/cert/openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /data/cert/harbor.key -out /data/cert/harbor.crt \-subj "/CN=harbor.example.com"
2.2 Harbor部署流程
下载安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgztar xvf harbor-offline-installer-v2.5.3.tgzcd harbor
修改配置文件(harbor.yml):
hostname: harbor.example.comhttps:certificate: /data/cert/harbor.crtprivate_key: /data/cert/harbor.keydatabase:password: HarborDB@123harbor_admin_password: Admin@Harbor123
执行安装:
./install.sh --with-trivy --with-chartmuseum
2.3 验证部署结果
curl -k https://harbor.example.com/api/v2.0/health# 应返回:{"status":"healthy"}
三、Docker镜像管理实践
3.1 镜像构建规范
多阶段构建示例(SpringBoot应用):
# 构建阶段FROM maven:3.8.4-jdk-11 AS buildWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn package -DskipTests# 运行阶段FROM openjdk:11-jre-slimWORKDIR /appCOPY --from=build /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","app.jar"]
镜像标签策略:
docker tag springboot-app:latest harbor.example.com/library/springboot-app:v1.0.0
3.2 镜像推送与拉取
登录Harbor:
docker login harbor.example.com
推送镜像:
docker push harbor.example.com/library/springboot-app:v1.0.0
K8s节点配置:
mkdir -p /etc/docker/certs.d/harbor.example.comscp harbor.crt /etc/docker/certs.d/harbor.example.com/ca.crtsystemctl restart docker
四、K8s部署SpringBoot应用
4.1 部署配置文件
Deployment示例:
apiVersion: apps/v1kind: Deploymentmetadata:name: springboot-appspec:replicas: 3selector:matchLabels:app: springboottemplate:metadata:labels:app: springbootspec:containers:- name: springbootimage: harbor.example.com/library/springboot-app:v1.0.0ports:- containerPort: 8080resources:requests:cpu: "500m"memory: "512Mi"limits:cpu: "1000m"memory: "1Gi"
Service配置:
apiVersion: v1kind: Servicemetadata:name: springboot-servicespec:selector:app: springbootports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
4.2 Ingress路由配置
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: springboot-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /spec:rules:- host: app.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: springboot-serviceport:number: 80tls:- hosts:- app.example.comsecretName: tls-secret
五、高级配置与优化
5.1 Harbor高级功能
项目权限管理:
- 创建独立项目(如
dev-team) - 设置开发者角色为
Guest(仅拉取权限) - 设置运维角色为
Developer(推送权限)
- 创建独立项目(如
镜像复制策略:
# 在Harbor的UI中配置复制规则source_registry: "harbor.example.com"destination_registry: "harbor-backup.example.com"trigger_method: "immediate"
5.2 K8s资源优化
HPA自动扩缩:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: springboot-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: springboot-appminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
Pod反亲和性配置:
affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- springboottopologyKey: "kubernetes.io/hostname"
六、运维监控体系
6.1 日志收集方案
- Filebeat配置示例:
apiVersion: v1kind: ConfigMapmetadata:name: filebeat-configdata:filebeat.yml: |filebeat.inputs:- type: containerpaths:- /var/log/containers/*.logprocessors:- add_kubernetes_metadata:in_cluster: trueoutput.elasticsearch:hosts: ["elasticsearch:9200"]
6.2 监控告警规则
- Prometheus告警规则:
groups:- name: springboot.rulesrules:- alert: HighErrorRateexpr: rate(http_server_requests_seconds_count{status="5xx"}[1m]) > 0.1for: 5mlabels:severity: criticalannotations:summary: "High 5xx error rate on {{ $labels.instance }}"
七、故障排查指南
7.1 常见问题处理
镜像拉取失败:
- 检查节点证书配置:
ls /etc/docker/certs.d/ - 验证网络连通性:
curl -v https://harbor.example.com/v2/_catalog
- 检查节点证书配置:
Pod启动异常:
- 查看事件日志:
kubectl describe pod <pod-name> - 检查镜像是否存在:
kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'
- 查看事件日志:
7.2 性能优化建议
镜像优化:
- 使用
docker-slim工具减小镜像体积 - 合并多层
RUN指令减少镜像层数
- 使用
启动优化:
- 在SpringBoot中配置
spring.main.lazy-initialization=true - 使用
initContainers预加载依赖
- 在SpringBoot中配置
本指南完整覆盖了从环境搭建到生产运维的全流程,通过标准化操作流程和配置模板,可帮助团队快速构建企业级私有镜像仓库与K8s应用部署体系。实际实施时建议结合具体业务场景进行参数调优,并建立完善的CI/CD流水线实现自动化部署。

发表评论
登录后可评论,请前往 登录 或 注册