kubernetes-存储架构介绍、Out-of-Tree存储、CSI部署架构

132 阅读3分钟

Kubernetes存储架构

架构图

image.png

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

逻辑架构

image.png

CSI Controller介绍

负责与存储服务的API通信从而完成后端存储的管理操作

扩充PVcontroller的功能

Node Plugin介绍

也称为CSI Node,负责在节点级别完成存储卷的管理

部署架构

image.png

CSI Controller --扩充Controller功能

由StatefulSet控制器对象编排运行,副本量需要设置为1,以保证只会该存储服务运行单个CSI Controller实例

Node Plugin 节点插件--扩充节点的功能

由DaemonSet控制器对象编排运行,以确保每个节点上精确运行一个相关的Pod副本

扩充 volume manager的功能

  1. 当存在外接的存储时 volume manager需要和这些 volume plugin 进行网络通信

  2. 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容器