当前位置: 代码网 > it编程>前端脚本>Powershell > CSI架构和原理

CSI架构和原理

2024年07月28日 Powershell 我要评论
K8s 原生支持一些存储类型的 PV,如 iSCSI、NFS、CephFS 等等,这些 in-tree 类型的存储代码放在 Kubernetes 代码仓库中。这里带来的问题是 K8s 代码与三方存储厂商的代码强耦合:更改 in-tree 类型的存储代码,用户必须更新 K8s 组件,成本较高in-tree 存储代码中的 bug 会引发 K8s 组件不稳定K8s 社区需要负责维护及测试 in-tree 类型的存储功能in-tree 存储插件享有与 K8s 核心组件同等的特权,存在安全隐患。

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)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com