如何临时更改 Kubernetes Pod 的环境变量?

5
我们在 Kubernetes 群集中的 Pod 中运行 Python 服务。这些服务被设置为从环境变量接收其日志级别。这些环境变量在服务的部署期间通过 GitLab 流水线设置。为了调试目的,我想能够更改单个 Pod 上的环境变量并重新启动它,而无需从 GitLab 重新部署服务。
在我们转移到 Kubernetes 之前,我们在 Rancher 中运行容器,在 GUI 中进行所述更改非常容易。更改环境变量 -> 点击更新 -> 容器自动重启。
我找到了这篇文章,建议使用类似以下命令更改副本集:
kubectl set env rs [REPLICASET_NAME] [ENV_VAR]=[VALUE]

然后终止该Pod,然后将使用设置的env变量重新创建它。

但该文档也指出:

永远不要在生产系统上执行此操作。

即使在开发环境中执行此操作,也要注意如何影响您的部署工作流程。

这是实现在运行中的Pod中快速更改环境变量以进行调试的唯一/最佳方法吗?

2个回答

2
这是实现在运行的 Pod 中快速更改环境变量以进行调试目的的唯一/最佳方法吗?
简短回答:是的。
长回答:我从未使用过或阅读过 Rancher,但我怀疑它也会更改 ReplicaSet 或 Deployment 模板 env 变量,从而触发 Pod 更新。这确实是在 Pod 中更改 env 变量的唯一方法。您无法更改正在运行的容器或正在运行的 Pod 上的 env 变量。您无法在 Docker 容器中执行此操作,也无法在 Kubernetes 中执行此操作,因此我认为您无法在 Rancher 中执行此操作。您只能使用不同的规范重新启动 Pod。
为什么?
因为容器只是在主机上运行的进程。一旦启动进程,就无法更改进程的环境,除非采用恶劣的黑客手段
如果您只关心指出不要在开发或生产中执行此操作的警告,那么我会说相同的警告适用于您描述的 Rancher 工作流程,因此,如果您愿意承担风险,那么这里也不会有任何不同。

1

我经常在部署规范中定义环境变量。然后,在部署运行时,我可以轻松地执行操作:

kubectl edit deployment <name>

我希望你能改变环境变量,这将导致pod重新启动,但对于我的开发目的来说通常是可以接受的。如果环境变量已经嵌入到镜像中,则需要重新构建镜像并重新启动pod(这将拉取镜像),或者使用其他人在此处提出的建议。


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