如何在Kubernetes Deployment中传递JDK参数至Spring Boot应用
在Kubernetes Deployment中为JIB构建的Spring Boot应用传递JVM参数
由于你使用Google JIB构建Docker镜像,JIB默认会遵循JVM的标准环境变量规则,以下两种方式可以轻松传递-Djdk.httpclient.keepalive.timeout=120参数:
方法1:使用JAVA_TOOL_OPTIONS环境变量(推荐)
JVM启动时会自动读取该环境变量中的参数,适用于所有Java应用。直接在Deployment的env节点下添加配置:
containers: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 8080 protocol: TCP env: - name: SERVER_PORT value: "8080" - name: SPRING_PROFILES_ACTIVE value: {{ .Values.profile.active }} - name: TZ value: America/New_York # 新增JVM参数配置 - name: JAVA_TOOL_OPTIONS value: "-Djdk.httpclient.keepalive.timeout=120"
如果需要传递多个JVM参数,直接在value中拼接即可:
- name: JAVA_TOOL_OPTIONS value: "-Djdk.httpclient.keepalive.timeout=120 -Xmx512m -Xms256m"
方法2:使用Spring Boot专属的SPRING_OPTS环境变量
针对Spring Boot应用,也可以使用SPRING_OPTS,它会被Spring Boot的启动脚本自动加载:
containers: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 8080 protocol: TCP env: - name: SERVER_PORT value: "8080" - name: SPRING_PROFILES_ACTIVE value: {{ .Values.profile.active }} - name: TZ value: America/New_York # 新增Spring Boot启动参数 - name: SPRING_OPTS value: "-Djdk.httpclient.keepalive.timeout=120"
进阶:通过Helm Values实现可配置参数
如果希望参数支持动态配置,可先在values.yaml中添加:
jvm: extraOpts: "-Djdk.httpclient.keepalive.timeout=120"
再在Deployment.yaml中引用该配置:
env: - name: SERVER_PORT value: "8080" - name: SPRING_PROFILES_ACTIVE value: {{ .Values.profile.active }} - name: TZ value: America/New_York - name: JAVA_TOOL_OPTIONS value: {{ .Values.jvm.extraOpts }}
内容的提问来源于stack exchange,提问作者Kaustubh Hande
相关产品推荐
相关产品推荐

