如何确定我的容器是否在Kubernetes集群中运行?

32

如何判断我是否在 Kubernetes 集群内运行?使用 Docker,可以检查 /.dockerinit 是否存在。在 Kubernetes 中是否有相应的方法呢?


1
我认为你可以使用 Kubernetes 的 kubectl 命令行工具。安装它,运行 kubectl get pods。你将得到一个 Pod(容器)列表。详见:http://kubernetes.io/docs/user-guide/kubectl-cheatsheet/。 - Pratik Shah
你可以使用kubernetes client library在你的代码中访问kubernetes apis。抱歉,我不知道确切的api名称,但我认为你需要阅读一些api文档。 - Pratik Shah
我只需要在生产环境和非生产环境下设置不同的Facebook密钥。访问API似乎有些过度,我想还有其他方法。 - CESCO
这个怎么样:http://kubernetes.io/docs/user-guide/secrets/ - Pratik Shah
让我们在聊天中继续这个讨论 - Pratik Shah
显示剩余2条评论
4个回答

117

1
为什么这不是被接受的答案?K8s运行容器时,该环境变量是否无法设置,有什么原因吗? - Sam Thomas
3
“Accepted answer” 的意思是解决了提问者所问的问题。它并不表示这是最合适的解决方案 - 请使用投票来确定。 - Gajus

17

您可以在Pod规范中向容器传递环境变量。您甚至可以使用Downward API通过环境变量将一些Pod信息暴露给容器。


这就是我一直在寻找的! - CESCO
@CESCO 我也在尝试检测我的Python代码是在Kubernetes Pod上运行还是在我的笔记本电脑上运行。有没有一种方法可以事后进行此操作,而不需要提前设置环境变量? - jtlz2

12

使用默认配置,Kubernetes将在Pod中挂载serviceaccount secrets。只需检查此文件夹的存在即可:/var/run/secrets/kubernetes.io。无需设置环境变量。在Ruby中,我会执行以下操作:

if File.exists?('/.dockerenv')
  puts "I'm running in a docker container"
end

if File.exists?('/var/run/secrets/kubernetes.io')
  puts "I'm also running in a Kubernetes pod"
end

2
必须小心处理服务账户秘钥,虽然令牌文件通常会存在,但从Kubernetes 1.6版本开始,它可以通过“automountServiceAccountToken: false”禁用。 - shutefan
没错,这就是为什么我说“使用默认配置”。 - hammady

1

一种选择是检查/etc/hosts文件,通常会有一个注释说明该文件由K8s维护。

无论如何,最好的方法是在部署中定义自己的环境变量,使用一些模板工具例如helm生成部署并定义一些通用模板。


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