CSI 系统介绍-阿里云开发者社区

开发者社区> 阿里云容器服务 ACK> 正文

CSI 系统介绍

简介: CSI 基础 CSI只支持PV、PVC方式,不支持Volume方式; 官方资料: https://kubernetes-csi.github.io/docs/ How to Write CSI Plugin: https://arslan.

CSI 基础

CSI只支持PV、PVC方式,不支持Volume方式;

官方资料: https://kubernetes-csi.github.io/docs/

How to Write CSI Plugin: https://arslan.io/2018/06/21/how-to-write-a-container-storage-interface-csi-plugin/

目前版本信息:

Kubernetes CSI Version CSI Status
v1.9 v0.1 Alpha
v1.10 v0.2 Beta
v1.11 v0.3 Beta
v1.12 v0.3 Beta
v1.13 v1.0.0 GA

CSI基础架构:

下图是典型的数据卷生命周期流程图,一般块存储都是按照这个流程执行;
image

PV-Controller

Controller Manager的一部分,主要做卷的provision/delete,pv、pvc绑定;

PV Controller通过监听API Server中的PV,PVC,SC三类资源更新,当监听到这些资源的创建、删除、修改时,PV Controller做创建、删除、绑定、回收。

PV Controller 会调用注册的Provisioner完成存储卷的创建,然后创建PV对象,并与PVC进行绑定;

AD-Controller

Controller Manager的一部分,主要从事块设备的attach/detach(例如:rbd,ebs块设备需要在mount之前先attach 到主机上)

非必选: attach/detach可以通过kubelet的volume manager驱动,Controller Manager提供配置可以禁用。

通过在kubelet中--enable-controller-attach-detach,设置是否通过AD Controller来管理分配到本节点的pod volume AD;
--enable-controller-attach-detach=true:通过AD-Controller做AD,kubelet禁用;
--enable-controller-attach-detach=false:通过kubelet做AD,AD-Controller对本节点禁用;

作用:当API Server中pod(配置了pvc)与node间的关系发生变化时,通过调用存储插件将这个pod关联的PV Attach/Detach到对应node上. 完成后通知其它关联组件(kubelet)。

Volume Manager

运行在kubelet里,主要完成attach/detach/mount/unmount;

mount/unmount操作是可选的,通过kubelet配置的enable-controller-attach-detach参数确定;

当pod调度到这个node上后才会有卷的相应操作,所以它的触发端是:kubelet根据Pod Manager里pod spec里的存储配置来触发卷的挂载操作;

Kubelet会监听到调度到该节点上的pod,把pod缓存到Pod Manager中;

VolumeManager通过Pod Manager获取PV/PVC的状态,并分析出具体的attach/detach、mount/umount操作,然后调用plugin进行相应的业务处理;

External-Provisioner

监听 Kubernetes PVC 对象,并触发对 CSI Plugin的 CreateVolume 和DeleteVolume 操作;
CreateVolume成功后,创建PV对象;

External-Attacher

监听 VolumeAttachment 对象,触发 ControllerPublish 和 ControllerUnPublish 操作,通过 CSI endpoint 触发;

Driver-Register

向 Kubelet注册 CSI Plugin 程序,并将 NodeId 添加到 Kubernetes Node 对象的 annotation 里面。

Volume Plugin

存储提供的扩展接口, 包含了各类存储提供者的plugin实现;
会调用CSI Plugin的NodeStageVolume、NodePublishVolume接口实现格式化、挂载等功能。

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云容器服务 ACK
使用钉钉扫一扫加入圈子
+ 订阅

云端最佳容器应用运行环境,安全、稳定、极致弹性

官方博客
官网链接