如何停止Kubernetes Pod随启Python脚本及解决输出查看、端口占用问题
问题解答
问题1:实时查看运行脚本输出的方法
不需要仅通过logs命令静态查看输出,使用kubectl logs的follow参数即可实现类似本地终端运行的实时输出效果,命令如下:
kubectl logs -f <你的Pod名称>
如果Pod内运行了多个容器,需要额外指定容器名:
kubectl logs -f <你的Pod名称> -c <你的容器名称>
该命令会持续追踪容器内进程打印到stdout、stderr的所有内容,和本地运行脚本的实时输出效果一致。
问题2:停止自动启动的main.py并手动运行的方法
你遇到的OSError: [Errno 98] Address already in use报错是因为Pod启动时自动运行的main.py已经启动了Flask服务,占用了对应的监听端口,重复启动就会触发端口冲突,按以下步骤操作即可:
- 第一步:exec进入容器内部
若容器内没有安装bash,替换为kubectl exec -it <你的Pod名称> -- /bin/bash/bin/sh即可 - 第二步:查找正在运行的main.py进程ID
执行命令:
命令返回结果的第二列即为对应进程的PIDps aux | grep main.py | grep -v grep - 第三步:终止该进程
执行命令:
如果进程无响应无法正常终止,可使用强制终止命令:kill <上一步查到的PID>kill -9 <上一步查到的PID> - 第四步:手动运行main.py
进程终止后原有端口会被释放,此时直接执行python3 ./main.py即可正常启动。
注意:上述操作是临时生效的,若Pod发生重启,系统还是会按照Dockerfile中定义的CMD自动启动main.py,若需要长期修改启动逻辑,需要调整Pod的command配置或者更新Dockerfile的CMD指令。
内容的提问来源于stack exchange,提问作者Naga sai Kiran
相关产品推荐
相关产品推荐

