如何在Kubernetes中为容器扩展环境变量

10

Kubernetes文档关于设置容器环境变量只包含新环境变量的示例。

当我尝试扩展现有环境变量PATH时,这种方法不起作用:

kind: Pod
apiVersion: v1
spec:
  containers:
    - name: blah
      image: blah
      env:
        - name: PATH
          value: "$PATH:/usr/local/nvidia/bin"

创建的 pod 不断崩溃,显示如下信息:
BackOff       Back-off restarting failed container
FailedSync    Error syncing pod

有什么建议可以扩展PATH环境变量吗?
3个回答

4
如果您只需要此路径声明用于正在运行的命令,则可以将其添加到args下的containers部分中。
示例:
spec:
  containers:
  - name: blah
    image: blah
    args:
    - PATH="$PATH:/usr/local/nvidia/bin" blah

如果您的yaml文件中没有指定args参数,那么您可能在Dockerfile中指定了CMD,这将自动运行容器命令。因此,您可以在Dockerfile中添加以下内容。
CMD ["PATH=$PATH:/usr/local/nvidia/bin", "blah"]

如果您希望将此功能添加到容器中,您需要在使用容器的用户的.profile或.bashrc文件中添加内容。这可能涉及创建一个包含这些新文件的新镜像。


1
如果你希望在容器启动程序和使用 kubectl exec 进入容器时都能更新环境变量 PATH,你可以更新你的清单命令参数,类似如下的形式。
spec:
  containers:
  - name: mysvc-daemon
    command:
    - /bin/bash
    - -c
    args: 
    - |
      echo 'export PATH=$PATH:$HOME/bin:$HOME/local/bin' >> $HOME/.bashrc

然后,您可以确保将二进制文件放在目录$HOME/bin或$HOME/local/bin中。如果您进入bash环境并检查,您应该能够看到目录$HOME/bin或$HOME/local/bin现在是PATH环境变量的一部分。


0

在 Pod 启动之前,最终的环境变量是未知的,因此 Kubernetes 无法附加一个值不可预测的字符串。

实际上,Docker 将重置环境变量,并最终添加自己的环境变量。

您可以修改入口点以便能够处理为执行准备环境。

我有一个仅限 Bash 的特色入口点在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接