我想为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)
答案 0 :(得分:2)
尝试使用:
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)
。如果您尝试使用的环境变量由图像中的启动代码填充,则无法使用此项。