将 java_opts 传递给 Kubernetes 中的 Spring Boot 应用程序
Posted
技术标签:
【中文标题】将 java_opts 传递给 Kubernetes 中的 Spring Boot 应用程序【英文标题】:Passing java_opts to spring boot applications in kubernetes 【发布时间】:2020-04-07 03:34:36 【问题描述】:目前,我们正在构建带有入口点的 Docker 映像,并将此映像传递给 Kubernetes 部署。
有没有办法将入口点直接动态传递给 Kubernetes,以便它启动 Spring Boot 应用程序?
在 Kubernetes 中直接传递这个入口点有哪些不同的方法?
### Runtime image ###
FROM openjdk:8-jre-alpine
#Set working dir
WORKDIR /test
# Copy the executable JAR
COPY /*.jar /test/
# Run the app
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Djsversion=1.0 -D<variable>=<service-1> -D<variable>=<service-2> -jar *.jar
【问题讨论】:
【参考方案1】:您可以在 k8s 部署清单中使用command
:
containers:
- name: mycontainer
env:
- name: NAME
value: VALUE
command: [ "java"]
args: ["-jar", "-D..."]
【讨论】:
感谢您的输入.. 我有 100 个具有相同参数的微服务,... 是否可以使用 configmaps... 因为我很容易在一个地方进行更改,.. . 否则我需要更改每个部署 yaml 文件中的参数值 您不能将命令放入配置映射中,但您可以将环境变量值放入配置映射中。 是的,我知道了...但是我如何将配置映射与命令一起传递...以便它将与容器一起启动 java 进程。能否请您提供一个示例 yaml 文件...我是新手,请帮助 看看这个:kubernetes.io/docs/tasks/configure-pod-container/… 您可以使用 configmaps 为 pod 设置环境变量,并构建映像以使用这些环境变量, 感谢@Burak 的帮助,非常感谢!!!创建了 configmap 并按以下命令传递了 env 变量: [ "/bin/bash", "-c", "$(SPECIAL_LEVEL_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: javaconfig key: JAVA_OPTS 现在我能够调用并启动 java 服务。谢谢【参考方案2】:您还可以将它与您希望传递到 docker 容器的其余环境变量一起包含在您的 kubernetes 部署 yaml 文件中:
- name: JAVA_OPTS
value: >-
-Djava.security.egd=file:/dev/./urandom
-Djsversion=1.0 -D<variable>=<service-1> -D<variable>=<service-2>
- name: SERVER_PORT
value: 8080
【讨论】:
【参考方案3】:您可以在 pod 的配置中将它们设置为环境变量
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: profile
value: "dev"
然后像这样在 Dockerfile 中使用它们
CMD ["sh", "-c", "java -jar -Dspring.profiles.active=$profile rest.war"]
【讨论】:
感谢 cmets...我不想将 CMD/Entrypoint 放在 Dockerfile 中...我希望通过 kubernetes 部署动态传递,这样我就不需要构建 docker 映像对于 JAVA_OPTS 参数的任何更改【参考方案4】:如果您使用的是 JAVA 版本 9+,请注意环境变量 JAVA_OPTS
的名称已更改。
更多内容在这个帖子https://***.com/a/52989562/8918153
【讨论】:
以上是关于将 java_opts 传递给 Kubernetes 中的 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
是否可以构建使用SSL / TLS JAVA_OPTS作为其SSLContext的Java 11 HttpClient?