首页 > 解决方案 > 定义环境变量引用容器的变量环境 [kubernetes]

问题描述

我有一个用于 Spring Boot 应用程序的 K8s 部署我想创建一个.hprof带有 pod 名称 ($hostname)的转储文件

我的JAVA_OPTIONS参数是一个变量环境我想引用父级中的另一个变量JAVA_Options

containers:
- env:
  - name: SPRING_PROFILES_ACTIVE
    value: prod,swagger
  - name: JAVA_OPTS
    value: ' -XX:MaxRAMPercentage=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jvm-data/$HOSTNAME.hprof'

我期望的是有一个包含主机名的变量:

$ echo $JAVA_OPTS -XX:MaxRAMPercentage=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jvm-data/myPodNameStaging.hprof

结果是: $HOSTNAME.hprof设置为字符串。

我也尝试了很多组合$(HOSTNAME) ${HOSTNAME}。我总是得到变量的名称而不是内容值。

我的问题是:如何参考$HOSTNAME

标签: linuxmavenkubernetescontainerskubernetes-pod

解决方案


这是不可能的。您将需要以其他方式定义这些或以其他方式自行处理插值。一个常见的选项是这样的:

command:
- sh
- -c
- |
  JAVA_OPTS="asdfasdf" java -whatever

但这确实需要完全覆盖来自底层容器的命令,这很烦人。也就是说,您可以在卷路径中进行有限的替换,因此可能会在该级别处理它,而不是针对这种特殊情况。


推荐阅读