K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)
背景
許多儲存系統提供了建立儲存卷“快照”(snapshot)的能力,以防止資料丟失。快照可以替代傳統的備份系統來備份和還原主要資料和關鍵資料。快照能夠快速備份資料(例如,建立GCE PD快照僅需要幾分之一秒), 並提供快速恢復時間目標(RTO)和恢復點目標(RPO)。快照還可用於資料複製、分發和遷移。
早在kubernetes 1.8版本中,卷快照系統原型已經發布,其實現位於external-storage( https://github.com/kubernetes-incubator/external-storage)庫中。該原型基於CRD實現,提供了外部controller和provisioner兩個二進位制,支援GCE PD,AWS EBS,OpenStack Cinder,GlusterFS和Kubernetes hostPath等儲存卷。
Kubernetes的社群儲存趨勢是採用CSI實現儲存外掛,本文新增對CSI儲存外掛的快照支援。Kubernetes的趨勢是保持核心API儘可能小,因此我們採用CRD實現,並新增一個外部快照控制器來處理卷快照,external provisioner也會升級以支援從快照建立volume,CSI snapshot規範詳情可以在
檢視。
目標
對於Kubernetes中的第一個快照支援版本,我們僅支援CSI卷外掛按需建立快照。
目標1: 實現標準化的快照操作,支援建立,列出和刪除快照等REST API。目前,API將使用CRD(CustomResourceDefinitions)實現。
目標2: 實現CSI卷快照支援。external-snapshotter將與CSI卷外掛的其他外部元件(例如,external-attacher, external-provisioner)一起部署。
目標3: 提供一種從快照建立新儲存卷和還原現有卷的便捷方法。
以下目標本階段將不會實現,但將在稍後階段考慮。
目標4: 透過提供pre/post快照鉤子來凍結/解凍應用程式和/或解除安裝/掛載檔案系統,從而提供應用程式一致性快照。
目標5: 提供更高階別的管理,例如備份和還原pod和statefulSet,以及建立一致性的快照組。
詳細設計
在此提案中,卷快照被視為Kubernetes管理的另一種儲存資源。 因此,快照API和控制器遵循現有卷管理的設計模式。
VolumeSnapshot
VolumeSnapshotContent
VolumeSnapshotClass
三個API, 它們與PersistentVolumeClaim和PersistentVolume以及storageClass的結構類似。外部快照控制器的功能類似於in-tree的PV控制器。同時建議在PersistentVolumeClaim(PVC)API中新增新的資料來源結構,以支援從快照還原資料卷。 以下部分將詳細介紹API和控制器設計。
Snapshot API設計
VolumeSnapshot和VolumeSnapshotContent API是在PersistentVolumeClaim和PersistentVolume之後建模設計的。 在第一個版本中,VolumeSnapshot生命週期完全獨立於其來源(PVC)。 刪除PVC / PV時,相應的VolumeSnapshot和VolumeSnapshotContent物件將繼續存在。 但是,對於某些卷外掛,快照依賴於其儲存卷。 在未來的版本中,我們計劃進行完整的生命週期管理,以便更好地處理快照與其卷之間的關係。(例如,新增finalizer,當有快照依賴於儲存卷時,可防止儲存卷被刪除)。
VolumeSnapshot物件
VolumeSnapshotContent物件
VolumeSnapshotClass物件
我們將新增新的API物件VolumeSnapshotCl ass,而不是複用現有的StorageClass,以避免在snapshot和volume之間混合引數。每個CSI卷外掛都可以擁有自己的預設VolumeSnapshotClass。如果未提供VolumeSnapshotClass,則將使用預設值。VolumeSnapshotClass將為快照新增新的引數。
如下圖所示, CSI快照控制器體系結構由external-snapshotter(外部快照器)組成,external-snapshotter透過套接字與out-of-tree CSI卷外掛進行通訊(預設情況下為/ run / csi / socket,可由-csi-address配置)。external-snapshotter是Kubernetes實現容器儲存介面(CSI)的一部分。 它是一個外部控制器,用於監視VolumeSnapshot和VolumeSnapshotContent物件並建立/刪除快照。
-
通常 external-snapshotter使用ControllerGetCapabilities來驗證CSI驅動程式是否支援CREATE_DELETE_SNAPSHOT呼叫。
-
external-snapshotter負責建立/刪除快照及繫結VolumeSnapshot和VolumeSnapshotContent物件。它遵循kubernetes控制器模式並使用informer來監視VolumeSnapshot和VolumeSnapshotContent建立/更新/刪除事件。透過Snapshotter == <CSI卷外掛名字>過濾掉不符合的VolumeSnapshot例項,並使用具有指數退避的工作佇列處理這些事件。
-
對於動態建立的快照,它應該關聯某個VolumeSnapshotClass。使用者可以在VolumeSnapshot API物件中顯式指定VolumeSnapshotClass。如果使用者未指定VolumeSnapshotClass,則將使用admin建立的預設VolumeSnapshotClass。這和使用預設的StorageClass來配置PersistentVolumeClaim相似。
-
對於靜態繫結快照,user/admin必須為VolumeSnapshot和VolumeSnapshotContent正確指定雙向指標,以便控制器知道如何繫結它們。否則,如果VolumeSnapshot指向不存在的VolumeSnapshotContent,或者是VolumeSnapshotContent並未指向VolumeSnapshot,則將VolumeSnapshot設定為錯誤狀態。
-
針對每一個CSI卷外掛,external-snapshotter、external-attacher和external-provisioner執行在同一個sidecar中。
-
在當前設計中,當儲存系統無法建立快照時,將不會在控制器中執行重試。這是因為當快照建立的時間很重要時,使用者可能不想在獲取一致性快照或計劃快照時重試。在將來的版本中,將新增maxRetries標誌或重試終止時間戳,以允許使用者控制是否需要重試。
相關服務請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908804/viewspace-2639041/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)K8S
- K8S 1.12大特性最快最深度解析:通過ComponentConfig更輕鬆安裝和升級K8S
- 解析最快的dns 最快最穩定的dnsDNS
- kubernetes/k8s CSI分析-容器儲存介面分析K8S
- 史上最快、最強大的 Gradle 5.0 釋出,新特性全解!Gradle
- Go 1.12 版本的新特性Go
- 在K8S中,CSI模型有哪些?K8S模型
- k8s CSI 外掛註冊原理K8S
- [k8s] k8s基於csi使用rbd儲存K8S
- K8S儲存外掛-FlexVolume && CSIK8SFlex
- 深度解析DDR3記憶體特性記憶體
- 微服務效率工具 goctl 深度解析(上)微服務Go
- [csi]淺聊ceph-csi元件元件
- XML解析-最快的方式SAXXML
- Kubernetes 1.12帶來卷快照、TLS改進等TLS
- dns設定哪個最好最快 最快最穩定的dnsDNS
- 11g Dataguard中的snapshot standby特性
- oracle 11g中的snapshot standby特性Oracle
- 國內DNS最快的伺服器 解析最快的dnsDNS伺服器
- 深度解析VC中的訊息(上) (轉)
- 如何接入 K8s 持久化儲存?K8s CSI 實現機制淺析K8S持久化
- kubernetes(k8s)K8S
- k8s實踐——名稱空間隔離+request-key機制解決CSI核心態域名解析K8S
- 自建Kubernetes叢集如何使用阿里雲CSI儲存元件阿里元件
- 容器化 RDS:藉助 CSI 擴充套件 Kubernetes 儲存能力套件
- 最值得參考的 Kubernetes (K8S)安裝文件在這裡K8S
- 用更雲原生的方式做診斷|大規模 K8s 叢集診斷利器深度解析K8S
- spring原始碼深度解析— IOC 之 預設標籤解析(上)Spring原始碼
- 國內目前最快的dns 2022解析最快的dnsDNS
- 星球上最詳細的AWR解析報告
- Kubernetes 使用 ceph-csi 消費 RBD 作為持久化儲存持久化
- Oracle 18C新特性之PDB snapshot(快照) CarouselOracle
- 世界上最優秀的程式設計師同時也是活得最快樂的人程式設計師
- ZooKeeper原始碼解析(5)-Snapshot檔案的格式原始碼
- 18C新特性之PDB snapshot Carousel,夠用嗎?
- 【DataGuard】Oracle 11g DataGuard 新特性之 Snapshot Standby DatabaseOracleDatabase
- Kubernetes(K8S)命令指南K8S
- 【真正的ChatGPT】最快速、最靈活的模型ChatGPT模型