知识卡片

存储接入的三阶段模型及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来实现,而是在存储插件中完成的。