Spring Boot微服务部署到Kubernetes的核心是适配云原生环境:一要构建轻量安全的分层JAR镜像,二要用声明式YAML定义Deployment、Service及健康探针,三需结合Helm管理多环境、HPA实现弹性伸缩,并分离配置与敏感信息。

Java 开发者把 Spring Boot 微服务部署到 Kubernetes,核心不是“怎么写代码”,而是“怎么让应用适配云原生运行环境”。关键在于三件事:把应用打包成轻量、安全的容器镜像;用声明式 YAML 精确描述它该怎么跑、怎么被访问、怎么健康检查;再配上自动扩缩容和配置分离,才算真正落地。下面直接说实操要点。
构建适合 K8s 的 Docker 镜像
别用原始的 java -jar 方式打镜像。Spring Boot 3.x 默认支持分层 JAR(Layered JAR),配合多阶段构建,能大幅减小镜像体积、提升构建和拉取效率。
- 在
pom.xml中启用分层:
- Dockerfile 推荐用官方 Buildpacks 或多阶段构建,例如:
FROM maven:3.9-openjdk-17 AS build
COPY . /workspace/
RUN --mount=type=cache,target=/root/.m2 mvn -f /workspace/pom.xml clean package -DskipTests
FROM paketobuildpacks/run:jre17
WORKDIR /app
COPY --from=build /workspace/target/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
- 构建并推送镜像:
docker build -t my-registry/myapp:v1.2.0 . && docker push my-registry/myapp:v1.2.0
编写最小可用的 Deployment + Service
Deployment 控制副本数、更新策略和健康探针;Service 提供稳定访问入口。两者缺一不可。
- 必须配置 Liveness 和 Readiness 探针,否则 K8s 无法判断应用是否真“活”着:
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 60
periodSeconds: 30
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 20
periodSeconds: 15
- 资源限制要设(
requests和limits),避免 Pod 被 OOMKilled 或抢占过多节点资源 - Service 类型按需选:
ClusterIP(内部调用)、NodePort(测试)、LoadBalancer(云环境生产)或配合 Ingress
用 Helm 管理多环境与版本
硬编码 YAML 在 dev/staging/prod 之间改来改去极易出错。Helm 把重复逻辑抽成模板,靠 values.yaml 控制差异。
- 一个 Chart 至少包含:
Chart.yaml(元信息)、values.yaml(参数)、templates/deployment.yaml(带{{ .Values.replicaCount }}这类变量) - 不同环境用不同 values 文件:
helm install myapp ./mychart -f values-prod.yaml - 升级和回滚极简单:
helm upgrade myapp ./mychart -f values-prod.yaml,出问题立刻helm rollback myapp 1
接入 HPA 实现自动弹性伸缩
HPA 不是“开了就灵”,它依赖指标采集。Spring Boot 默认暴露 Micrometer 指标,配合 Prometheus + kube-state-metrics 就能基于 CPU、内存甚至自定义业务指标(如 HTTP 请求数)扩缩。
- 最简 HPA 示例(按 CPU 使用率):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- 建议先从 CPU 触发开始,稳定后再叠加自定义指标(比如用 Prometheus Adapter 接入 QPS)
- 注意设置合理的
minReplicas,避免低峰期缩到 0 或 1 导致冷启动延迟
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











