1. 程式人生 > 其它 >【K8s概念】卷快照

【K8s概念】卷快照

參考:https://kubernetes.io/zh/docs/concepts/storage/volume-snapshots/

在 Kubernetes 中,卷快照是一個儲存系統上卷的快照,本文假設你已經熟悉了 Kubernetes 的 持久卷。

介紹

與 PersistentVolume 和 PersistentVolumeClaim 兩個 API 資源用於給使用者和管理員提供卷類似,VolumeSnapshotContent 和 VolumeSnapshot 兩個 API 資源用於給使用者和管理員建立卷快照。

VolumeSnapshotContent 是一種快照,從管理員已提供的叢集中的卷獲取。就像持久卷是叢集的資源一樣,它也是叢集中的資源。

VolumeSnapshot 是使用者對於卷的快照的請求。它類似於持久卷宣告。

VolumeSnapshotClass 允許指定屬於 VolumeSnapshot 的不同屬性。在從儲存系統的相同捲上獲取的快照之間,這些屬性可能有所不同,因此不能通過使用與 PersistentVolumeClaim 相同的 StorageClass 來表示。

卷快照能力為 Kubernetes 使用者提供了一種標準的方式來在指定時間點 複製卷的內容,並且不需要建立全新的卷。例如,這一功能使得資料庫管理員 能夠在執行編輯或刪除之類的修改之前對資料庫執行備份。

當使用該功能時,使用者需要注意以下幾點:

1.API 物件 VolumeSnapshot,VolumeSnapshotContent 和 VolumeSnapshotClass 是 CRDs, 不屬於核心 API。
2.VolumeSnapshot 支援僅可用於 CSI 驅動。
3.作為 VolumeSnapshot 部署過程的一部分,Kubernetes 團隊提供了一個部署於控制平面的快照控制器, 並且提供了一個叫做 csi-snapshotter 的邊車(Sidecar)輔助容器,和 CSI 驅動程式一起部署。 快照控制器監視 VolumeSnapshot 和 VolumeSnapshotContent 物件, 並且負責建立和刪除 VolumeSnapshotContent 物件。 邊車 csi-snapshotter 監視 VolumeSnapshotContent 物件, 並且觸發針對 CSI 端點的 CreateSnapshot 和 DeleteSnapshot 的操作。
4.還有一個驗證性質的 Webhook 伺服器,可以對快照物件進行更嚴格的驗證。 Kubernetes 發行版應將其與快照控制器和 CRD(而非 CSI 驅動程式)一起安裝。 此伺服器應該安裝在所有啟用了快照功能的 Kubernetes 叢集中。
5.CSI 驅動可能實現,也可能沒有實現卷快照功能。CSI 驅動可能會使用 csi-snapshotter 來提供對卷快照的支援。詳見 CSI 驅動程式文件
6.Kubernetes 負責 CRDs 和快照控制器的安裝。

卷快照和卷快照內容的生命週期

VolumeSnapshotContents 是叢集中的資源。VolumeSnapshots 是對於這些資源的請求。VolumeSnapshotContents 和 VolumeSnapshots 之間的互動遵循以下生命週期:

供應卷快照

快照可以通過兩種方式進行配置:預配置或動態配置。

預配置

叢集管理員建立多個 VolumeSnapshotContents。它們帶有儲存系統上實際卷快照的詳細資訊,可以供叢集使用者使用。它們存在於 Kubernetes API 中,並且能夠被使用。

動態的

可以從 PersistentVolumeClaim 中動態獲取快照,而不用使用已經存在的快照。 在獲取快照時,卷快照類 指定要用的特定於儲存提供程式的引數。

繫結

在預配置和動態配置場景下,快照控制器處理繫結 VolumeSnapshot 物件和其合適的 VolumeSnapshotContent 物件。繫結關係是一對一的。

在預配置快照繫結場景下,VolumeSnapshotContent 物件建立之後,才會和 VolumeSnapshot 進行繫結。

