Kubernetes存储架构
架构图
controller manager
存储卷的具体的管理操作由相关的控制器向卷插件发起调用请求来完成
AD控制器 ad controller
负责存储设备的Attach/Detach操作
- Attach:将设备附加到目标节点
- Detach:将设备从目标节点上拆除
卷插件 volume plugin
in-tree
out-tree
当存在外接的存储时 volume manager需要和这些 volume plugin 进行网络通信
存储卷管理器 volume manager
kubelet 内部存在的volume manager
负责完成卷的Mount/Umount操作,以及设备的格式化操作等
PV控制器 pv controller
- 负责PV/PVC的绑定、生命周期管理,
- 以及存储卷的
- Provision 动态置备 静态置备的检索功能
- Delete操作
Scheduler
MaxCSIvolumeCount checkvolumebinding 特定调度插件的调度决策会受到目标节点上的存储卷的影响
卷空间的过滤
例如 AuzreDisk 单节点限制挂载16块卷设备
Out-of-Tree存储
逻辑架构
CSI Controller介绍
负责与存储服务的API通信从而完成后端存储的管理操作
扩充PVcontroller的功能
Node Plugin介绍
也称为CSI Node,负责在节点级别完成存储卷的管理
部署架构
CSI Controller --扩充Controller功能
由StatefulSet控制器对象编排运行,副本量需要设置为1,以保证只会该存储服务运行单个CSI Controller实例
Node Plugin 节点插件--扩充节点的功能
由DaemonSet控制器对象编排运行,以确保每个节点上精确运行一个相关的Pod副本
扩充 volume manager的功能
-
当存在外接的存储时 volume manager需要和这些 volume plugin 进行网络通信
-
k8s内置的controller-manager 不支持外置的插件管理 需要新增一个controller(pod形式部署在集群中) 需要和controller-manager apiserver通信 补充PV-controller的功能
CSI存储组件和部署架构
CSI Controller Pod中的Sidecar容器
CSI Controller被假定为不受信任而不允许运行于Master节点之上,因此,kube-controller-manager无法借助UnixSock套接字与之通信,而是要经由API Server进行
该通用需求由Kubernetes提供的external-attacher和external-provisioner程序完成
此两者通常会以一个Sidecar容器运行于CSI Controller Pod中
- external-attacher:负责针对CSI上的卷执行attach和detach操作,类似于CSI专用的AD Controller
- external-provisioner:负责针对CSI上的卷进行Provision和Delete操作等,类似于CSI专用的PV-Controller
CSI支持卷扩展和快照时,可能还会用到external-resizer和external-snapshotter一类的程序
CSI Node Pod中的Sidecar容器
- kubelet(实现卷的Mount/Umount操作)将UnixSock套接字与CSI Node Plugin进行通信
- 将Node Plugin注册到kubelet上
- 并初始化NodeID
- 获取从Kubernetes节点名称 到 CSI驱动程序 NodeID 的映射的功能由node-driverregistrar程序提供
- 它通用运行为CSI Node Pod的Sidecar容器