K8s 存储 PV/PVC/CSI 面试问答(精简口述版)

K8s 存储 PV/PVC/CSI 面试问答(精简口述版)

Q1:K8s 为什么需要独立存储?Pod 本地存储有什么问题?

A:Pod 是临时资源,删除 / 漂移后,容器本地数据会丢失。本地盘无法跨节点迁移。所以需要独立持久化存储,数据生命周期和 Pod 解耦。

Q2:什么是 PV(PersistentVolume)?

A:持久卷,集群层面的存储资源,由管理员预先创建,代表一块后端存储(云盘、NAS、本地磁盘)。PV 独立于 Pod,生命周期独立。

Q3:什么是 PVC(PersistentVolumeClaim)?

A:持久卷申领,用户侧存储申请。用户在应用 yaml 里声明需要多大容量、访问模式,不用关心底层存储细节。PVC 会自动匹配合适的 PV。

Q4:PV、PVC、Pod 三者关系?

A:管理员创建 PV;用户创建 PVC 去绑定 PV;Pod 挂载 PVC,间接使用 PV 存储。

一句话:PV 是存储盘子,PVC 是申请盘子的单据,Pod 拿着单据使用盘子。

Q5:PV 的访问模式 accessModes 三种?

A:

  1. ReadWriteOnce (RWO):单节点读写,最常用,只能挂载到一个节点
  2. ReadOnlyMany (ROX):多节点只读
  3. ReadWriteMany (RWX):多节点同时读写(NAS 类存储)

Q6:PV 回收策略 reclaimPolicy

A:PV 被 PVC 释放后如何处理:

  1. Retain(默认):保留数据,PV 不删除,管理员手动清理
  2. Delete:删除 PV 以及后端存储资源(云盘常用)
  3. Recycle(废弃):擦除数据,回收复用,新版本不再推荐

Q7:PV 的绑定机制是什么?

A:PVC 创建后,控制器根据容量、访问模式、标签选择器匹配 PV,一对一绑定。一旦绑定,PVC 和 PV 绑定关系固定,不能换。

Q8:什么是 StorageClass(存储类)?作用?

A:动态存储供给。不用管理员提前手动创建一堆 PV。用户创建 PVC,StorageClass 调用存储插件自动创建 PV 并绑定。生产主流方案。

Q9:CSI 是什么?

A:Container Storage Interface,容器存储标准接口。
解耦 K8s 和底层存储厂商。存储厂商只需要实现 CSI 插件,不用修改 K8s 源码,就能对接存储。旧版本是 in-tree 内置存储插件,已经逐步淘汰。

Q10:静态供给 vs 动态供给区别

A:

  • 静态供给:管理员预先建好 PV,用户创建 PVC 去匹配已有 PV。适合存量存储。
  • 动态供给:通过 StorageClass,PVC 创建时自动生成 PV,自动对接后端存储。生产首选。

Q11:什么是 Volume ?emptyDir、hostPath 简单介绍

A:Volume 是 Pod 内的存储卷。

  1. emptyDir:Pod 临时目录,Pod 删除数据就丢,Pod 内多容器共享目录,临时缓存场景
  2. hostPath:挂载宿主机文件 / 目录,Pod 漂移到其他节点数据就不在,生产慎用,日志 / 监控代理偶尔使用

Q12:PV/PVC 常见故障排查

A:

  1. PVC 状态 Pending:找不到匹配 PV;SC 不存在;存储后端异常;权限不足
  2. Pod 无法挂载 PVC:PV 没绑定;存储插件异常;存储后端权限 / 网络不通;访问模式冲突(RWO 多节点挂载报错)
  3. 挂载失败看事件:kubectl describe pvc xxx、kubectl describe pod xxx

Q13:StatefulSet 存储有什么特点?

A:StatefulSet 可以配合 volumeClaimTemplates(PVC 模板),每个 Pod 自动生成独立 PVC,删除 Pod 不会自动删除 PVC,保证有状态应用数据独立保留。

Q14:什么是快照(VolumeSnapshot)?

A:CSI 支持存储卷快照,对 PV 做数据快照,用于备份,也可以基于快照恢复出新 PV。

posted @ 2026-09-19 21:47  JacobJacob  阅读(21)  评论(0)    收藏  举报