我需要定义一个名称为'。'的环境变量。字符,而Kubenetes似乎不喜欢它。
spec:
containers:
env:
- name: "com.my.app.dir"
value: "/myapp/subdir/"
我尝试了单引号,双引号,反斜杠,双反斜杠以及许多其他方式。仍然无法使其正常工作。我想知道是否有人知道逃脱“。”的方法。字符。预先感谢。
答案 0 :(得分:3)
Kubernetes使用.
设置环境变量没有问题
这是一个简单的规范,可通过直接运行node
可执行文件来记录环境
apiVersion: v1
kind: Pod
metadata:
name: env-node
spec:
containers:
- image: 'node:12-slim'
name: env-node
command:
- node
- '-pe'
- process.env
env:
- name: OTHER
value: here
- name: 'ONE_two-Three.four'
value: 'diditwork'
和环境输出(为简洁起见,删除了一些kubernetes默认vars)
{
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
HOSTNAME: 'env-node',
NODE_VERSION: '12.16.1',
OTHER: 'here',
'ONE_two-Three.four': 'diditwork',
HOME: '/root'
}
大多数shell(sh
,bash
,zsh
)将不接受其中带有.
的环境变量。 POSIX将[a-zA-Z_][a-zA-Z0-9_]*
定义为环境变量名称中允许的字符。
因此通过外壳运行同一节点进程:
spec:
containers:
- image: 'node:12-slim'
name: nodeenvtest-simple-shell
command:
- sh
- '-c'
- 'node -e "console.log(process.env)"'
env:
- name: 'ONE_two-Three.four'
value: 'diditwork'
- name: 'OTHER'
value: 'here'
导致缺少环境变量:
{
NODE_VERSION: '12.16.1',
HOSTNAME: 'env-shell',
HOME: '/root',
OTHER: 'here',
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
PWD: '/'
}
如果容器与运行的应用程序之间没有外壳,则环境变量第一个字符后的.
应该很好。