如何使用kubernetes和skaffold调试python代码?

时间:2019-02-25 21:08:22

标签: python kubernetes skaffold

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

例如,

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

通常,在容器外部,碰到端点将使我进入(pdb) shell。

在当前设置中,我在stdin文件中将ttytrue设置为Deployment。该代码确实在断点处停止,但没有使我能够访问(pdb) shell。

2 个答案:

答案 0 :(得分:4)

有一个kubectl命令可让您attach到吊舱中正在运行的容器:

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工具可帮助您使用其他方法进行应用程序调试:

  

使用 telepresence ,您可以将自定义工具(例如调试器和IDE)用于本地服务,并为该服务提供对ConfigMap,密钥和在远程群集上运行的服务的完全访问权限。

     

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

答案 1 :(得分:0)

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