Kubernetes:在容器入口点使用 bash 变量扩展

Kubernetes: using bash variable expansion in container entrypoint

根据 [文档][1],Kubernetes 变量使用语法 $(VAR_NAME) 在容器中使用先前定义的环境变量进行扩展。该变量可以在容器的入口点使用。

例如:

env:
- name: MESSAGE
  value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]

是否可以在容器的入口点内使用 bash 扩展又名 ${Var1:-${Var2}} 来获取 kubernetes 环境变量,例如

env:
- name: Var1
  value: "hello world"
- name: Var2
  value: "no hello"
command: ['bash', '-c', "echo ${Var1:-$Var2}"]

Is this possible though to use bash expansion aka ${Var1:-${Var2}} inside the container's entrypoint ?

是的,通过使用

command: 
- /bin/bash
- "-c"
- "echo ${Var1:-${Var2}}"

但并非如此——kubernetes 不是 bash 的包装器,它使用 Linux exec 系统调用来启动容器内的程序,因此唯一的方法是get bash 行为是启动 bash

这也是他们为环境插值选择 $() 语法的原因,因此它与 shell 使用的 ${} 风格不同,尽管这个问题出现得太多了有人可能希望他们没有带 $ 任何东西以避免进一步混淆人们