掌舵,在values.yaml

时间:2020-09-30 17:37:58

标签: spring-boot kubernetes kubernetes-helm

我有以下变量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

值文件的评估顺序如下:

  • base-values.yaml
  • service-x-values.yaml

我需要根据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会在对我有用的运行时解析该属性。

1 个答案:

答案 0 :(得分:2)

  1. 我有点困惑:您是在指环境变量(如问题标题中那样)还是在掌舵值上?
  2. Helm不评估值文件中的环境变量。 $(SPRING_PROFILE)被视为文字字符串,没有被屏蔽。
  3. 实际上,Helm不评估值文件中的任何内容。它们是数据源,而不是模板。占位符(实际上是GO templates)仅在模板文件中求值。
  4. 由于第3点,您不能从另一个引用一个helm变量。

如果您确实需要从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