Kubernetes 存储架构及插件
Kubernetes 存储架构及插件
kubernetes挂载volume的过程
- 创建包含PVC的Pod
- PV Controller 会不断观察 ApiServer,发现未绑定的PVC会把PVC与PV进行绑定
- 通过 Scheduler 把Pod调度到节点
- Pod 调度到某个节点之后,它所定义的 PV 还没有被挂载,AD Controller 调用VolumePlugin 挂载Volume 设备到节点上
- Volum Manager 发现一个 Pod 调度到自己的节点上并且 Volume 已经完成了挂载,它就会执行 mount 操作把Pod中的目录挂载
- 绑定操作,Docker将已经挂载到本地的 Volume 映射到容器中
Kubernetes 存储架构
PV Controller
负责 PV/PVC 的绑定、生命周期管理,并根据需求进行数据卷的 Provision/Delete 操作
- claimWorker
控制PVC的状态在Bound、Pending、Lost中转移
- volumeWorker
控制PV的状态在Available、Bound、Released、Faild中转移
AD Controller
负责存储设备的 Attach/Detach 操作,将设备挂载到目标节点
核心对象
- DSW(DesiredStateOfWord) 预期状态
- ASW(ActualStateOfWord) 实际状态
核心逻辑
- desiredStateOfWorldPopulator 要是用来同步集群的一些数据以及 DSW、ASW 数据的更新
- Reconcile 则会根据 DSW 和 ASW 对象的状态做状态同步。它会把 ASW 状态变成 DSW 状态,在这个状态的转变过程中,它会去执行 Attach、Detach 等操作
Volume Manager
Volume Manager 实际上是 Kubelet 中一部分,是 Kubelet 中众多 Manager 的一个
管理卷的 Mount/Unmount、Attach/Detach 操作、卷设备的格式化以及挂载到一些公用目录上的操作
- DSW(DesiredStateOfWord) 预期状态
- ASW(ActualStateOfWord) 实际状态
- volumePluginManager 对象
- Attach/Detach/Mount/Unmount
volume Plugins
实现PV Controller、AD Controller 以及 Volume Manager 中的接口
提供In-tree接口,与kubernetes一同发布
提供Out-of-tree接口(Flexvolume、CSI)
存储插件
Flexvolume
主要实现了Attach/Detach/Mount/Unmount接口逻辑,提供各种存储相关的接口
提供给kubernetes 二进制方法进行调用
CSI
容器化的插件,提供给不同的编排系统比如:swarm等
以CRD的形式进行部署
包括 CSI Controller Server(是控制端的功能,主要实现创建、删除、挂载、卸载等功能)和 CSI Node Server(主要实现的是节点上的 mount、Unmount 功能)
参考
https://gitchat.csdn.net/columnTopic/5dd3f1e479b8c11c313571a1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 mutoulazy's space!