一、环境准备与架构设计
1.1 基础设施要求
在K8s集群中部署私有镜像仓库需满足以下条件:
- 至少3个节点的K8s集群(1.20+版本)
- 每个节点需安装Docker(20.10+)或containerd运行时
- 持久化存储方案(推荐使用NFS或云存储)
- 负载均衡器(Nginx Ingress或MetalLB)
典型架构设计:
[开发终端] → [K8s Ingress] → [Harbor服务]↓[K8s Worker节点] ←→ [Docker守护进程]
1.2 网络规划要点
- 为Harbor服务分配独立DNS记录(如harbor.example.com)
- 配置80/443端口转发
- 建议使用自签名证书或Let’s Encrypt证书
- 防火墙规则开放5000(HTTP)和8443(HTTPS)端口
二、Harbor私有仓库安装配置
2.1 安装前准备
-
下载Harbor安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgztar xvf harbor-offline-installer-v2.7.0.tgz
-
配置持久化存储:
# 在harbor.yml中配置storage:filesystem:rootdir: /data/harbor# 或使用云存储配置# s3:# accesskey: xxx# secretkey: xxx
2.2 核心配置参数
修改harbor.yml关键配置:
hostname: harbor.example.comhttp:port: 80https:port: 443certificate: /path/to/cert.pemprivate_key: /path/to/key.pemharbor_admin_password: Harbor12345database:password: root123max_open_conns: 1000max_idle_conns: 50
2.3 安装执行流程
# 安装依赖sudo apt install -y docker.io# 启动安装sudo ./install.sh --with-trivy --with-chartmuseum# 验证服务状态docker-compose ps
安装完成后应检查以下服务状态:
- harbor-core
- harbor-db
- harbor-jobservice
- harbor-portal
- nginx
三、Docker镜像管理实践
3.1 镜像构建规范
推荐采用多阶段构建:
# 基础镜像层FROM maven:3.8.6-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"]
3.2 镜像推送流程
-
登录Harbor仓库:
docker login harbor.example.com
-
标记镜像:
docker tag springboot-app:latest harbor.example.com/library/springboot-app:v1.0.0
-
推送镜像:
docker push harbor.example.com/library/springboot-app:v1.0.0
3.3 镜像安全策略
建议配置:
- 镜像签名验证(使用cosign)
- 漏洞扫描集成(Trivy)
- 镜像保留策略(自动清理旧版本)
- 镜像复制策略(多区域同步)
四、SpringBoot应用K8s部署
4.1 部署文件示例
# deployment.yamlapiVersion: 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"readinessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10
4.2 服务暴露配置
# service.yamlapiVersion: v1kind: Servicemetadata:name: springboot-servicespec:selector:app: springbootports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
4.3 Ingress路由配置
# ingress.yamlapiVersion: 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: 80
五、运维管理最佳实践
5.1 监控告警配置
推荐配置:
- Prometheus监控端点暴露
- Grafana仪表盘(JVM指标、请求延迟)
- Alertmanager告警规则(内存溢出、响应超时)
5.2 日志收集方案
采用EFK堆栈:
# fluentd配置示例<match springboot.**>@type elasticsearchhost "elasticsearch"port 9200index_name "springboot-${tag}"</match>
5.3 持续部署流程
建议的CI/CD流程:
- 代码提交触发构建
- 单元测试与代码扫描
- 镜像构建与漏洞扫描
- 自动推送至Harbor测试仓库
- 金丝雀发布到K8s测试环境
- 自动化测试验证
- 生产环境滚动更新
六、故障排查指南
6.1 常见问题处理
-
镜像拉取失败:
- 检查Docker镜像凭证
- 验证网络连通性
- 检查Harbor服务状态
-
Pod启动失败:
- 查看容器日志:
kubectl logs <pod-name> - 检查资源限制是否合理
- 验证应用配置是否正确
- 查看容器日志:
-
Ingress路由失效:
- 检查Ingress控制器状态
- 验证DNS解析是否正确
- 检查证书配置
6.2 性能优化建议
-
镜像优化:
- 使用精简基础镜像
- 合并运行层
- 启用镜像压缩
-
部署优化:
- 合理设置资源请求/限制
- 启用HPA自动扩缩容
- 配置Pod反亲和性
-
网络优化:
- 启用TCP快速打开
- 配置连接池
- 优化服务网格配置
通过以上完整方案,开发者可以在K8s环境中构建起安全、高效的Docker+Harbor私有镜像仓库体系,并实现SpringBoot应用的自动化部署与运维管理。实际实施时建议先在测试环境验证完整流程,再逐步推广到生产环境。