PV:持久化存储卷
PVC:Pod所希望使用的持久化存储的属性
容器的Volume,就是将一个宿主机上的目录,跟一个容器里的目录绑定挂载在一起
如上图:
- PVC描述的是Pod想要使用的持久化存储的属性,比如存储的大小、读写权限等。
- PV描述的是一个具体的Volume的属性,比如Volume的类型、挂载目录、远程存储服务器地址等
- StorageClass的作用是充当PV模板,只有同属于一个StorageClass的PV和PVC才可以绑定在一起。以及指定PV的存储插件(Provisioner)
CSI插件:
将Provision阶段,以及Kubernetes里的一部分存储管理功能,从主干代码里剥离出来,做成几个单独的组件。
External Component:
-
Driver Registrar:负责将插件注册到kubelet里面(类似于将可执行文件放在插件目录下),Driver Registrar需要请求CSI插件的Identity服务来获取插件信息。
-
External Provisioner:负责Provision阶段,External Provisioner监听(watch)了APIServer里的PVC对象,当一个PVC被创建时,它就会调用CSI Controller的CreateVolume方法,为你创建对应PV。
-
External Attacher组件:负责“Attach”阶段,在具体实现上,它负责监听APIServer里的VolumeAttachment对象的变化,一旦出现了VolumeAttachment对象,External Attacher就会调用CSI Controller服务的ControllerPublish方法,完成它所对应的Volume的Attach阶段
插件的职责:Provision、Attach、Mount
Provision等价于创建磁盘
Attach等价于挂载磁盘到虚拟机
Mount等价于将该磁盘格式化后,挂载在Volume的宿主机目录上、
部署CSI插件的常用规则:
- 通过DaemonSet在每个节点上都启动一个CSI插件,来为kubelet提供CSI Node服务
- 通过statefulset在任意一个节点上再启动一个CSI插件,为External Components提供CSI Controler服务。