如何使用 fabric8 maven 插件使用环境变量中的值指定 spring.profiles.active 参数?

How can I specify the spring.profiles.active param with a value from an environment variable using fabric8 maven plugin?

我有一个定义环境参数的 K8s 配置映射。

使用 src/fabric8/deployment.yml:

中的摘录将该值作为环境变量安装在部署 yaml 上
spec:
  template:
    spec:
      containers:
      - env:
        - name: "ENVIRONMENT"
          valueFrom:
              configMapKeyRef:
                  name: global-configmap
                  key: ENVIRONMENT

我想使用那个 ENVIRONMENT 环境变量来配置 spring.active.profiles 属性。

fabric8 maven 插件是否以某种方式支持它?如果没有,您能否提出一些解决方法?

首先要注意的是,注入到 Pod 中的环境变量的名称与 configmap 中使用的密钥不必匹配。所以你可以这样做:

      - env:
        - name: SPRING_PROFILES_ACTIVE
          valueFrom:
              configMapKeyRef:
                  name: global-configmap
                  key: ENVIRONMENT

如果 ENVIRONMENT 是名为 global-configmap 的配置映射中的键。如果不是那么自然你想使用与你正在寻找的值相匹配的任何键(如果可能的话 spring.profiles.active 可能更清楚但是从你的描述听起来你有一个名为 global- 的现有配置映射带有名为 ENVIRONMENT 的密钥的 configmap)。我希望您需要调用环境变量(名称部分)SPRING_PROFILES_ACTIVE,因为这将通过 relaxed binding.

匹配 属性 spring.profiles.active

或者,对于 fabric8 maven 插件,您还有其他选择,您似乎正在使用它进行生成。你可以简单地 set an environment variable directly or set the spring.profiles.active value directly in your property file, which you could mount as a configmap.

另一种有效的方法是在 JAVA_OPTIONS 参数中明确定义它:

spec:
  template:
    spec:
      containers:
      - env:
        - name: JAVA_OPTIONS
          value: "-Dspring.profiles.active=${ENVIRONMENT}"
        - name: ENVIRONMENT
          valueFrom:
              configMapKeyRef:
                  name: global-configmap
                  key: ENVIRONMENT