快照源的永續性卷宣告保護

這種保護的目的是確保在從系統中獲取快照時,不會將正在使用的 PersistentVolumeClaim API 物件從系統中刪除(因為這可能會導致資料丟失)。

如果一個 PVC 正在被快照用來作為源進行快照建立,則該 PVC 是使用中的。如果使用者刪除正作為快照源的 PVC API 物件,則 PVC 物件不會立即被刪除掉。相反,PVC 物件的刪除將推遲到任何快照不在主動使用它為止。當快照的 Status 中的 ReadyToUse值為 true 時,PVC 將不再用作快照源。

當從 PersistentVolumeClaim 中生成快照時,PersistentVolumeClaim 就在被使用了。如果刪除一個作為快照源的 PersistentVolumeClaim 物件,這個 PersistentVolumeClaim 物件不會立即被刪除的。相反,刪除 PersistentVolumeClaim 物件的動作會被放棄,或者推遲到快照的 Status 為 ReadyToUse時再執行。

刪除

刪除 VolumeSnapshot 物件觸發刪除 VolumeSnapshotContent 操作,並且 DeletionPolicy 會緊跟著執行。如果 DeletionPolicy 是 Delete,那麼底層儲存快照會和 VolumeSnapshotContent 一起被刪除。如果 DeletionPolicy 是 Retain,那麼底層快照和 VolumeSnapshotContent 都會被保留。

卷快照

每個 VolumeSnapshot 包含一個 spec 和一個狀態。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: new-snapshot-test
spec:
  volumeSnapshotClassName: csi-hostpath-snapclass
  source:
    persistentVolumeClaimName: pvc-test

persistentVolumeClaimName 是 PersistentVolumeClaim 資料來源對快照的名稱。 這個欄位是動態配置快照中的必填欄位。

卷快照可以通過指定 VolumeSnapshotClass 使用 volumeSnapshotClassName 屬性來請求特定類。如果沒有設定,那麼使用預設類(如果有)。

如下面例子所示,對於預配置的快照,需要給快照指定 volumeSnapshotContentName 來作為源。 對於預配置的快照 source 中的volumeSnapshotContentName 欄位是必填的。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: test-snapshot
spec:
  source:
    volumeSnapshotContentName: test-content

每個 VolumeSnapshotContent 物件包含 spec 和 status。在動態配置時,快照通用控制器建立 VolumeSnapshotContent 物件。下面是例子:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
  name: snapcontent-72d9a349-aacd-42d2-a240-d775650d2455
spec:
  deletionPolicy: Delete
  driver: hostpath.csi.k8s.io
  source:
    volumeHandle: ee0cfb94-f8d4-11e9-b2d8-0242ac110002
  volumeSnapshotClassName: csi-hostpath-snapclass
  volumeSnapshotRef:
    name: new-snapshot-test
    namespace: default
    uid: 72d9a349-aacd-42d2-a240-d775650d2455

volumeHandle 是儲存後端建立卷的唯一識別符號,在卷建立期間由 CSI 驅動程式返回。動態設定快照需要此欄位。它指出了快照的卷源。

對於預配置快照,你(作為叢集管理員)要按如下命令來建立 VolumeSnapshotContent 物件。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
  name: new-snapshot-content-test
spec:
  deletionPolicy: Delete
  driver: hostpath.csi.k8s.io
  source:
    snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
  volumeSnapshotRef:
    name: new-snapshot-test
    namespace: default

snapshotHandle 是儲存後端建立卷的唯一識別符號。對於預設定快照,這個欄位是必須的。它指定此 VolumeSnapshotContent 表示的儲存系統上的 CSI 快照 id。

從快照供應卷

你可以配置一個新卷,該卷預填充了快照中的資料,在 持久卷宣告 物件中使用 dataSource 欄位。

更多詳細資訊,請參閱 卷快照和從快照還原卷。
https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/#volume-snapshot-and-restore-volume-from-snapshot-support

作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。