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 的过程, 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MIPI CSI(Mobile Industry Processor Interface Camera Serial Interface)是一种用于连接摄像头和处理器的接口架构。它是一种高速串行接口,用于传输图像和视频数据。MIPI CSI架构的演变经历了几个版本,包括CSI-1、CSI-2和CSI-3。\[3\] 在MIPI CSI-2架构中,视觉系统中的超紧凑板支持MIPI CSI-2,并与各种智能传感器解决方案一起工作。它与许多不同的CPU板兼容,并支持MIPI D-PHY物理层与应用处理器或系统芯片通信。MIPI CSI-2的性能是可扩展的,可以在MIPI C-PHY v2.0或MIPI D-PHY v2.5的物理层上实现。\[1\] MIPI CSI-2架构的工作原理是通过MIPI CSI-2接口将图像和视频数据从摄像头传输到处理器。这个接口使用高速串行传输,可以实现高带宽和低功耗的数据传输。通过MIPI CSI-2接口,摄像头可以将捕获的图像和视频数据传输给处理器进行处理和分析。\[2\] 总结起来,MIPI CSI架构是一种用于连接摄像头和处理器的高速串行接口,通过MIPI CSI-2接口实现图像和视频数据的传输,支持可扩展的性能和低功耗的数据传输。 #### 引用[.reference_title] - *1* *2* *3* [MIPI CSI介绍](https://blog.csdn.net/enlaihe/article/details/129836557)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值