深究Kubernetes源码-存储-6 Extenal Provisioner机制流程分析
分析基于kubernetes v1.26
ProvisionController属于kubernetes-csi/external-provisioner项目https://github.com/kubernetes-csi/external-provisioner,核心功能是处理CSI Volume Plugin PV Create/Delete,是Kubernetes到CSI Plugin之间的适配层,Kubernetes ControllerManager没有类似于Kubelet一样的DevicePlugin注册机制,因此需要以SideCar方式,从Kubeapiserver获取PV/PVC,然后公共gPRC调用CSI Plugin。
首先看下核心类图模块:

主要通过csiProvisioner实现Provisioner接口完成PV的Provision和Delete,主要流程如下,主要启动协程同步PV和PVC。

syncClaim判断PVC是否需要动态创建PV,若需要则调用csiClient通过gRPC CreateVolume调用CSI Plugin创建Volume,并生成PV
Provision的基本条件是PVC包含"volume.kubernetes.io/storage-provisioner: {driverName}"或"volume.beta.kubernetes.io/storage-provisioner: {driverName}" Annotation的 PVC,例如OpenStack Cinder CSI则处理包含volume.beta.kubernetes.io/storage-provisioner: cinder.csi.openstack.org Annotation 的PVC。

syncVolume判断Volume是否需要释放删除,如需要释放则只需删除操作。
