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

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(通过创建一个掌舵图)部署为Kubernetes集群中的状态集。我并不是在官方Redis Docker映像之上创建另一个Redis映像,而是尝试使用中可用的默认值,并在运行时提供我的
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)" ]