溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

發(fā)布時間:2020-06-08 07:48:49 來源:網(wǎng)絡(luò) 閱讀:511 作者:容器魔方 欄目:云計算

背景

許多存儲系統(tǒng)提供了創(chuàng)建存儲卷“快照”(snapshot)的能力,以防止數(shù)據(jù)丟失??煺湛梢蕴娲鷤鹘y(tǒng)的備份系統(tǒng)來備份和還原主要數(shù)據(jù)和關(guān)鍵數(shù)據(jù)??煺漳軌蚩焖賯浞輸?shù)據(jù)(例如,創(chuàng)建GCE PD快照僅需要幾分之一秒), 并提供快速恢復(fù)時間目標(RTO)和恢復(fù)點目標(RPO)??煺者€可用于數(shù)據(jù)復(fù)制、分發(fā)和遷移。

早在kubernetes 1.8版本中,卷快照系統(tǒng)原型已經(jīng)發(fā)布,其實現(xiàn)位于external-storage(https://github.com/kubernetes-incubator/external-storage)庫中。該原型基于CRD實現(xiàn),提供了外部controller和provisioner兩個二進制,支持GCE PD,AWS EBS,OpenStack Cinder,GlusterFS和Kubernetes hostPath等存儲卷。

Kubernetes的社區(qū)存儲趨勢是采用CSI實現(xiàn)存儲插件,本文添加對CSI存儲插件的快照支持。Kubernetes的趨勢是保持核心API盡可能小,因此我們采用CRD實現(xiàn),并添加一個外部快照控制器來處理卷快照,external provisioner也會升級以支持從快照創(chuàng)建volume,CSI snapshot規(guī)范詳情可以在https://github.com/container-storage-interface/spec/pull/224查看。

目標

對于Kubernetes中的第一個快照支持版本,我們僅支持CSI卷插件按需創(chuàng)建快照。

目標1:實現(xiàn)標準化的快照操作,支持創(chuàng)建,列出和刪除快照等REST API。目前,API將使用CRD(CustomResourceDefinitions)實現(xiàn)。

目標2:實現(xiàn)CSI卷快照支持。external-snapshotter將與CSI卷插件的其他外部組件(例如,external-attacher, external-provisioner)一起部署。

目標3:提供一種從快照創(chuàng)建新存儲卷和還原現(xiàn)有卷的便捷方法。

以下目標本階段將不會實現(xiàn),但將在稍后階段考慮。

目標4:通過提供pre/post快照鉤子來凍結(jié)/解凍應(yīng)用程序和/或卸載/掛載文件系統(tǒng),從而提供應(yīng)用程序一致性快照。

目標5:提供更高級別的管理,例如備份和還原pod和statefulSet,以及創(chuàng)建一致性的快照組。

詳細設(shè)計

在此提案中,卷快照被視為Kubernetes管理的另一種存儲資源。 因此,快照API和控制器遵循現(xiàn)有卷管理的設(shè)計模式。

VolumeSnapshot

VolumeSnapshotContent

VolumeSnapshotClass

三個API,它們與PersistentVolumeClaim和PersistentVolume以及storageClass的結(jié)構(gòu)類似。外部快照控制器的功能類似于in-tree的PV控制器。同時建議在PersistentVolumeClaim(PVC)API中添加新的數(shù)據(jù)源結(jié)構(gòu),以支持從快照還原數(shù)據(jù)卷。 以下部分將詳細介紹API和控制器設(shè)計。

Snapshot API設(shè)計

VolumeSnapshot和VolumeSnapshotContent API是在PersistentVolumeClaim和PersistentVolume之后建模設(shè)計的。 在第一個版本中,VolumeSnapshot生命周期完全獨立于其來源(PVC)。 刪除PVC / PV時,相應(yīng)的VolumeSnapshot和VolumeSnapshotContent對象將繼續(xù)存在。 但是,對于某些卷插件,快照依賴于其存儲卷。 在未來的版本中,我們計劃進行完整的生命周期管理,以便更好地處理快照與其卷之間的關(guān)系。(例如,添加finalizer,當(dāng)有快照依賴于存儲卷時,可防止存儲卷被刪除)。

VolumeSnapshot對象

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

VolumeSnapshotContent對象

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

VolumeSnapshotClass對象

我們將添加新的API對象VolumeSnapshotClass,而不是復(fù)用現(xiàn)有的StorageClass,以避免在snapshot和volume之間混合參數(shù)。每個CSI卷插件都可以擁有自己的默認VolumeSnapshotClass。如果未提供VolumeSnapshotClass,則將使用默認值。VolumeSnapshotClass將為快照添加新的參數(shù)。

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

Snapshot Controller 設(shè)計要點

如下圖所示,CSI快照控制器體系結(jié)構(gòu)由external-snapshotter(外部快照器)組成,external-snapshotter通過套接字與out-of-tree CSI卷插件進行通信(默認情況下為/ run / csi / socket,可由-csi-address配置)。external-snapshotter是Kubernetes實現(xiàn)容器存儲接口(CSI)的一部分。 它是一個外部控制器,用于監(jiān)視VolumeSnapshot和VolumeSnapshotContent對象并創(chuàng)建/刪除快照。

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

通常external-snapshotter使用ControllerGetCapabilities來驗證CSI驅(qū)動程序是否支持CREATE_DELETE_SNAPSHOT調(diào)用。

external-snapshotter負責(zé)創(chuàng)建/刪除快照及綁定VolumeSnapshot和VolumeSnapshotContent對象。它遵循kubernetes控制器模式并使用informer來監(jiān)視VolumeSnapshot和VolumeSnapshotContent創(chuàng)建/更新/刪除事件。通過Snapshotter == <CSI卷插件名字>過濾掉不符合的VolumeSnapshot實例,并使用具有指數(shù)退避的工作隊列處理這些事件。

對于動態(tài)創(chuàng)建的快照,它應(yīng)該關(guān)聯(lián)某個VolumeSnapshotClass。用戶可以在VolumeSnapshot API對象中顯式指定VolumeSnapshotClass。如果用戶未指定VolumeSnapshotClass,則將使用admin創(chuàng)建的默認VolumeSnapshotClass。這和使用默認的StorageClass來配置PersistentVolumeClaim相似。

對于靜態(tài)綁定快照,user/admin必須為VolumeSnapshot和VolumeSnapshotContent正確指定雙向指針,以便控制器知道如何綁定它們。否則,如果VolumeSnapshot指向不存在的VolumeSnapshotContent,或者是VolumeSnapshotContent并未指向VolumeSnapshot,則將VolumeSnapshot設(shè)置為錯誤狀態(tài)。

針對每一個CSI卷插件,external-snapshotter、external-attacher和external-provisioner運行在同一個sidecar中。

在當(dāng)前設(shè)計中,當(dāng)存儲系統(tǒng)無法創(chuàng)建快照時,將不會在控制器中執(zhí)行重試。這是因為當(dāng)快照創(chuàng)建的時間很重要時,用戶可能不想在獲取一致性快照或計劃快照時重試。在將來的版本中,將添加maxRetries標志或重試終止時間戳,以允許用戶控制是否需要重試。

相關(guān)服務(wù)請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI