5

我目前正在通过 kubernetes 在 python3 下运行 django 应用程序skaffold dev。我使用 Python 源代码进行热重载。目前是否可以在 kubernetes 上使用 python 进行交互式调试?

例如,

def index(request):
    import pdb; pdb.set_trace()
    return render(request, 'index.html', {})

通常,在容器外,点击端点会使我掉入(pdb)外壳中。

在当前设置中,我在文件中设置了stdinttyto 。代码确实在断点处停止,但它不允许我访问shell。trueDeployment(pdb)

4

3 回答 3

6

有一个kubectl命令允许您附加到 pod 中正在运行的容器:

kubectl attach <pod-name> -c <container-name> [-n namespace] -i -t

-i  (default:false) Pass stdin to the container
-t  (default:false) Stdin is a TTY

它应该允许您与容器中的调试器进行交互。可能您可能需要调整您的 pod 以使用调试器,因此以下文章可能会有所帮助:

还有远程呈现工具可以帮助您使用不同的应用程序调试方法:

使用Telepresence允许您为本地服务使用自定义工具,例如调试器和 IDE,并为服务提供对 ConfigMap、机密和在远程集群上运行的服务的完全访问权限。

使用--swap-deployment选项将现有部署与 Telepresence 代理交换。交换允许您在本地运行服务并连接到远程 Kubernetes 集群。远程集群中的服务现在可以访问本地运行的实例。

于 2019-02-26T11:21:41.950 回答
0

可能值得研究Rookout,它允许在 Kubernetes pod 上对 Python 进行生产中实时调试,而无需重新启动或重新部署。你失去了路径强制等,但你获得了足够的灵活性来有效地模拟断点类型的堆栈跟踪。

于 2019-03-04T12:10:44.703 回答
0

这不使用 Skaffold,但您可以使用我编写的开源项目将 VSCode 调试器附加到任何正在运行的 Python pod 。

在集群上安装它需要一些设置,但安装后,您可以使用一个命令调试任何 pod:

robusta playbooks trigger python_debugger name=myapp namespace=default 
于 2021-12-30T14:46:06.267 回答