Kubernetes如何将单节点读写的持久卷以只读模式共享给其他节点
特定节点读写、其余节点只读的持久卷挂载方案
要实现单节点读写持久卷、其余所有节点只读挂载该卷,可按照以下步骤配置:
前提确认
首先确认集群使用的存储提供商支持ReadOnlyMany(ROX)访问模式,PVC才能同时声明读写、只读两种访问模式。
配置步骤
1. 编写PVC配置文件pvc.yaml
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: # 唯一标识PVC,部署时会用到该名称 name: public-pv-claim namespace: default spec: accessModes: - ReadWriteOnce # 单节点读写权限 - ReadOnlyMany # 多节点只读权限 resources: # 存储申请容量,需要集群中有对应的可用存储 requests: storage: 1Gi
执行kubectl apply -f pvc.yaml创建PVC即可。
2. 特定读写节点的Pod配置
注意:你原有配置中
volumeMounts的name字段填写为data,和上方定义的volume名称public不一致,会导致挂载失败,需要修正为对应名称。
修正后的配置如下:
... volumes: - name: public persistentVolumeClaim: claimName: public-pv-claim # 对应上面创建的PVC名称 containers: - name: specific volumeMounts: - name: public # 和volume名称保持一致 mountPath: "/public" # 挂载到容器内的路径 ...
该Pod运行在特定节点上,对持久卷拥有读写权限。
3. 其余节点的Pod配置
... volumes: - name: public persistentVolumeClaim: claimName: public-pv-claim # 同一个PVC containers: - name: other ... volumeMounts: - name: public mountPath: "/public" readOnly: true # 开启只读挂载限制 ...
通过挂载参数readOnly: true限制所有其他节点的Pod只能读取卷内数据,无法写入。
额外说明
- 如果存储不支持
ReadOnlyMany模式,可以改用共享文件系统类存储(如NFS、CephFS),再配合挂载参数实现只读限制。 - 若要进一步避免读写权限冲突,可通过节点亲和性规则保证只有指定节点能调度到具备读写权限的Pod。
内容的提问来源于stack exchange,提问作者Ouss
相关产品推荐
相关产品推荐

