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

CCE_huawei發表於2019-03-25

目標

目前在Kuberentes中,卷外掛僅支援配置空的儲存卷。隨著新的儲存功能(包括卷快照)的提出,因此需要支援配置卷時資料填充以。例如,可以從快照源建立卷,也可以從其他卷源。根據建立卷的來源,有兩種情況:

1、卷配置程式可以識別資料來源並能夠直接從資料來源建立卷(例如,將快照還原到卷)。

2、卷配置程式無法識別資料來源,並建立空儲存卷。另一個外部元件(資料填充程式)可以監視卷建立並可以將資料填充/匯入到已配置的卷。只有在將資料填充到卷後,PVC才可以被使用。

考慮到可以有許多不同型別的資料來源用於將資料填充到卷中,因此我們建議在PersistentVolumeClaimSpec中新增一個通用的“DataSource”欄位來表示不同型別的資料來源。

PVC API 變化

我們將在PVC中新增DataSource欄位,以表示預先填充到預配置卷的資料來源。對於DataSource欄位,我們定義一個新型別“TypedLocalObjectReference”。它類似於具有附加Kind欄位的“LocalObjectReference”型別,以便支援多種資料來源型別。在alpha版本中,此資料來源應和PVC位於同一名稱空間。此資料來源受限於PVC的同一名稱空間。


設計細節

在第一個alpha版本中,我們僅支援來自Snapshot的資料來源。因此,DataSource中的Kind必須是“VolumeSnapshot”。在這種情況下,provisioner 應該在一個步驟中完成配置卷並填充資料。目前我們還不需要外部資料填充程式。

對於需要外部資料填充程式的其他型別的資料來源,卷建立和資料填充是兩個單獨的步驟。 只有在資料準備就緒時,才能將PVC / PV標記為就緒(繫結),使用者可以開始使用它們。我們正在制定一個單獨的提案,使用“Pod Ready ++”(%2B%2B.md)中的類似想法來解決這個問題。

注意:為了使用此資料來源功能,使用者/管理員需要更新到可以識別快照資料來源的新external provisioner。否則,將忽略資料來源並建立空儲存卷。

示例

本示例基於kubernetes 1.12版本啟動的local-up環境,使用csi-hostpath作為測試外掛,來演示snapshot的建立以及從snapshot還原資料卷。示例所使用的yaml可在找到。

步驟一:下載kubernetes 1.12版本,修改hack/local-up-cluster.sh指令碼,如下:

第26行修改如下,允許以特權形式啟動container。

第131行新增下列,開啟VolumeSnapshotDataSource特性開關。

然後我們就可以啟動local-up叢集。

步驟二:部署external-provisioner、external-snapshotter、external-attacher、driver-registrar、hostpathplugin等sidecar容器。部署指令碼包含serviceaccount、clusterrole等所需要的全部資源。

 檢視csi-pod,容器全部處於執行狀態。


步驟三:建立storageClass,以及pvc,檢視pvc以及建立的pv狀態,均已處於bound狀態。


步驟四:建立pod,使用pv,同時往pv中寫入資料。


步驟五:建立volumeSnapshotClass,然後對csi-pvc建立snapshot

檢視建立的volumeSnapshotContent具體資訊。

驗證snapshot是否建立成功。


步驟六:建立csi-restore-pvc,新增我們此前建立的snapshot為資料來源。

檢視pvc,pv狀態

檢視pv詳細資訊,volumeHandle為93119a08-b754-11e8-97ca-0242ac110003,

驗證pv資料是否預填充,我們可以看到建立出來的pv,已有資料填充。

相關服務請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908804/viewspace-2639216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章