如何在Google Kubernetes Engine上部署需JDK环境的Spring Boot应用
在Google Kubernetes Engine(GKE)部署依赖JDK环境的Optaplanner Spring Boot应用方案
核心思路
默认Java容器镜像大多仅预装JRE,不支持Optaplanner运行时动态编译Java类的需求,只要将应用容器的基础镜像替换为完整JDK版本,再按常规流程部署到GKE即可。
具体操作步骤
- 调整容器镜像的基础镜像配置
编辑应用的Dockerfile,将原有的JRE基础镜像替换为对应版本的JDK基础镜像即可,示例如下:
原JRE版本Dockerfile(不满足需求):
修改后的JDK版本Dockerfile:FROM eclipse-temurin:17-jre-jammy ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
注意选择的JDK版本需要和你项目编译时使用的Java版本一致,避免出现兼容性问题# 替换为同版本的完整JDK基础镜像,可根据自身项目的Java版本选择对应JDK镜像 FROM eclipse-temurin:17-jdk-jammy ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] - 本地验证镜像功能
本地构建镜像后启动测试,确认Optaplanner的动态编译逻辑可以正常运行,避免部署到GKE后才出现环境异常。 - 推送镜像到GKE可用的镜像仓库
将验证通过的镜像打标签后推送到Google Container Registry(GCR)或Artifact Registry,命令示例:# 给本地镜像打仓库标签 docker tag 本地镜像名 gcr.io/你的GCP项目ID/自定义镜像名:版本号 # 推送镜像到GCR docker push gcr.io/你的GCP项目ID/自定义镜像名:版本号 - 编写GKE部署配置
编写Deployment的YAML配置文件,将镜像字段指定为上一步推送的JDK版应用镜像,示例配置:apiVersion: apps/v1 kind: Deployment metadata: name: optaplanner-springboot-app spec: replicas: 1 selector: matchLabels: app: optaplanner-app template: metadata: labels: app: optaplanner-app spec: containers: - name: app image: gcr.io/你的GCP项目ID/自定义镜像名:版本号 ports: - containerPort: 8080 - 部署到GKE集群
连接到目标GKE集群后执行部署命令即可:kubectl apply -f 部署配置文件名.yaml
可选优化
如果希望缩小JDK镜像的体积,可以使用jlink工具裁剪自定义JDK运行时,仅保留项目所需的JDK模块,在保证动态编译能力可用的前提下降低镜像体积。
内容的提问来源于stack exchange,提问作者Mahouk
相关产品推荐
相关产品推荐

