使用 O/S Env Var 进行 OpenShift 部署环境配置

Use O/S Env Var for OpenShift Deployment Environment Configuration

我想为 OpenShift pod 提供一个环境变量,并在该变量中引用容器中定义的其他环境变量。

比如我在OpenShift中定义了一个名为JAVA_CMD_LINE的环境变量,设置为:

$HEAP_SETTING -Djavax.net.ssl.trustStore=/var/.keystore/cacerts -jar abc.jar

其中 $HEAP_SETTING 在容器启动时设置为 -XMX=1G。

在我的容器中,有一个如下所示的启动脚本:

java $JAVA_CMD_LINE

我期望的是容器运行,执行以下内容:

java -XMX=1G -Djavax.net.ssl.trustStore=/var/.keystore/cacerts -jar abc.jar

但我看到的是:

java '$HEAP_SETTING' -Djavax.net.ssl.trustStore=/var/.keystore/cacerts -jar abc.jar

如何提供变量?

更新:从 YML 文件添加详细信息。

spec:
  containers:
    - env:
        - name: OPENSHIFT_ENABLE_OAUTH
          value: 'true'
        - name: OPENSHIFT_ENABLE_REDIRECT_PROMPT
          value: 'true'
        - name: KUBERNETES_MASTER
          value: 'https://kubernetes.default:443'
        - name: KUBERNETES_TRUST_CERTIFICATES
          value: 'true'
        - name: JAVA_CMD_LINE
          value: >-
            -Djavax.net.ssl.trustStore=/var/cert/.keystore/cacerts
            -Dfile.encoding=UTF8
            $HEAP_SETTING

更新 2 - 我看到的错误:

+ exec java -Djavax.net.ssl.trustStore=/var/jenk-cert/.keystore/cacerts -Djavax.net.ssl.trustStorePassword=changeit -Dfile.encoding=UTF8 '$(HEAP_SETTING)' -Duser.home=/var/lib/jenkins -Djavamelody.application-name=JENKINS -jar /usr/lib/jenkins/jenkins.war
Picked up JAVA_TOOL_OPTIONS: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true
Error: Could not find or load main class $(HEAP_SETTING)

尝试使用:

spec:
  containers:
    - env:
        - name: OPENSHIFT_ENABLE_OAUTH
          value: 'true'
        - name: OPENSHIFT_ENABLE_REDIRECT_PROMPT
          value: 'true'
        - name: KUBERNETES_MASTER
          value: 'https://kubernetes.default:443'
        - name: KUBERNETES_TRUST_CERTIFICATES
          value: 'true'
        - name: JAVA_CMD_LINE
          value: >-
            -Djavax.net.ssl.trustStore=/var/cert/.keystore/cacerts
            -Dfile.encoding=UTF8
            $(HEAP_SETTING)

任何时候设置环境变量的值,如果需要从其他已经设置的环境变量中组合值,可以在值中使用$(<VARNAME>)

IOW,使用 $(HEAP_SETTING) 而不仅仅是 $HEAP_SETTING


更新 1

实际上这是行不通的。这是因为 HEAP_SETTING 不在您通过部署配置设置的环境变量集中,因此它将传递文字值 $(HEAP_SETTING)。这不能用于您尝试使用的环境变量由图像中的启动代码填充的情况。