首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在K8S中快速修改Python进行调试

在K8S中快速修改Python进行调试
EN

Stack Overflow用户
提问于 2019-04-26 18:36:19
回答 2查看 397关注 0票数 2

背景

我有一个运行在桌面PC上的大型Python服务,我需要将它作为K8S部署的一部分来运行。我预计,在服务开始工作之前,我需要进行几个小的更改,才能使服务在部署/吊舱中运行。

问题

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

  • 修改我的Python代码。
  • 重新构建Docker容器(其中包括我的Python服务)。
  • 将Docker容器转到Docker。
  • docker load图像,更新标签,并将其推送到注册表后端DB.
  • 手动关闭当前运行的豆荚,这样部署就会用新的Docker映像重新启动所有的吊舱。

每次我需要调试一个小问题时,这都需要大量的准备时间。理想情况下,我更希望能够修改已经在荚上运行的Python代码的副本,但我不能杀死它(因为Python服务是使用PID=1启动的默认应用程序),而且K8S不支持重新启动一个pod (据我所知)。或者,如果我杀死/启动另一个结束符,它将不会发生我以前所做的本地更改(当然,这是设计上的,但无助于我的调试工作)。

问题

是否有更好/更快的方法来快速地将(实验性/调试)更改部署到我正在测试的容器中,而无需花费几分钟重新创建容器映像、重新部署/标记/推送它们等等?如果我能够找到并挂载(读-写) Docker映像,这可能会有所帮助,因为我可以直接编辑其中的数据(即新的Python更改),并且只需删除pods,这样部署就可以重新创建它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-26 19:30:14

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

首先,有100万零1种工具,但Skaffold可能是最常见的工具。

对于第二个步骤,您可以执行类似于( eval $(minikube docker-env) && docker build -t myimagename . )的操作,它将直接在Minikube环境中构建映像,因此您可以完全跳过列表中的步骤3和步骤4。您可以将其与检测映像更改的工具结合使用,该工具可以重新启动豆荚,也可以更新部署(重新启动吊舱)。

另外,使用scpdocker load的FWIW是非常不标准的,通常这会被合并成docker push

票数 4
EN

Stack Overflow用户

发布于 2019-04-27 01:15:58

我认为您的痛处在于依赖于python代码的容器。您可以找到一种方法将源代码从坞映像生成阶段中排除出来。

根据我的经验,我将创建一个只包含python包依赖项的docker映像,并使用volume将源代码dir映射到容器路径,因此如果没有添加或删除依赖项,则不需要重新构建图像。

示例

我对k8s没有太多的经验,但我相信它肯定和docker run差不多。

Dockerfile

代码语言:javascript
运行
复制
FROM python:3.7-stretch

COPY ./python/requirements.txt /tmp/requirements.txt

RUN pip install --no-cache-dir -r /tmp/requirements.txt

ENTRYPOINT ["bash"]

码头集装箱

scp将代码部署到服务器,并将主机源路径映射到容器源路径,如下所示:

代码语言:javascript
运行
复制
docker run -it -d -v /path/to/your/python/source:/path/to/your/server/source --name python-service your-image-name

使用卷映射,您的容器不再依赖于源代码,您可以轻松地更改源代码,而无需重新生成映像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55873256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档