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 存储架构

enter image description here

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