问题
为什么PV的accessmode设置的访问模式是ReadWriteOnce,但是其他节点还是可以读写。
为什么PV的accessmode设置的模式为ReadOnlyMany,其他节点还是可以读写。
前言
这是明显对 K8S 存储卷 (PV) 的访问模式 (Access Modes) 有误解才会提出的问题。这个误解非常普遍。
刚使用 K8S 存储卷 (PV) 的时候,也总是将其访问模式 (Access Modes) 与操作系统的权限类同,即使用方
是否有权限去读或写。然而实际上不是这样的,Pod 对存储卷的是否可写也不完全由访问模式来决定。
PV的访问模式
ReadWriteOnce(RWO):卷只能被一个节点以读写方式挂载。ReadWriteOnce访问模式也允许运行在同一节点上的多个Pod访问卷。
ReadOnlyMany(ROX):卷可以被多个节点只读方式挂载
ReadWriteMany(RWX):卷可以被多个节点以读写方式挂载
ReadWriteOncePod(RWOP):卷可以被单个Pod以读写方式挂载。如果你想确保整个集群中只有一个Pod可以读取或写入该PVC
请使用 ReadWriteOncePod 访问模式。## 大多时候RWOP并不能使用。
对于我当前来讲,由于我设置的存储为NFS并且也远程挂载了两个node节点,并且设置的是都可以进行读写,所以现在其实只有ReadWriteMany
这一种访问模式生效。
怎么限制Pod对PV的只读
可通过 Pod.Spec 中 Volume 中的 readOnly 字段来决定是 ReadWrite 还是 ReadOnly 来挂载,例子:
volumes: - name: pvc persistentVolumeClaim: claimName: claim readOnly: true
或者在
volumeMounts: - name: pvc mountPath: "/data/nfs" readOnly: true volumes: - name: pvc persistentVolumeClaim: claimName: pvc-01 readOnly: false
## 当前的accessmode访问模式并不参与PV的使用,即使PV的访问模式设置的是readonlymany,但实际也还是readwrite模式,想要实现只读,需要用户实际使用中设置 ReadOnly 。
如果想实现node的只读只能修改底层的配置,也就是直接修改存储的源头(你设置的NFS/CEPH或者其他的服务器给其他node给拒绝掉)
当然底层存储实现,一般会做安全保证。不支持多节点写的情况下,底层会拒绝掉多节点挂载(也就是NFS服务器把rw改为ro)。
标签:PV,Kubernetes,模式,访问,PVC,挂载,Pod,节点 From: https://www.cnblogs.com/yangsh123/p/17103732.html