部署在Kubernetes上的Django应用Sktime+Plotly预测图表无法加载如何解决
1. 先确认资源配置是否生效
你贴出的Deployment配置中,CPU限制仍然是200m,和你提到的修改到2000m的配置不符:
resources: requests: cpu: 200m memory: 100Mi limits: memory: "1Gi" cpu: "200m"
Sktime的预测任务属于CPU密集型操作,200m的CPU限制仅允许容器使用0.2核,执行计算时会被Kubernetes直接限流,导致请求长时间阻塞。首先确认你修改配置后是否执行了kubectl apply -f <你的yaml文件名>让新配置生效,修改后可以执行kubectl describe deployment mywebsite查看实际生效的资源配置。
2. 排查Django部署配置问题
本地运行正常但集群异常,大概率是Django生产环境配置和本地开发模式存在差异:
- 检查Django的
DEBUG配置,如果生产环境关闭了DEBUG模式,必须配置静态资源服务,否则Plotly依赖的前端JS、CSS静态资源会返回404,导致图表无法渲染、页面持续加载。生产环境建议搭配Nginx处理静态资源,或者安装whitenoise库让Django直接处理静态资源。 - 确认
ALLOWED_HOSTS配置中已经添加了minikube service --url mywebsite返回的IP地址,否则Django会直接拒绝访问请求。 - 检查你容器内启动Django的方式:不要使用默认的
python manage.py runserver开发服务器,它是单线程的,处理耗时的预测请求时会阻塞所有其他请求,生产环境必须使用Gunicorn、uWSGI等多进程WSGI服务器启动。
3. minikube启动方式没问题
minikube service --url mywebsite是LoadBalancer类型服务在minikube环境下的标准获取访问地址的方式,操作本身没有问题。你可以先执行kubectl get svc mywebsite确认服务的端点(ENDPOINTS)是否正常关联到Pod的8000端口,排除服务配置错误的问题。
4. 直接查看Pod日志定位具体错误
执行以下命令查看Pod的运行日志,直接定位请求卡住的具体原因:
# 先获取Pod名称 kubectl get pods | grep mywebsite # 查看Pod实时日志 kubectl logs -f <上一步输出的Pod名称>
如果日志中出现CPU throttle相关的提示,就确认是资源限制问题;如果出现静态资源404就对应调整静态资源配置;如果出现预测任务的报错就检查模型文件是否正常打包到镜像中。
5. 检查minikube本身的资源配额
如果你修改了Pod的资源限制还是无效,确认你启动minikube时分配的总资源是否足够,执行minikube config view查看cpu和memory的配置,如果minikube本身只分配了1核CPU,你给Pod配置2核的限制也不会生效,需要重新启动minikube分配足够资源:
minikube stop minikube start --cpus 4 --memory 4096
内容的提问来源于stack exchange,提问作者Julian Romero

