使用 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)
。这不能用于您尝试使用的环境变量由图像中的启动代码填充的情况。
我想为 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)
。这不能用于您尝试使用的环境变量由图像中的启动代码填充的情况。