Docker 在k8s中部署Redis时,使用args设置requirepass可以使用$(),但不能使用${}
我正试图将Redis(通过创建一个掌舵图)部署为Kubernetes集群中的状态集。我并不是在官方Redis Docker映像之上创建另一个Redis映像,而是尝试使用中可用的默认值,并在运行时提供我的Docker 在k8s中部署Redis时,使用args设置requirepass可以使用$(),但不能使用${},docker,kubernetes,redis,sh,kubernetes-helm,Docker,Kubernetes,Redis,Sh,Kubernetes Helm,我正试图将Redis(通过创建一个掌舵图)部署为Kubernetes集群中的状态集。我并不是在官方Redis Docker映像之上创建另一个Redis映像,而是尝试使用中可用的默认值,并在运行时提供我的Redis.conf和requirepass 为了提供redis.conf,我使用了一个ConfigMap,并将其装入容器中的/config/redis.conf 现在,我想在Kubernetes中将--requirepass选项作为args传递,如下所示: ... containers: [
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)" ]
尽管,
$()
语法用于命令替换,而REDIS\u AUTH
是一个环境变量而不是一个可执行文件,但它是如何工作的,${REDIS\u AUTH}
不工作的 这是Kubernetes特有的功能,如果要在命令
或参数
字段中展开环境变量,则必须使用$()
语法,而不是${}
语法
检查此链接:@adii感谢您的链接,但是
HOSTNAME
是一个实际的命令,在我的例子中,REDIS\u AUTH
不是一个实际的命令。即使这样,它也能工作。我不明白它是怎么工作的。
args: [ "/config/redis.conf", "--requirepass", "$(REDIS_AUTH)" ]