上下文/为什么我要寻找那种奇怪的方式:
我尝试注入环境的 pod(pod)是由一个作业产生的,有数百个。 k8s 中还有一个 configmap,其中包含所有环境。我这样做是为了避免手动声明数百个具有不同环境变量的 Pod
我在 k8s 中有一个 pod,在清单中定义了环境变量:
spec:
containers:
name: something
command: ["/bin/bash"]
args: ["-c", "sleep 60 && source ~/.bashrc && env | grep FOO"]
env:
- name: FOO
value: bar
- name: FOO2
value: bar2
我还运行另一个带有 kubectl 和 rbac 集的 pod 来执行:
kubectl exec -i FIRST_POD_NAME -- bash -c "echo 'FOO=updated_bar' >> ~/.bashrc"
第一个 pod 使用(睡眠是为了确保其他 pod 有时间更新环境变量的值):
sleep 60 && source ~/.bashrc && env | grep FOO
作为命令并记录:
FOO=bar
FOO2=bar2
但是当我手动进入 pod(bash)并运行时:
env | grep FOO
我明白了
FOO=updated_bar
我在这里缺少什么以及如何更新这些环境以便 pod 在启动 cmd 中使用它们?
环境变量是在 pod 启动时设置的。它不需要任何睡眠。
有关 kubernetes 环境变量的更多信息:https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/