我正在尝试通过创建Helm图表将Redis部署为Kubernetes集群中的StatefulSet。我不是在官方Redis Docker映像之上创建另一个Redis映像,而是在尝试使用Official Redis Docker image中提供的默认值,并仅在运行时提供我的redis.conf
和requirepass
。
为了提供redis.conf
,我正在使用ConfigMap并将其安装在容器的/config/redis.conf
中。
现在,我想将--requirepass
选项作为Kubernetes中的args
传递,如下:
...
containers: [
{
name: redis,
image: {
repository: redis,
tag: 5.0
},
imagePullPolicy: Always,
workingDir: /data/,
args: [ "/config/redis.conf", "--requirepass", "<password>" ], # line of concern
ports: [
containerPort: 6379
],
env: [
{
name: REDIS_AUTH,
valueFrom: {
secretKeyRef: {
name: redis,
key: password
}
}
}
],
...
以下行失败:
args: [ "/config/redis.conf", "--requirepass", "${REDIS_AUTH}" ]
相反,这有效:
args: [ "/config/redis.conf", "--requirepass", "$(REDIS_AUTH)" ]
尽管$()
语法用于命令替换,REDIS_AUTH
是环境变量而不是可执行文件,但它是如何工作的,而${REDIS_AUTH}
不起作用?
这是Kubernetes的特定功能,如果您想在command
或args
字段中扩展环境变量,则必须使用$()
语法而不是${}
语法。