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:
- ReadWriteOnce (RWO):单节点读写,最常用,只能挂载到一个节点
- ReadOnlyMany (ROX):多节点只读
- ReadWriteMany (RWX):多节点同时读写(NAS 类存储)
Q6:PV 回收策略 reclaimPolicy
A:PV 被 PVC 释放后如何处理:
- Retain(默认):保留数据,PV 不删除,管理员手动清理
- Delete:删除 PV 以及后端存储资源(云盘常用)
- 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 内的存储卷。
- emptyDir:Pod 临时目录,Pod 删除数据就丢,Pod 内多容器共享目录,临时缓存场景
- hostPath:挂载宿主机文件 / 目录,Pod 漂移到其他节点数据就不在,生产慎用,日志 / 监控代理偶尔使用
Q12:PV/PVC 常见故障排查
A:
- PVC 状态 Pending:找不到匹配 PV;SC 不存在;存储后端异常;权限不足
- Pod 无法挂载 PVC:PV 没绑定;存储插件异常;存储后端权限 / 网络不通;访问模式冲突(RWO 多节点挂载报错)
- 挂载失败看事件:
kubectl describe pvc xxx、kubectl describe pod xxx
Q13:StatefulSet 存储有什么特点?
A:StatefulSet 可以配合 volumeClaimTemplates(PVC 模板),每个 Pod 自动生成独立 PVC,删除 Pod 不会自动删除 PVC,保证有状态应用数据独立保留。
Q14:什么是快照(VolumeSnapshot)?
A:CSI 支持存储卷快照,对 PV 做数据快照,用于备份,也可以基于快照恢复出新 PV。
浙公网安备 33010602011771号