在Kubernetes(K8s)中,Container Storage Interface(CSI)模型是用來整合外部儲存系統的標準化方法。CSI模型的主要組成部分包括:
-
CSI Driver(驅動程式):
- CSI Driver 是由儲存提供商編寫的,它實現了 CSI 規範中定義的 API 介面。每個儲存提供商都需要為其產品提供一個或多個 CSI Drivers,以便與 Kubernetes 叢集進行互動。
- CSI Driver 包括一個主外掛(Controller Service)和一個或多個節點外掛(Node Service)。
-
Controller Service(控制器服務):
- 控制器服務通常執行在一個或多個 Kubernetes 控制面節點上,負責執行與儲存系統互動的操作,如建立、刪除持久卷,以及執行快照等。
- 控制器服務透過 gRPC 介面與 Kubernetes API 伺服器通訊。
-
Node Service(節點服務):
- 節點服務執行在每個 Kubernetes 工作節點上,負責執行與儲存系統相關的本地操作,如掛載和解除安裝卷。
- 節點服務同樣透過 gRPC 介面與 Kubernetes 節點上的 kubelet 元件通訊。
-
CSI 外掛註冊:
- 在 Kubernetes 中註冊 CSI 外掛涉及到將 CSI Driver 註冊到叢集中。通常,這涉及部署一個或多個 DaemonSet 或者 StatefulSet 來確保每個節點上都有必要的 CSI 元件執行。
- 註冊過程也可能包括配置 RBAC 許可權,以確保 CSI 元件可以訪問必要的 Kubernetes API。
-
Storage Class(儲存類):
- 儲存類定義瞭如何為 PersistentVolumeClaims (PVC) 建立 PersistentVolumes (PV)。CSI Driver 可以透過儲存類來指定其 provisioner 名稱,從而讓 Kubernetes 知道如何使用特定的 CSI Driver 來動態配置儲存。
- 儲存類還可以包含特定於儲存系統的引數,比如效能級別或者複製策略等。
-
Pod 生命週期中的 CSI 卷管理:
- 在 Pod 的生命週期中,CSI 卷的管理涉及幾個步驟:
- Provision/Delete(創盤/刪盤):根據 PVC 請求建立新的儲存卷或在 PVC 刪除時銷燬儲存卷。
- Attach/Detach(掛接/摘除):將儲存卷附加到節點上或從節點上分離。
- Mount/Unmount(掛載/解除安裝):將儲存卷掛載到 Pod 的檔案系統中或將儲存卷解除安裝。
- 在 Pod 的生命週期中,CSI 卷的管理涉及幾個步驟:
綜上所述,透過這些元件和流程,CSI 模型為 Kubernetes 提供了一個統一的方法來處理各種儲存系統,從而增加了儲存解決方案的靈活性和可移植性。此外,CSI 模型還幫助解耦了 Kubernetes 與儲存系統的實現細節,使得儲存提供商可以更輕鬆地更新和維護他們的解決方案,而無需更改 Kubernetes 的核心程式碼。