K8s 部署:Spring Boot 容器化实践指南

一、容器化部署的核心价值

传统部署方式面临环境不一致、配置管理复杂等痛点,而容器化技术通过标准化应用运行环境,实现开发、测试、生产环境的一致性。Spring Boot 应用采用容器化部署后,可显著提升部署效率与系统稳定性,并支持快速扩展与故障恢复4。

二、K8s 部署全流程实践

1. 项目准备与容器化

  • Dockerfile 编写‌:使用精简基础镜像(如 openjdk:11-jdk-slim),将 JAR 包复制到容器并暴露端口。示例:
    
    

    dockerfileCopy Code

    FROM openjdk:11-jdk-slim WORKDIR /app COPY target/my-spring-boot-app.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"]

  • 镜像构建与推送‌:通过 docker build -t your-registry/app:v1.0.0 . 构建镜像,并推送到私有仓库2。

2. K8s 资源配置

  • Deployment 配置‌:定义副本数、镜像标签及端口映射。示例:
    
    

    yamlCopy Code

    apiVersion: apps/v1 kind: Deployment metadata: name: spring-boot-app spec: replicas: 3 selector: matchLabels: app: spring-boot-app template: metadata: labels: app: spring-boot-app spec: containers: - name: spring-boot-app image: your-registry/app:v1.0.0 ports: - containerPort: 8080

  • 服务暴露‌:通过 Service 类型为应用提供集群内或外部访问入口。

3. 配置与敏感信息管理

  • ConfigMap‌:存储非敏感配置(如 application.yml),通过卷挂载到容器:
    
    

    yamlCopy Code

    apiVersion: v1 kind: ConfigMap metadata: name: spring-config data: application.yml: | spring: profiles: production

  • Secret‌:加密管理数据库密码等敏感信息,避免硬编码56。

三、最佳实践与优化建议

  1. 资源限制‌:在 Deployment 中设置 resources.limits 和 requests,防止资源争用。
  2. 健康检查‌:配置 livenessProbe 和 readinessProbe,实现自动故障转移。
  3. 日志与监控‌:集成 Prometheus 和 Grafana,实时监控应用指标。
  4. 滚动更新‌:通过 kubectl set image 实现零停机更新。

四、常见问题与解决方案

  • 镜像拉取失败‌:检查私有仓库认证或使用 imagePullSecrets
  • 端口冲突‌:确认 Service 与 Deployment 的端口映射一致。
  • JVM 参数优化‌:通过 JAVA_OPTS 环境变量调整堆内存大小。

提示:生产环境建议结合 CI/CD 工具(如 Jenkins)实现自动化部署流水线,进一步提升效率与可靠性。

更多推荐