我有以下变量JVM_ARGS
base-values.yaml
app:
env:
PORT: 8080
...
JVM_ARGS: >
-Dspring.profiles.active=$(SPRING_PROFILE),test
-Dspring.config.additional-location=/shared
-javaagent:/app/dd-java-agent.jar
service-x-values.yaml
app:
env:
SPRING_PROFILE: my-local-profile
值文件的评估顺序如下:
我需要根据SPRING_PROFILE对JVM_ARGS进行评估,到目前为止,我无法使其正常工作。 做这样的事情的最好方法是什么?
我是掌舵人和Kubernetes的新手,感觉自己缺少一些基本知识。
我尝试了什么: 定义JVM_ARGS并用双引号引起来,而没有双引号。
UPD: 问题是我有一些由其他开发人员构建的自定义Helm图表,而我对这些图表的工作原理一无所知。我只处理应用于图表模板的值文件。
我希望通过掌舵解决该财产
-Dspring.profiles.active=my-local-profile,vault
最后,我决定看看Spring Boot本身是如何解析属性的,并提出了以下建议:
-Dspring.profiles.active=${SPRING_PROFILE},vault
由于spring.profiles.active是常规属性,因此可以在其中使用env变量,Spring会在对我有用的运行时解析该属性。
答案 0 :(得分:2)
$(SPRING_PROFILE)
被视为文字字符串,没有被屏蔽。如果您确实需要从Linux环境变量中获取Spring Profiles,则可以通过在调用helm install之类的方法时设置Helm变量来实现(尽管使用--set被认为是不好的做法):
helm install --set app.env.spring_profile=$SPRING_PROFILE ...
尽管app.env.spring_profile
甚至无法在base-values.yaml
内部进行评估。您需要将其直接移到您的模板文件中,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
...
template:
...
spec:
containers:
- name: my-app
...
env:
SPRING_PROFILES_ACTIVE: {{- .Values.app.env.spring_profile }},test