深究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調(diào)用CSI Plugin。
首先看下核心類圖模塊:

主要通過csiProvisioner實現(xiàn)Provisioner接口完成PV的Provision和Delete,主要流程如下,主要啟動協(xié)程同步PV和PVC。

syncClaim判斷PVC是否需要動態(tài)創(chuàng)建PV,若需要則調(diào)用csiClient通過gRPC CreateVolume調(diào)用CSI Plugin創(chuàng)建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是否需要釋放刪除,如需要釋放則只需刪除操作。
