我们在kubernetes集群的pod中运行python服务。设置服务以从环境变量接收其日志级别。这些环境变量是在gitlab管道中的服务部署期间设置的。出于调试目的,我希望能够只更改单个pod上的env var并重新启动它,而不必从gitlab重新部署服务。
在迁移到kubernetes之前,我们是在rancher中运行我们的容器,在其中非常容易在GUI中完成所描述的更改。更改环境变量->命中更新->容器自动重启。
我发现本文建议使用以下命令更改副本集
kubectl set env rs [REPLICASET_NAME] [ENV_VAR]=[VALUE]
然后终止pod,之后将使用相应的env var重新创建它。
但这也说明
永远不要在生产系统上这样做。
切勿在开发环境中执行此操作,否则请注意它如何影响部署工作流程。
这是实现我快速更改正在运行的pod中的env变量以进行调试的目标的唯一/最佳方法吗?
这是实现我快速更改正在运行的pod中的env变量以进行调试的目标的唯一/最佳方法吗?
简短的回答:是的。
长答案:我从未使用过Rancher或在Rancher上阅读过,但我怀疑它也在更改ReplicaSet或Deployment模板env var,从而触发了Pod更新。实际上,这是在Pod中更改环境变量的唯一方法。您不能在正在运行的容器或正在运行的Pod上更改环境变量。您不能在Docker容器中做到这一点,也不能在Kubernetes中做到这一点,所以我认为您不能在Rancher中做到这一点。您只能使用其他规格重新启动Pod。
为什么?
因为容器只是在主机上运行的进程。流程启动后,如果不诉诸讨厌的骇客,就无法更改流程环境。
如果您只是担心表示在dev或prod中不执行此操作的警告,那么我想说的是,同样的警告也适用于您描述的Rancher工作流程,因此,如果您愿意在那冒险,那就不会了这里有什么不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句