我正在使用两个带有原子主机的虚拟机(1个主机,1个节点;Centos映像)。我想使用另一个VM(Ubuntu服务器16.04)的NFS共享作为我的POD的持久卷。我可以手动装载它们,并在Kubernetes(1.5.2版)中成功创建持久卷并将其绑定到我的PVC。它们也安装在我的吊舱中。
但是,当我试图从pod中相应的文件夹中写入甚至读取时,我得到了错误
Permission denied
.
根据我的研究,我认为问题在于NFS主机上的文件夹权限/所有者/组。
我在Ubuntu VM上导出文件(
/etc/exports
)具有以下模式的10个共享(这两个IP是我的原子主机主节点和节点的IP):
/home/user/pv/pv01 192.168.99.101(rw,insecure,async,no_subtree_check,no_root_squash) 192.168.99.102(rw,insecure,async,no_subtree_check,no_root_squash)
在我的播客的图像中,我创建了一个名为
guestbook
,这样容器就不会使用特权用户,因为这是不安全的。我读了很多类似的帖子
this one
,则必须将权限设置为全局可写,或对共享文件夹使用相同的UID和GID。因此,在Dockerfile中,我创建
留言簿
具有UID的用户
1003
和具有相同名称和GID的组
1003
:
RUN groupadd -r guestbook -g 1003 && useradd -u 1003 -r -g 1003 guestbook
在NFS主机上,我还有一个名为
留言簿
使用UID
1003
作为集团成员
nfs
带GID
1003
. 共享文件夹的权限(具有
ls -l
)具体如下:
drwxrwxrwx 2 guestbook nfs 4096 Feb 19 11:23 pv01
(世界可写、所有者留言簿、nfs组)。在我的Pod中,我可以看到已装载文件夹的权限
/data
(再次使用
ls-l
)作为:
drwxrwxrwx. 2 guestbook guestbook 4096 Feb 9 13:37 data
持久卷是使用具有以下模式的YAML文件创建的:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
annotations:
pv.beta.kubernetes.io/gid: "1003"
spec:
capacity:
storage: 200Mi
accessModes:
- ReadWriteOnce
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /home/user/pv/pv01
server: 192.168.99.104
Pod是使用以下YAML文件创建的:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: get-started
spec:
replicas: 3
template:
metadata:
labels:
app: get-started
spec:
containers:
- name: get-started
image: docker.io/cebberg/get-started:custom5
ports:
- containerPort: 2525
env:
- name: GET_HOSTS_FROM
value: dns
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis
key: database-password
volumeMounts:
- name: log-storage
mountPath: "/data/"
imagePullPolicy: Always
securityContext:
privileged: false
volumes:
- name: log-storage
persistentVolumeClaim:
claimName: get-started
restartPolicy: Always
dnsPolicy: ClusterFirst
带YAML文件的PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: get-started
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Mi
我尝试了文件夹所有者/组的不同配置。如果我使用我的普通用户(在所有系统上都是相同的)作为所有者和组,我可以手动装载并在文件夹中读写。但我不想使用我的普通用户,而是使用另一个用户(尤其是不是特权用户)。
我必须设置哪些权限,以便我在Pod中创建的用户可以写入NFS卷?