使用 Spring Boot 应用部署到 Kubernetes 的实践指南
温馨提示:
本文最后更新于 2025年07月16日,已超过 10 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在现代微服务架构中,Spring Boot 与 Kubernetes(K8s)已成为后台服务部署的黄金组合。本文将结合实际案例和示意图,手把手带你完成从容器化到在 K8s 集群中上线 Spring Boot 应用的全过程。
前置条件与环境准备
- 本地环境:已安装 Docker、kubectl、Helm(可选)
- 集群环境:至少一个可用的 K8s 集群(可用 Minikube、Kind、或云厂商托管)
- 源码要求:一个可运行的 Spring Boot 项目,已添加
spring-boot-maven-plugin
小贴士:建议使用 Spring Boot 3.x 及以上版本,确保原生镜像支持与安全性。
步骤一:Docker 化 Spring Boot 应用
编写 Dockerfile(放在项目根目录)
FROM eclipse-temurin:17-jdk-jammy VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像
mvn clean package -DskipTests docker build -t your-registry/springboot-k8s-demo:1.0.0 . docker push your-registry/springboot-k8s-demo:1.0.0
示意图:
步骤二:编写 Kubernetes 资源清单
Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: springboot-demo spec: replicas: 3 selector: matchLabels: app: springboot template: metadata: labels: app: springboot spec: containers: - name: springboot image: your-registry/springboot-k8s-demo:1.0.0 ports: - containerPort: 8080 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 10 periodSeconds: 5
Service
apiVersion: v1 kind: Service metadata: name: springboot-demo-svc spec: type: LoadBalancer selector: app: springboot ports: - port: 80 targetPort: 8080
步骤三:部署到 Kubernetes 集群
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
验证:
kubectl get pods
kubectl get svc
示意图:
步骤四:配置滚动更新与回滚策略
滚动更新:在
Deployment.spec.strategy
中配置strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
回滚:
kubectl rollout undo deployment/springboot-demo
步骤五:监控与日志
- Prometheus + Grafana:采集 Pod 指标、展示面板
- ELK/EFK:集中式日志收集与查询
- Spring Boot Actuator:暴露健康检查与指标端点
# 示例:Prometheus 服务发现 Annotation
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
示意图:
结语与最佳实践
- 镜像优化:使用多阶段构建、瘦身基础镜像
- 配置管理:ConfigMap / Secret 维护外部配置
- 安全加固:开启 Pod Security Policy、NetworkPolicy
- 自动化流水线:结合 GitLab CI、Jenkins X 或 Argo CD 实现全流程自动化
正文到此结束
- 本文标签: k8s cicd Spring Boot
- 本文链接: https://code.itptg.com/article/26
- 版权声明: 本文由老魏原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权