首页/云/Kubernetes 速查/卷的只读挂载
配置与存储54 条

卷的只读挂载

volumeMounts.readOnly 让容器无法写挂载点:防误写配置文件、防污染共享数据;ConfigMap/Secret 卷本身只读。

Kubernetes 速查云更新于 2026-10-13

只读挂载的作用

volumeMounts.readOnly: true 让容器在该挂载点上无法写入:对配置目录能防止程序误改配置文件,对共享数据卷能防止误删误写。它是挂载层的约束,只影响当前容器的这个挂载点,同一块卷在别的 Pod 或别的挂载位置上仍然可读写。ConfigMap、Secret、Downward API 这类卷本身就是只读的,写不进去属于预期行为,加这个字段只是把意图显式写出来。

基本信息

适用平台Kubernetes 各版本,containers[].volumeMounts 字段
关键字段readOnly,取值 true 或 false,默认 false
作用范围单个容器的单个挂载点,不改变卷本身的属性
天然只读的卷configMap、secret、downwardAPI、projected
全局只读需要存储侧支持 ReadOnlyMany 访问模式或快照只读副本

典型使用场景

  • 应用配置目录:容器只读读取,防止程序把默认配置回写覆盖
  • 共享数据卷的读侧消费:多个只读副本同时挂载,降低误写风险
  • 交付物目录:镜像里的静态资源与模板只读,避免被运行时改写
  • 证书目录:只读挂载可减少凭据被进程改动或注入的机会
  • 排查污染:怀疑某容器改了共享文件时先改成只读做验证

只读挂载示例

只读挂载示例
containers:
  - name: app
    image: registry.example.com/app:1.26.0
    volumeMounts:
      - name: config
        mountPath: /etc/app
        readOnly: true            # 配置目录只读
      - name: data
        mountPath: /var/lib/app/data
        readOnly: true            # 共享数据只读消费
volumes:
  - name: config
    configMap:
      name: app-config
  - name: data
    persistentVolumeClaim:
      claimName: shared-data

验证写入被拒

验证写入被拒
kubectl exec -it web-x -- sh -c 'touch /etc/app/probe.txt' || echo read-only
kubectl exec -it web-x -- mount | grep -E '/etc/app|/var/lib/app/data'   # 这里会显示 ro 标记
kubectl get pod web-x -o jsonpath='{.spec.containers[0].volumeMounts[*].readOnly}'

常见目标与做法

目标做法效果
防误改配置配置目录 readOnly: true程序写配置直接失败,尽早暴露问题
共享数据只读消费多副本挂同一卷并只读写入报 read-only file system
ConfigMap/Secret默认即只读加字段只是显式声明
跨 Pod 全局只读ROX 访问模式或只读副本需要存储侧配合
写入被拒时应用侧看到的错误是 read-only file system,若应用启动阶段要往该目录写临时文件或日志,容器会直接 CrashLoopBackOff。
需要运行时修改配置的场景不要简单挂成只读:应改为可写卷,并在启动时由 initContainer 把初始内容拷贝进去,避免应用改配置文件失败后反复重启。

易错点

  • 把只读挂载当权限控制:它只约束当前容器,其他容器与 Pod 仍可写,安全隔离要靠安全上下文与存储权限
  • 应用往只读目录写临时文件:容器反复重启且报 read-only file system,容易被误判成镜像问题
  • 共享卷用 RWO 访问模式:只读挂载也不能绕过访问模式限制,副本漂到别的节点触发 Multi-Attach 失败
  • 以为 ConfigMap 卷加了 readOnly 才有只读效果:不加也写不进去,误判会让人怀疑更新没生效

数据来源与参考

  • Kubernetes 官方文档 · Volumes(readOnly 挂载)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