【问题标题】:Execute set command via kubectl fails通过 kubectl 执行 set 命令失败
【发布时间】:2021-09-04 16:06:07
【问题描述】:

我想在一个pod中执行set,来分析环境变量:

kubectl exec my-pod -- set

但我收到此错误:

OCI runtime exec failed: exec failed: container_linux.go:370: starting container process caused: exec: "set": executable file not found in $PATH: unknown

我认为,这是一种特殊情况,因为没有可执行文件 set,例如执行文件 ls

备注

  • 当我在 pod 中打开 shell 时,可以在那里调用 set
  • 当我使用其他命令(例如 ls)调用 kubectl exec 时,我没有收到任何错误。
  • 还有一些关于kubectl exec 的其他问题。但这些不适用于我的问题,因为我的问题是关于执行set

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    set 不是二进制文件,而是设置环境变量的 shell 命令。

    如果您想在执行后续命令之前设置环境变量,请考虑使用env

    kubectl exec mypod -- env NAME=value123 script01
    
    # or 
    
    kubectl exec mypod -- /bin/sh -c 'NAME=value123 script01'
    

    更多信息请参见https://*.com/a/55894599/93105

    如果您想为 pod 的生命周期设置环境变量,那么您可能希望在创建之前在 pod 本身的 yaml 清单中设置它。

    如果你先运行 shell,你也可以运行 set

    kubectl exec mypod -- /bin/sh -c 'set'
    

    【讨论】:

    • 我只是想阅读环境以进行调试。所以最后一个命令 kubectl exec mypod -- /bin/sh -c 'set' 对我来说是正确的解决方案。
    • 运行env,没有参数但也没有shell,也会转储环境。