Django无法访问Azure安装的存储

问题描述 投票:1回答:1

我正在使用AKS(kubernetes)在Azure服务器上运行我的Djagno应用程序(python 2.7,django 1.11)。

我在/data/media安装了持久存储卷。当我尝试通过我的应用程序上传文件时,出现以下错误:

Exception Value: [Errno 13] Permission denied: '/data/media/uploads/<some_dir>'
Exception Location: /usr/local/lib/python2.7/os.py in makedirs, line 157

os.py中有问题的一行是试图创建目录mkdir(name, mode)的那一行。

当我使用kubectl exec -it <my-pod> bash访问pod(用户是root)时,我可以轻松地进入/data/media目录,创建子文件夹并查看它们反映在Azure门户中。所以我的坐骑非常好。

我尝试chmoding /data/media,但这不起作用。好像我无法更改已挂载的持久卷上的文件夹的权限,也无法添加用户或更改组。因此,从我的pod访问卷似乎没有问题,但由于Django没有以root用户身份运行,因此无法访问它。

我可以解决这个问题吗?谢谢。

django linux python-2.7 azure django-1.11
1个回答
0
投票

事实证明,由于Azure文件共享装载实际上由k8s群集拥有,因此在pod中运行的Docker容器仅将其作为入口点挂载,但由于它们不拥有它而无法修改其权限。

它现在开始发生的原因解释here

...原来,Kubernetes版本的默认目录模式和文件模式不同。因此,对于Kubernetes v1.6.x,v1.7.x,访问模式为0777,对于v1.8.6或更高版本,则为0755

所以对我来说,修复是将已安装卷的所需访问权限添加到k8s规范,如下所示:

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: <volumeName>
  annotations:
    volume.beta.kubernetes.io/storage-class: <className>
spec:
  mountOptions:
    - dir_mode=0777
    - file_mode=0777
  accessModes:
    - ReadWriteMany
...

**我写了0777作为例子。你应该仔细设置为你写的内容。

希望这有助于任何人。

© www.soinside.com 2019 - 2024. All rights reserved.