首页 > 解决方案 > 如何临时更改 kubernetes pod 的环境变量?

问题描述

我们在 kubernetes 集群的 pod 中运行 python 服务。这些服务设置为从环境变量接收它们的日志级别。这些环境变量是在 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 以进行调试的目标的唯一/最佳方法吗?

标签: pythonloggingkubernetesenvironment-variables

解决方案


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

简短的回答:是的。

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

为什么?

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

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


推荐阅读