在k8s中部署Redis时使用args设置requirepass可以使用$(),但是不能使用$ {}

问题描述 投票:0回答:1

我正在尝试通过创建Helm图表将Redis部署为Kubernetes集群中的StatefulSet。我不是在官方Redis Docker映像之上创建另一个Redis映像,而是在尝试使用Official Redis Docker image中提供的默认值,并仅在运行时提供我的redis.confrequirepass

为了提供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}不起作用?

docker kubernetes redis sh kubernetes-helm
1个回答
1
投票

这是Kubernetes的特定功能,如果您想在commandargs字段中扩展环境变量,则必须使用$()语法而不是${}语法。

检查此链接:https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#use-environment-variables-to-define-arguments

© www.soinside.com 2019 - 2024. All rights reserved.