首页 > 解决方案 > 在 K8S pod 中快速修改 Python 应用进行调试

问题描述


背景

我有一个在桌面 PC 上运行的大型 Python 服务,我需要让它作为 K8S 部署的一部分运行。我希望我必须进行一些小的更改才能使服务在部署/pod 中运行,然后才能正常工作。


问题

到目前为止,如果我在 Python 代码中遇到问题,需要一段时间来更新代码,并将其部署以进行另一轮测试。例如,我必须:

每次我需要调试一个小问题时,这都会涉及大量的前置时间。理想情况下,我更喜欢能够只修改已经在 pod 上运行的 Python 代码的副本,但我不能杀死它(因为 Python 服务是启动的默认应用程序,使用PID=1),而 K8S 没有t 支持重新启动 pod(据我所知)。或者,如果我杀死/启动另一个 pod,它不会对我之前正在处理的 pod 进行本地更改(当然,这是设计使然;但对我的调试工作没有帮助)。


问题

有没有更好/更快的方法来快速部署(实验/调试)更改到我正在测试的容器,而无需花费几分钟重新创建容器映像、重新部署/标记/推送它们等?如果我可以找到并挂载(读写)Docker 映像,那可能会有所帮助,因为我可以直接编辑其中的数据(即新的 Python 更改),然后杀死 pod,以便部署重新创建它们。


标签: dockerdebuggingkubernetes

解决方案


有两个主要选择:一个是使用减少或自动化该流程的工具,另一个是使用 Minikube 之类的本地开发。

首先,有一百万种工具,但 Skaffold 可能是最常见的一种。

其次,您执行类似的操作( eval $(minikube docker-env) && docker build -t myimagename . ),将直接在 Minikube docker 环境中构建映像,这样您就可以完全跳过列表中的步骤 3 和 4。您可以将其与检测映像更改并重新启动您的 pod 或更新部署(重新启动 pod)的工具结合使用。

FWIW 使用scpanddocker load也非常不标准,通常会组合成docker push.


推荐阅读