天天看點

CSI 系統介紹CSI 基礎

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
v1.12
v1.13 v1.0.0 GA

CSI基礎架構:

下圖是典型的資料卷生命周期流程圖,一般塊存儲都是按照這個流程執行;

CSI 系統介紹CSI 基礎

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接口實作格式化、挂載等功能。

繼續閱讀