把 Spring Boot 应用部署到 K8s,不是简单的 kubectl apply。资源配置、健康检查、优雅停机——每个细节都可能踩坑。

一、Deployment 核心配置

  • 1.1 replicas——副本数
  • 1.2 image + imagePullPolicy
  • 1.3 env——环境变量
  • 1.4 resources——requests 和 limits
  • 1.5 完整的 Deployment YAML

二、Service 配置

  • 2.1 ClusterIP——集群内部访问
  • 2.2 NodePort——对外暴露端口
  • 2.3 LoadBalancer——云环境负载均衡
  • 2.4 Service 与 Deployment 的关联——selector

三、健康检查探针

  • 3.1 Liveness Probe——容器是否存活
  • 3.2 Readiness Probe——容器是否就绪接收流量
  • 3.3 Startup Probe——启动探测(慢启动保护)
  • 3.4 Spring Boot Actuator 的 health endpoint 对接
  • 3.5 探针配置示例——initialDelaySeconds / periodSeconds

四、资源限制

  • 4.1 requests——调度时的最小保证
  • 4.2 limits——运行时的上限
  • 4.3 Java 应用的堆内存与容器内存的关系
  • 4.4 -XX:MaxRAMPercentage=75.0——容器感知的 JVM 参数

五、优雅停机

  • 5.1 terminationGracePeriodSeconds——优雅终止时间
  • 5.2 Spring Boot 的 graceful shutdown——server.shutdown=graceful
  • 5.3 preStop hook——先从 Service 摘除流量再关闭

六、ConfigMap 与 Secret

  • 6.1 ConfigMap——挂载配置文件
  • 6.2 Secret——存储敏感信息(数据库密码等)
  • 6.3 与 Spring Cloud Kubernetes 集成

七、日志与监控

  • 7.1 日志输出到标准输出——kubectl logs
  • 7.2 集中日志——ELK / Loki
  • 7.3 Prometheus 指标暴露

八、总结

  • K8s 部署 Java 应用的关键——资源限制 + 健康检查 + 优雅停机
  • 推荐的配置模板