K8s 部署 Java 应用指南
把 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
preStophook——先从 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 应用的关键——资源限制 + 健康检查 + 优雅停机
- 推荐的配置模板
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!