知识卡片
存储接入的三阶段模型及PV控制器AD控制器Volume管理器的职责分工
内容
Kubernetes把外部存储接入或移除Pod的过程拆成三个操作,参考的是传统
操作系统接入新存储设备的思路。准备(Provision,逆操作Delete):决定
接入哪种存储设备,确定来源/容量/性能等参数,类比给操作系统购买新存储
设备。附加(Attach,逆操作Detach):把准备好的存储接入系统,此时设备
还不能直接使用,只是”看得见”,类比接入操作系统但还未挂载。挂载
(Mount,逆操作Unmount):把附加好的存储挂到指定位置,确定访问目录、
文件系统格式,类比操作系统里的mount命令。这六个操作并非Kubernetes自己
实现,而是由存储插件完成,Kubernetes通过两个控制器和一个管理器去调用
它们:PV控制器负责PersistentVolume和PersistentVolumeClaim的生命周期
管理,期望状态是”未绑定的PV都可用”和”等待中的PVC都能匹配到PV”,据此
调用插件的Provision/Delete;AD控制器负责节点侧的存储附加分离,期望
状态是”该用到某存储的节点都附加了它,Pod销毁后不再用的存储都已分离”,
据此调用Attach/Detach;Volume管理器是kubelet的一部分,负责本节点上
Volume的Mount/Unmount(历史遗留原因,也可能包含Attach/Detach——早期
版本没有AD控制器时这项工作原本就在kubelet里做,靠
--enable-controller-attach-detach参数可以切回旧的兼容模式)。对某些
存储类型(如NFS)来说,Attach操作是无意义的空操作,插件只需把它设为
空实现即可。
结构图:
flowchart LR
A[Provision/Delete] -->|PV控制器调用| A1[存储插件]
B[Attach/Detach] -->|AD控制器调用, 节点侧| A1
C[Mount/Unmount] -->|Volume管理器/kubelet调用, 本地| A1
A1 --> D[存储从系统池到Pod可用Volume的完整生命周期]
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第13章"持久化存储"13.2.1节
"Kubernetes存储架构"(源文件:_epub-src对应OEBPS/Text/chapter159.xhtml)
- 结论依据:原文定义Provision/Attach/Mount三阶段操作及其逆操作,并详述
PV控制器、AD控制器、Volume管理器三者各自的期望状态和调用的存储插件
操作,直接支撑本卡片的结构梳理。
- 原始内容:Kubernetes参考了传统操作系统接入或移除新存储设备的做法,
把接入或移除外部存储分解为以下三种操作……以上提到的Provision、
Delete、Attach、Detach、Mount、Unmount六种操作,并不是直接由
Kubernetes来实现,而是在存储插件中完成的。