CSI架构和原理

Kubernetes CSI(Container Storage Interface)是为了解决存储插件与K8s代码耦合的问题,它允许第三方存储厂商实现接口以实现与K8s的解耦。本文详细介绍了CSI的诞生背景、工作原理、核心流程以及关键组件如Controller Server、Node Server、Driver Registrar等,阐述了Pod挂载volume的过程以及CSI如何进行Provisioning、Attaching、Mounting、Unmounting、Detaching和Deleting Volumes等操作。
摘要由CSDN通过智能技术生成

CSI简介

CSI的诞生背景

K8s 原生支持一些存储类型的 PV,如 iSCSI、NFS、CephFS 等等,这些 in-tree 类型的存储代码放在 Kubernetes 代码仓库中。这里带来的问题是 K8s 代码与三方存储厂商的代码强耦合:

  1. 更改 in-tree 类型的存储代码,用户必须更新 K8s 组件,成本较高

  2. in-tree 存储代码中的 bug 会引发 K8s 组件不稳定

  3. K8s 社区需要负责维护及测试 in-tree 类型的存储功能

  4. in-tree 存储插件享有与 K8s 核心组件同等的特权,存在安全隐患

  5. 三方存储开发者必须遵循 K8s 社区的规则开发 in-tree 类型存储代码

CSI 容器存储接口标准的出现解决了上述问题,将三方存储代码与 K8s 代码解耦,使得三方存储厂商研发人员只需实现 CSI 接口即可(无需关注容器平台是 K8s 还是 Swarm 等)。

Pod挂载volume的过程

  1. 用户创建一个包含PVC的Pod(使用动态存储卷);

  2. PV Controller发现这个PVC处于待绑定状态,调用Volume Plugin(in-tree或者out-of-tree)创建存储卷,并创建PV对象,然后将创建的PV与PVC绑定;

  3. Scheduler根据Pod的配置、节点状态、PV配置等信息,把Pod调度刀worker节点Node上;

  4. AD Controller发现Pod和PVC处于待挂载状态,调用Volume Plugin(in-tree或者out-of-tree)实现设备挂载到目标节点(/dev/vdb);

  5. 在worker节点上,kubelet(Volume Manager)等待设备挂载完成,通过Volume Plugin将设备挂载到指定目录:/var/lib/kubelet/pods/646154cf-dc72-11e9-b200-00163e007d53/volumes/alicloud~disk/pv-disk;

  6. kubelet在被告知挂载目录准备好后,启动Pod中的containers,用Docker -v方式(bind)将已经挂载到本地的卷映射到容器中;

CSI工作原理

CSI的部署模式

CSI 主要包含两个部分:CSI Controller Server 与 CSI Node Server,分别对应Controller Server Pod和Node Server Pod

Controller Server

只需要部署一个 Controller Server,如果是多备份的,可以部署两个。

Controller Server 主要是通过多个外部插件来实现的,一个 Pod 中可以定义多个 sideCar形式的External Container 和一个包含 CSI Controller Server 的 Container,这时候不同的 External 组件会和 Controller Server 组成不同的功能。

交互 过程
External Provisioner + Controller Server 创建、删除数据卷
External Attacher + Controller Server 执行数据卷的挂载、卸载操作
Volume Manager + Volume Plugin + Node Server 执行数据卷的Mount、Umount操作
AD Controller + VolumePlugin 创建、删除VolumeAttachment对象
External Resizer + Controller Server 执行数据卷的扩容操作
ExternalSnapshotter+ControllerServer 执行数据卷的备份操作
Driver Registrar + VolumeManager + Node Server 注册CSI插件,创建CSINode对象

Node Server

Node Server Pod 是个 DaemonSet,它会在每个节点上进行注册。

Kubelet 会直接通过 Socket 的方式直接和 CSI Node Server 进行通信、调用 Attach/Detach/Mount/Unmount 等。

Driver Registrar

Driver Registrar 只是做一个注册的功能,会在每个节点上进行部署。

CSI的工作原理

CSI Controller

CSI Controller,它是以 deployment 的形式运行在集群里面,主要负责 provision 和 attach 工作。

attach并不是不是每一个存储都会用到的,而 provision 就是在使用 StorageClass 的时候会动态创建 PV 的过程, 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值