Django在Kubernetes Pod中存图片报设备无剩余空间求助
Kubernetes Pod中Django保存图片提示磁盘空间不足排查方案
问题场景
在Kubernetes Pod中运行Django应用时,执行代码img_obj.image.save(img_file, File(img_file_org))保存图片触发设备无剩余空间错误,报错信息如下:
File "/code/ocr_client/management/commands/pdf_to_image.py", line 126, in handle img_obj.image.save(img_file, File(img_file_org)) File "/opt/conda/lib/python3.7/site-packages/django/db/models/fields/files.py", line 88, in save self.name = self.storage.save(name, content, max_length=self.field.max_length) File "/opt/conda/lib/python3.7/site-packages/django/core/files/storage.py", line 54, in save return self._save(name, content) File "/opt/conda/lib/python3.7/site-packages/django/core/files/storage.py", line 274, in _save fd = os.open(full_path, self.OS_OPEN_FLAGS, 0o666) OSError: [Errno 28] No space left on device: '/code/pca_back_data/media/file1.png'
已执行kubectl exec <my-pod> -- df -ah确认磁盘仍有20%(100GB)剩余,kubectl exec <my-pod> -- df -hi显示inode使用率仅为5%,需排查Kubernetes层面是否存在存储限制配置。
排查方向
- 命名空间存储配额(Resource Quota):集群管理员可能为命名空间设置了存储总量限制,执行
kubectl describe resourcequota -n <你的命名空间>查看是否有requests.storage或limits.storage类的配额,确认是否已达上限。 - 容器临时存储限制:Pod的容器可能配置了
ephemeral-storage的请求和限制值,限制了临时存储的使用量。通过kubectl describe pod <my-pod>查看Resources模块下的Ephemeral Storage配置,或检查Pod YAML中的resources字段。 - PVC存储配额限制:若
/code/pca_back_data/media目录挂载了PersistentVolumeClaim(PVC),需检查PVC自身的容量限制。执行kubectl describe pvc <对应PVC名称>查看Capacity和实际使用量,确认是否已用完PVC配额。 - 节点kubelet存储限制:节点的kubelet可能配置了存储驱逐阈值(如
--eviction-hard中的storage.available),即使磁盘有剩余空间,一旦低于阈值会触发存储限制。通过kubectl describe node <Pod所在节点>查看节点事件,或kubectl get nodes <节点名> -o yaml查看kubelet配置。 - 文件系统用户配额:挂载的文件系统可能针对运行Django的用户设置了磁盘配额,此时整体磁盘有空间但单个用户配额已耗尽。可在Pod内执行
quota -u <运行应用的用户>或repquota -a检查用户级配额。
内容的提问来源于stack exchange,提问作者Alex T
相关产品推荐
相关产品推荐

