从 kubernetes pod 获取环境变量?

Rob*_* Yi 6 kubernetes

列出 kubernetes pod 中的环境变量的最佳方法是什么?

(与类似,但对于 Kube,而不是 Docker。)

pyb*_*pyb 13

这两个答案都存在以下问题:

  1. 他们假设您拥有启动 pod 的权限,但在锁定环境中并非如此
  2. 他们启动一个新的 pod,这是侵入性的,并且可能会提供与“[n 已经运行的] kubernetes pod”不同的环境变量

要检查正在运行的 pod 并获取其环境变量,可以运行:

kubectl describe pod <podname>
Run Code Online (Sandbox Code Playgroud)

这是来自Alexey Usharovski 的评论

我希望这能让您更好的答案得到更多的了解。如果您想自己将其发布为答案,请告诉我,我将删除我的。


Rob*_* Yi 9

kubectl exec -it <pod_name> -- env

  • 注意:不需要“-it”标志。最好的答案实际上是 Egor Stambakio 在 OP 注释中的答案(它也涵盖了在命名空间中的情况)。 (3认同)
  • 仅当 env 安装在容器中时才有效。 (3认同)

R..*_*... 8

kubectl set env可用于设置环境变量和读取它们。

您可以使用kubectl set env [resource] --list选项来获取它们。

例如,列出 DEFAULT 命名空间中所有 POD 的所有环境变量:

kubectl set env pods --all --list
Run Code Online (Sandbox Code Playgroud)

或者对于给定命名空间中的特定 POD

kubectl set env pod/<pod-NAME> --list -n <NAMESPACE-NAME>
Run Code Online (Sandbox Code Playgroud)

或用于 DEFAULT 命名空间中的部署

kubectl set env deployment/<deployment-NAME> --list
Run Code Online (Sandbox Code Playgroud)

这比在 POD 内运行命令更好,因为在某些情况下,操作系统命令可能不存在于非常小的容器中

有关更多信息,请参阅:https://kubernetes.io/docs/reference/ generated/kubectl/kubectl-commands#set

  • 如果 env 从 configmap 传递,您将看不到 env 值。但接下来你必须检查配置映射。 (2认同)

Sab*_*rov 6

在bash中执行:

kubectl exec -it <pod-name> -- printenv | grep -i env

您将获得包含关键字的所有环境变量env