Kubernetes:如何从另一个环境变量中引用一个环境变量?

Abh*_*kar 12 kubernetes

我有一个Deployment使用Downward API公开POD ID 的对象.这很好.但是,我想设置另一个env变量,日志路径,参考POD ID.但是,将该变量值设置/var/log/mycompany/${POD_ID}/logs为不起作用,则不会在容器中创建任何日志.我可以使入口点脚本或应用程序知道POD ID,并建立日志路径,但我宁愿不这样做.

mda*_*iel 25

使用正确的语法$(FOO),如v1.EnvVar value:文档中所述 ; 您使用的语法是"shell"语法,这不是kubernetes插入变量的方式.所以:

containers:
- env:
  - name: POD_ID
    valueFrom: # etc etc
  - name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs
Run Code Online (Sandbox Code Playgroud)

另请注意,如文档中所述,必须在引用它的变量之前定义要扩展的变量.

  • [“这就是标准的好处:有很多可供选择”](https://en.wikiquote.org/wiki/Andrew_S._Tanenbaum) (4认同)
  • 谢谢.为什么要保持一致,当你可以做一些新的东西只是为了让人迷惑. (3认同)

Jon*_*nch 9

我只想补充这个问题,这是我们前几天遇到的一个警告。根据文档

变量引用 $(VAR_NAME) 使用容器中先前定义的环境变量和任何服务环境变量进行扩展。如果无法解析变量,则输入字符串中的引用将保持不变。

强调我的。如果你有

  - name: POD_ID
    valueFrom: # etc etc
  - name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs
Run Code Online (Sandbox Code Playgroud)

它会起作用,但如果你有

  - name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs
  - name: POD_ID
    valueFrom: # etc etc
Run Code Online (Sandbox Code Playgroud)

它不会。如果您使用模板引擎来生成规范,请注意。