StorageClass
是 Kubernetes 中定義存儲類別的 API 對象。它包含以下關鍵部分:
供應器(Provisioner):指定哪個供應器負責動態創建 PV。對于 k8s-hostpath-provisioner,這個值是 torchbox.com/hostpath。
參數(Parameters):供應器所需的配置參數,例如 pvDir,它指定了在主機上用于存儲卷的根路徑。
回收策略(Reclaim Policy):定義 PV 在釋放后是刪除還是保留。
卷綁定模式(Volume Binding Mode):控制 PVC 綁定到 PV 的時機。
k8s-hostpath-provisioner
k8s-hostpath-provisioner 是一個為 Kubernetes 設計的動態存儲供應器,它允許集群使用本地或網絡文件系統的存儲資源。這個項目特別適用于以下情況:
當 Kubernetes 原生不支持某些存儲系統時,例如 ceph-fuse。
當需要避免將持久卷(PV)的憑證暴露給用戶時。
當想要集中管理網絡存儲配置時,例如在 /etc/fstab 中設置,使得存儲配置的變更更加靈活。
torchbox.com/hostpath
torchbox.com/hostpath 是 k8s-hostpath-provisioner 項目中定義的供應器的唯一標識符。在 Kubernetes 的 StorageClass 中使用這個標識符來告訴系統使用 k8s-hostpath-provisioner 來處理存儲請求。這個名稱是供應器的“品牌”,用于區分不同的存儲供應器。
使用流程
部署網絡存儲:首先,在每個 Kubernetes 節點上掛載網絡存儲。這可以通過 systemd 掛載單元或 /etc/fstab 完成,并且必須在所有主機上使用相同的掛載路徑。
創建 StorageClass:定義一個 StorageClass 對象,指定 provisioner 為 torchbox.com/hostpath,并設置所需的參數,如 pvDir。
啟動 k8s-hostpath-provisioner:可以作為集群外部的獨立程序運行,或作為 Kubernetes 集群中的一個部署運行。它將監聽 PVC 的創建請求,并為它們動態創建 PV。
創建 PVC:用戶或應用程序創建一個 PVC,請求特定的存儲資源。如果 PVC 中指定了 StorageClass,則使用該類定義的供應器和參數來供應存儲。
動態供應 PV:k8s-hostpath-provisioner 檢測到 PVC 請求后,根據 StorageClass 中定義的規則,在網絡存儲上創建相應的 PV,并綁定到 PVC。
使用存儲:應用程序通過 PVC 掛載 PV,從而使用請求的存儲資源。
配置的關聯
在 k8s-hostpath-provisioner 的上下文中,StorageClass 中配置的 pvDir 和 k8s-hostpath-provisioner 掛載的卷之間的關系和作用:
-
StorageClass 中的 pvDir 參數:
pvDir是StorageClass定義中的一個參數,它指定了在網絡存儲上用于創建 PV 的根目錄路徑。- 這個路徑必須位于所有 Kubernetes 節點上都已掛載的網絡文件系統上。
- 當
k8s-hostpath-provisioner接收到 PVC 請求時,它會在pvDir指定的路徑下為該 PVC 創建一個子目錄,用于存儲 PVC 的數據。
-
k8s-hostpath-provisioner 掛載的卷:
- 在
k8s-hostpath-provisioner的部署配置中,需要掛載網絡存儲卷,這通常在deployment.yaml中定義。 - 這個掛載卷的路徑應該指向網絡存儲上的某個位置,通常是
pvDir指定的相同路徑或其父目錄。 - 這樣配置的目的是讓
k8s-hostpath-provisioner能夠訪問網絡存儲,并在該存儲上創建和管理 PV。
- 在
-
二者的關系:
pvDir作為StorageClass的一部分,定義了存儲卷的“邏輯”位置,即在網絡存儲上應該創建 PV 數據的位置。k8s-hostpath-provisioner掛載的卷則提供了對這些存儲位置的“物理”訪問,使得供應器能夠操作這些存儲資源。- 當
k8s-hostpath-provisioner根據 PVC 請求創建 PV 時,它會在掛載的卷(即網絡存儲)的pvDir路徑下創建具體的存儲卷。
-
工作流程示例:
- 假設網絡存儲已經掛載在所有節點的
/ceph/pvs路徑上。 - 在
StorageClass中配置pvDir: /ceph/pvs。 k8s-hostpath-provisioner的部署配置中也掛載了/ceph/pvs路徑。- 當 PVC 請求到來時,
k8s-hostpath-provisioner在/ceph/pvs下為 PVC 創建一個子目錄,例如/ceph/pvs/pvc-1234。 - PVC 綁定到這個新創建的 PV,應用程序就可以通過 PVC 使用這個存儲卷了。
- 假設網絡存儲已經掛載在所有節點的
通過這種方式,StorageClass 中的 pvDir 參數和 k8s-hostpath-provisioner 掛載的卷協同工作,確保了存儲卷的正確創建和管理。這種設計允許集中管理網絡存儲配置,同時保持了 Kubernetes 存儲供應的靈活性和動態性。