【问题标题】:Setting requirepass with args while deploying Redis in k8s works with $() but not with ${}在 k8s 中部署 Redis 时使用 args 设置 requirepass 适用于 $() 但不适用于 ${}
【发布时间】:2020-01-28 23:25:18
【问题描述】:

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

为了提供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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 2019-09-09
    • 1970-01-01
    • 2021-02-08
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多