您好,登錄后才能下訂單哦!
目標
目前在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 ++”(https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md)中的類似想法來解決這個問題。
注意:為了使用此數據源功能,用戶/管理員需要更新到可以識別快照數據源的新external provisioner。否則,將忽略數據源并創建空存儲卷。
示例
本示例基于kubernetes 1.12版本啟動的local-up環境,使用csi-hostpath作為測試插件,來演示snapshot的創建以及從snapshot還原數據卷。示例所使用的yaml可在https://github.com/wackxu/csi-snapshot-test找到。
步驟一:下載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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。