原创

使用 Spring Boot 应用部署到 Kubernetes 的实践指南

温馨提示:
本文最后更新于 2025年07月16日,已超过 10 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

在现代微服务架构中,Spring Boot 与 Kubernetes(K8s)已成为后台服务部署的黄金组合。本文将结合实际案例和示意图,手把手带你完成从容器化到在 K8s 集群中上线 Spring Boot 应用的全过程。

file

前置条件与环境准备

  • 本地环境:已安装 Docker、kubectl、Helm(可选)
  • 集群环境:至少一个可用的 K8s 集群(可用 Minikube、Kind、或云厂商托管)
  • 源码要求:一个可运行的 Spring Boot 项目,已添加 spring-boot-maven-plugin

小贴士:建议使用 Spring Boot 3.x 及以上版本,确保原生镜像支持与安全性。


步骤一:Docker 化 Spring Boot 应用

  1. 编写 Dockerfile(放在项目根目录)

    FROM eclipse-temurin:17-jdk-jammy
    VOLUME /tmp
    COPY target/*.jar app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  2. 构建镜像

    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
    

示意图:
Docker 构建流程


步骤二:编写 Kubernetes 资源清单

  1. 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
    
  2. 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

示意图:
K8s 部署拓扑


步骤四:配置滚动更新与回滚策略

  • 滚动更新:在 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 实现全流程自动化

正文到此结束
本文目录