繁体   English   中英

如何临时更改 kubernetes pod 的环境变量?

[英]How can I temporarily change an environment variable of a kubernetes pod?

我们有 python 服务在 kubernetes 集群的 pod 中运行。 这些服务设置为从环境变量接收它们的日志级别。 这些环境变量是在 gitlab 管道中部署服务期间设置的。 出于调试目的,我希望能够仅更改单个 pod 上的 env var 并重新启动它,而不必从 gitlab 重新部署服务。

在我们迁移到 kubernetes 之前,我们在 Rancher 中运行我们的容器,其中描述的更改很容易在 GUI 中完成。 更改 env var -> 点击更新 -> 容器自动重启。

我发现这篇文章建议使用类似的命令更改副本集

kubectl set env rs [REPLICASET_NAME] [ENV_VAR]=[VALUE]

然后终止 pod,之后将使用相应设置的 env var 重新创建它。

但它也指出

永远不要在生产系统上这样做。

永远不要在开发环境中执行此操作,而不注意它可能如何影响您的部署工作流程。

这是实现我在正在运行的 pod 中快速更改 env var 以进行调试的目标的唯一/最佳方法吗?

这是实现我在正在运行的 pod 中快速更改 env var 以进行调试的目标的唯一/最佳方法吗?

简短的回答:是的。

长答案:我从未使用或阅读过 Rancher,但我怀疑它也在更改 ReplicaSet 或 Deployment 模板 env var,从而触发了 Pod 更新。 这确实是在 Pod 中更改环境变量的唯一方法。 您无法更改正在运行的容器或正在运行的 Pod 上的环境变量。 在 Docker 容器中你不能这样做,你不能在 Kubernetes 中这样做,所以我假设你不能在 Rancher 中这样做。 您只能重新启动具有不同规格的 Pod。

为什么?

因为容器只是在主机上运行的进程。 一旦进程启动,就不可能在不求助于讨厌的黑客的情况下改变进程的环境。

如果您只是担心 state 不会在开发或生产中执行此操作的警告,我会说相同的警告适用于您描述的 Rancher 工作流程,所以如果您愿意在那里承担风险,它不会在这里有什么不同。

我经常在部署规范中定义我的环境变量。 然后在部署运行时我可以做

kubectl edit deployment <name>

并更改我想要的环境变量,但这重新启动 pod,但出于我的开发目的,它通常没问题。

如果环境变量被烘焙到映像中,那么您将需要重建映像并重新启动 pod(这将拉取映像)或使用其他人在此处说明的一些建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM