- 一、CSI Driver 如何註冊到 kubelet 的
- 1、啟動 CSI Node Server
- 2、啟動 Node Driver Registrar
- 3、Node Driver Registrar 獲取 CSI Plugin 資訊
- 4、Kubelet 發現 Node Driver Registrar
- 5、Kubelet 獲取 Node Server 資訊
- 6、更新 Node 和 CSINode 物件
- 7、通知註冊狀態
一、CSI Driver 如何註冊到 kubelet 的
1、啟動 CSI Node Server
-
CSI Node Server 啟動,CSI plugin(CSI driver)建立 Unix Domain Socket (
csi-driver.sock
)。 -
位置 : 通常位於
/var/lib/kubelet/plugins/<drivername.example.com>/csi.sock
。 -
用途 : 用於後續 kubelet 與 CSI Node Server 之間的通訊。
2、啟動 Node Driver Registrar
-
Node Driver Registrar 啟動,並建立 Unix Domain Socket (
reg.sock
)。 -
位置 : 通常位於
/var/lib/kubelet/plugins_registry/<drivername.example.com>-reg.sock
。 -
用途 : 用於 kubelet 與 Node Driver Registrar 之間的通訊。
-
實現邏輯 : Node Driver Registrar 實現 GetInfo 和 NotifyRegistrationStatus 方法。
3、Node Driver Registrar 獲取 CSI Plugin 資訊
-
Node Driver Registrar 連線到 CSI plugin(CSI driver) 的 Unix Domain Socket (
csi-driver.sock
)。 -
Node Driver Registrar 呼叫 Identity Server 的 GetPluginInfo 方法以獲取 獲取 CSI plugin 的 driver 名稱。
-
通訊方式 : Unix Domain Socket 透過 gRPC 協議。
4、Kubelet 發現 Node Driver Registrar
-
Kubelet 的pluginManager 模組透過 Watcher 監控 /var/lib/kubelet/plugins_registry/ 目錄。
-
Kubelet 發現 Node Driver Registrar 的 Unix Domain Socket (reg.sock)。
-
Kubelet 透過 Unix Domain Socket (reg.sock) 呼叫 GetInfo 方法以獲取 csi plugin 型別、csi plugin 的 driver 名稱、csi plugin 暴露的 grpc 服務 socket 地址以及 csi plugin 支援的版本。
-
通訊方式 : Unix Domain Socket 透過 gRPC 協議。
5、Kubelet 獲取 Node Server 資訊
-
Kubelet 使用從 Node Driver Registrar 獲取的 socket 地址 (csi-driver.sock) 連線到 CSI Node Server。
-
Kubelet 呼叫 Node Server 的 NodeGetInfo 方法以獲取 Node Server 的詳細資訊,如nodeID、儲存卷最大掛載數、拓撲資訊。
-
通訊方式 : Unix Domain Socket 透過 gRPC 協議。
6、更新 Node 和 CSINode 物件
-
Kubelet 根據從 Node Server 獲取的資訊更新 Node 節點的 Annotations。
-
Kubelet 建立或更新 CSINode 物件以記錄 Node Server 支援的 CSI Plugin 資訊。
7、通知註冊狀態
-
Kubelet 透過 Unix Domain Socket (reg.sock) 呼叫 Node-Driver-Registrar 的 NotifyRegistrationStatus 方法以通知 Node-driver-registrar 註冊是否成功。
-
通訊方式 : Unix Domain Socket 透過 gRPC 協議。