今天在公司内部做了一个关于CSI的分享,因为不涉及到任何产品相关的机密信息,所以将PPT分享到公众号内。对每一页PPT,会稍加文字说明。
01. What's CSI

CSI spec最初是由多个容器编排系统提供商共同制定的一个标准,并不专属于Kubernetes。它定义了一个标准的接口,用于将存储系统暴露给计算资源,例如POD。这页PPT主要是参考了我两年前写的一篇文章:
02. In-Tree vs. Out-of-Tree

K8S不再接受In-Tree的volume plugin了,以后都是Out-of-Tree的volume plugin。同样请参考上面那篇文章。
03. Out-of-Tree: FlexVolumes vs. CSI

FlexVolume和CSI都属于Out-of-Tree的volume plugin。FlexVolume早于CSI诞生。FlexVolume是以binary的形式部署在worker node上,如果还提供attach/detach功能,则还需要部署在master节点上。FlexVolume虽然解决了In-Tree volume plugin的问题,但还是存在一些问题。CSI则同时解决了In-Tree volume plugin以及FlexVolume的问题,已经成为主流的标准。
04. PV/PVC

PV/PVC是Kubernetes里的两个概念,是对存储高度抽象的接口。PV代表PersistentVolume,而PVC则代表用户对存储的请求。对于workload(POD)来说,只需要感知这两个概念。PV具有独立的生命周期,并不依附于POD。
05. StorageClass

StorageClass描述了存储的类型。里面的每一个field都很重要,其中有三个field尤其重要:provisioner、volumeBindMode以及reclaimPolicy。
06. CSI Drivers

通常对于Block和File share会提供不同的CSI Driver,例如aws-ebs和aws-efs,azure-disk和azure-file。但是vSphere CSI Driver则同时支持Block storage和file share,通过PVC里面的accessMode来区分,能被多个POD共享的Volume属于file share,否则就属于Block storage。
07. Where is the CSI Driver Deployed

CSI Driver是K8S cluster与后端存储系统之间的一个桥梁。本身就是部署在cluster中的workload。
08. Sidecar containers

对于CSI Driver开发人员来说,首先需要实现CSI Spec。其次,还需要将CSI Driver与某个容器编排系统(K8S)集成。Sidecar container就是为了帮助开发人员将CSI Driver集成到K8S。
09. CSI Spec

对于CSI Driver开发人员来说,最主要的就是要实现CSI Spec中定义的接口。关于这点,具体请参考我两年多前写的另一篇文章:
10. Topology

有时候Volume并不能在所有的node上同等的访问。例如在zone1中的volume,只能被zone1中的node访问到。所以就需要保证Volume和使用Volume的POD位于相同的zone内。这就是Topology要解决的问题。
11. Topology (ext.)

这个表格总结了具体如何确定Volume的Topology信息。具体请参考我的另一篇文章:
--END--




