PVC 和 Pod 中的访问模式



我有一个带有访问模式ReadOnlyMany的 pvc 。我创建了一个使用上述 pvc 的 pod,发现我可以写入挂载的路径。这是预期行为还是与我正在使用的音量插件有关。

没有更多的信息很难说它是什么。

最常见的错误是:

1)就像评论中提到的@vaqars,可能是pod/部署清单中缺少readOnly:true元素。

volumes:
- name: <volumeName>
persistentVolumeClaim:
claimName: <claimName>
readOnly: true

2) 您的PersistentVolumePersistentVolumeClaim没有accessMode: ReadOnlyMany

3)您的音量插件可能不支持ReadOnlyMany。请检查此处您的音量插件是否支持此访问模式。

pvcaccessMode设置为ReadOnlyMany并不能保证基础pv不允许写入。更重要的是,将pvaccessMode设置为ReadOnlyMany并不能保证基础存储将拒绝写入。正如官方文档中所写的那样:

注意:Kubernetes 使用卷访问模式来匹配 PersistentVolumeClaims 和 PersistentVolumes。在某些情况下,卷访问模式还会限制可以挂载持久卷的位置。装载存储后,卷访问模式不会强制实施写保护。即使将访问模式指定为 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany,它们也不会对卷设置任何约束。例如,即使将持久卷创建为 ReadOnlyMany,也不能保证它是只读的。如果将访问模式指定为 ReadWriteOncePod,则卷将受到限制,并且只能挂载在单个 Pod 上。

如果你想自己测试一下,这里有一个可重现的例子,修改自Kubernetes 在行动的第06 章中的示例(使用minikube version v1.30.1进行测试,Kubernetes version v1.26.3):

└► cat mongodb-pv-hostpath.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /tmp/mongodb
└► cat mongodb-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadOnlyMany
storageClassName: ""
└► cat mongodb-pod-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: mongodb
spec:
containers:
- image: mongo
name: mongodb
volumeMounts:
- name: mongodb-data
mountPath: /data/db
ports:
- containerPort: 27017
protocol: TCP
volumes:
- name: mongodb-data
persistentVolumeClaim:
claimName: mongodb-pvc

将所有这些文件应用于minikube集群后,即使挂载的卷设置为ReadOnlyMany,也可以运行k exec -it mongodb -- mongosh并运行成功的命令来写入mongoDB。

相关内容

  • 没有找到相关文章

最新更新