k8s CSI 外掛註冊原理

misakivv發表於2024-09-02

目錄
  • 一、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 的

img

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 協議。

相關文章