【云駐共創】華為云云原生鉆石課程04:Kubernetes存儲架構原理深度剖析(上)
學完本課程后,您將能夠:
了解Kubernetes容器存儲發展歷程
了解Kubernetes持久化存儲原理
了解PV/PVC的工作原理
了解華為云CCE云原生存儲解決方案Everest的架構
1.Kubernetes容器存儲發展歷程
1.1 簡介
應用程序生成的數據可簡單分為兩類:
臨時數據:經過程序處理生成的中間態數據,不需要保留:
結果數據:經過程序處理生成的最終態數據,需要永久保留。k8s初期為存算分離所做的解調設計Volume,采用強耦合、靈活性差的in-tree模式,雖然已經讓用戶專注于業務功能設計。但這類存儲卷的生命周期是跟隨pod的,只能用作存儲臨時數據,無法做為最終數據使用。
隨著k8s的不斷成熟,為支持更多的應用場景,提供了一種脫離P0d生命周期的、用戶可管理的存儲抽象設計低耦合、靈話性更強的PersistentVolume,/PersistentVolumeClaim。
1.2 Kubernetes容器存儲能力簡介
2.Kubernetes持久化存儲體系
2.1 簡介
k8s持久化存儲體系包括:
PersistentVolume:簡稱pv,持久化存儲,是k8s為云原生應用提供一種擁有獨立生命周期的、用戶可管理的存儲抽象設計。
PersistentVolumeClaim:簡稱pvc,持久化存儲聲明,是K8S為解耦云原生應用和數據存儲而設計的,通過PVC可以讓資源管控更細更靈活、團隊職責分離、應用模板更通用,進一步解除了用戶被云平臺鎖定的顧慮。
StorageClass:簡稱sc,存儲類,是K8S平臺為存儲提供商提供存儲接入的一種聲明,通過sc和相應的存儲插件(csi)為容器應用提供動態分配存儲卷的能力。
Driver Plugin:存儲驅驅動插件,由存儲提供商提供,能夠對接網絡存儲,并管理持久存儲卷的生命周期。
2.2 持久化存儲優勢分析
與臨時存儲相比,PV具有:
每個存儲卷可以擁有獨立的生命周期,不再跟隨pod創建和銷毀;
使能計算+數據的遷移,也即:存儲卷中的數據可以隨pod在集群中遷移;
多個不同的pod可以共享同一個存儲卷(存儲卷支持共享);
引入PVC/SC后,帶來更大的收益:
資源管控更加靈活,可適應資源管控嚴格、寬松的不同場景;
團隊職責更加明確,開發人員只需考慮存儲需求(O、容量、訪問模式等),不需要關注存儲類型,甚至品牌;
靈活的擴展一些增強功能,比如:擴容、快照能力;
應用模板更加通用,可通過參數配置,適應不同類型的k8s平臺;
進一步消除用戶被存儲提供商、云平臺鎖定的顧慮。
3.PV/PVC的工作原理剖析
3.1 圖示兩種pv/pvc的分配方式
其中volume為存儲中的數據卷,通過pv/pvc綁定即可為用戶提供存儲服務。
3.2 靜態卷
volume靜態卷與pv/pvc綁定后,部署pod應用后即可使用數據卷,如果pvc刪除后,pv通過操作變更為retain、recycle等狀態。
3.2.1 pvc狀態轉換
當pv綁定volume時,處于Avaliable狀態。
當pvc為綁定pv時,處于Pending狀態。
當pvc綁定pv時,處于Bound狀態。
當pvc綁定pv被刪除,處于lost狀態。
當pvc再次綁定pv,處于Bound。
3.2.2 pv的狀態轉換
3.3 pv/pvc綁定原理分析
pvc刷選pv的流程(findBestMatchForClaim)
通過size刷選恰當的pv;
通過volumeMode刷選一致的pv;
通過Label刷選合適的pv;
通過sc刷選符合的pv;
通過AccessMode刷選符合條件的pv;
返回并綁定符合pvc條件,且size最小的pv。
3.4 pvc綁定pv流程解讀
3.5 Kubernetes中pv/pvc相關的代碼
Kubernetes中pv/pvc相關的代碼在下圖位置,如果有興趣請自行查閱。
3.6 pv/pvc使用場景示例
pv/pvc適合在資源管理比較嚴格的場景:
開發人員向集群管理員申請存儲需求;
存儲管理員按需求分配存儲;
集群管理員按照分配的存儲創建pv;
開發人員創建pvc,pvc關聯合適的pv;
開發人員創建pod,并且pod使用pvc。
4.華為云CCE云原生存儲解決方案Everest的架構介紹
4.1 Everest架構介紹
部署在系統命名空間下(kube-system)
Everest管理面:Everest-csi-controller
1. Csi-external-provisioner:負責云存儲卷的創建
2. Csi-external-resizer:負責云存儲卷的擴容
3. Csi-externa-attacher:負責云盤的掛卷/卸卷
4. Csi-external-snapshotter:負責云盤的快照
Everest數據面:Everest-csi-driver(agent)
1. EvS-csi-driver:負責將云盤格式化,并掛給pod使用
2. Sfs-csi-driver:負責將文件存儲卷掛給pod使用
3. Sfsturbo-csi-driver:負責將極速文件系統掛給pod使用使用
4. Obs-csi-driver:負責將對象存儲的并行文件系統準備好,并給pod使用
4.2 云原生應用使用存儲的推薦方案
4.3 部署使用static pv的有狀態應用etcd
本文整理自華為云社區【內容共創】活動第13期。
https://bbs.huaweicloud.com/blogs/330939
任務21.華為云云原生鉆石課程04:Kubernetes存儲架構原理深度剖析(上)
Kubernetes 云原生
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。