【发布时间】:2020-01-28 23:25:18
【问题描述】:
我正在尝试将 Redis(通过创建 Helm 图表)部署为 Kubernetes 集群中的 StatefulSet。我不是在官方 Redis Docker 映像之上创建另一个 Redis 映像,而是我只是尝试使用 Official Redis Docker image 中可用的默认值,并在运行时提供我的 redis.conf 和 requirepass。
为了提供redis.conf,我使用了一个ConfigMap并将其挂载到容器中的/config/redis.conf中。
现在,我想在 Kubernetes 中将 --requirepass 选项作为 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} 不是?
【问题讨论】:
-
@Adiii 感谢您的链接,但
HOSTNAME是一个实际命令,在我的情况下,REDIS_AUTH不是一个实际命令。即使那样它的工作。我不明白它是如何工作的。
标签: docker kubernetes redis sh kubernetes-helm