如何在 Kubernetes 的容器中设置环境变量?

lib*_*bzz 7 kubernetes kubernetes-pod

我想ENV_VAR_VALUE在通过 Kubernetes 部署期间为容器设置一个环境变量(我只是命名)。

我在 pod yaml 配置中有以下内容:

...
...
    spec:
      containers:
      - name: appname-service
        image: path/to/registry/image-name
        ports:
        - containerPort: 1234
        env:
        - name: "ENV_VAR_VALUE"
          value: "some.important.value"
...
...
Run Code Online (Sandbox Code Playgroud)

容器需要使用ENV_VAR_VALUE的值。
但是在容器的应用程序日志中,它的值总是为空。
所以,我尝试从容器内部检查它的值:

$ kubectl exec -it appname-service bash
root@appname-service:/# echo $ENV_VAR_VALUE
some.important.value
root@appname-service:/# 
Run Code Online (Sandbox Code Playgroud)

因此,该值已成功设置。

我想这是因为在容器已经初始化之后设置了从 Kubernetes 定义的环境变量。

因此,我尝试从 pod yaml 配置中覆盖容器的 CMD:

...
...
    spec:
      containers:
      - name: appname-service
        image: path/to/registry/image-name
        ports:
        - containerPort: 1234
        env:
        - name: "ENV_VAR_VALUE"
          value: "some.important.value"
        command: ["/bin/bash"]
        args: ["-c", "application-command"]
...
...
Run Code Online (Sandbox Code Playgroud)

即便如此,ENV_VAR_VALUE在命令执行过程中的值仍然为空。
值得庆幸的是,该应用程序具有重新启动功能
——因为当我重新启动该应用程序时,ENV_VAR_VALUE就可以成功使用了。
——我至少可以同时做一些其他的测试。

所以,问题是...

我应该如何在 Kubernetes 中配置它,以便设置环境变量还不算太晚?

根据要求,这里是 Dockerfile。
我为抽象道歉......

FROM ubuntu:18.04

RUN apt-get update && apt-get install -y some-dependencies

COPY application-script.sh application-script.sh

RUN ./application-script.sh

# ENV_VAR_VALUE is set in this file which is populated when application-command is executed
COPY app-config.conf /etc/app/app-config.conf

CMD ["/bin/bash", "-c", "application-command"]
Run Code Online (Sandbox Code Playgroud)

man*_*lds 0

你为什么不移动

RUN ./application-script.sh
Run Code Online (Sandbox Code Playgroud)

以下

COPY app-config.conf /etc/app/app-config.conf
Run Code Online (Sandbox Code Playgroud)

看起来应用程序在环境配置可用之前就已经运行了。