1. 程式人生 > 其它 >Kubernetes 1.20:Kubernetes卷快照提升到GA

Kubernetes 1.20:Kubernetes卷快照提升到GA

技術標籤:kubernetes雲原生容器雲資料儲存snapshot

你填了嗎?2020年CNCF中國雲原生問卷

Image

問卷連結(https://www.wjx.cn/jq/97146486.aspx


作者:Xing Yang, VMware & Xiangqian Yu, Google

Kubernetes卷快照特性現在在Kubernetes v1.20中是GA。它在Kubernetes v1.12中以alpha的形式引入,隨後在Kubernetes v1.13中進行了第二次alpha,並在Kubernetes 1.17中升級為beta版本。這篇部落格總結了從beta版到GA版的變化。

什麼是卷快照?

許多儲存系統(如谷歌雲持久磁碟、Amazon彈性塊儲存和許多內部儲存系統)都提供了建立持久卷的“快照”的能力。快照表示卷的時間點副本。快照可以用於重新生成新卷(用快照資料預填充),也可以用於將現有卷恢復到以前的狀態(由快照表示)。

為什麼要向Kubernetes添加捲快照?

Kubernetes的目標是在分散式應用程式和底層叢集之間建立一個抽象層,以便應用程式可以不知道它們執行的叢集的具體情況,並且應用程式部署不需要“特定於叢集的”知識。

Kubernetes Storage SIG將快照操作識別為許多有狀態工作負載的關鍵功能。例如,資料庫管理員可能希望在啟動資料庫操作之前快照資料庫的卷。

通過提供在Kubernetes中觸發卷快照操作的標準方法,該特性允許Kubernetes使用者以可移植的方式在任何Kubernetes環境中合併快照操作,而不管底層儲存是什麼。

此外,這些Kubernetes快照特性/原語(primitive)充當基本構建塊,釋放了為Kubernetes開發高階企業級儲存管理特性(包括應用程式或叢集級備份解決方案)的能力。

beta之後有什麼新特性嗎?

隨著卷快照提升到GA,該特性在標準Kubernetes部署中預設啟用,並且不能關閉。

已經對該特性進行了許多增強,以提高其質量並使其達到生產級。

  • 卷快照API和客戶端庫被移動到單獨的Go模組。

  • 添加了快照驗證webhook來對卷快照物件執行必要的驗證。更多細節可以在卷快照驗證Webhook Kubernetes增強建議中找到。

  • 與驗證webhook一起,卷快照控制器將開始標記已經存在的無效快照物件。這允許使用者識別、刪除任何無效物件,並糾正他們的工作流。一旦API切換到v1型別,這些無效物件將不能從系統中刪除。

  • 為了更好地瞭解快照特性是如何執行的,在卷快照控制器中添加了一組初始操作指標。

  • 還有更多(在GCP上執行的)端到端測試,可以在真正的Kubernetes叢集中驗證該特性。引入了壓力測試(基於谷歌持久磁碟和hostPath CSI驅動程式)來測試系統的健壯性。

除了引入了更嚴格的驗證之外,v1beta1和v1 Kubernetes卷快照API之間沒有任何區別。在這個版本中(使用Kubernetes 1.20),提供了v1和v1beta1,而儲存的API版本仍然是v1beta1。未來的版本將把儲存的版本切換到v1,並逐漸刪除對v1beta1的支援。

哪些CSI驅動程式支援卷快照?

快照只支援CSI驅動程式,不支援樹內或FlexVolume驅動程式。確保叢集上部署的CSI驅動程式實現了快照介面。有關更多資訊,請參見Kubernetes GA的容器儲存介面(CSI)。

目前有50多個CSI驅動程式支援卷快照特性。GCE持久磁碟CSI驅動程式已經通過了從卷快照beta升級到GA的測試。對其他CSI驅動程式的GA級支援應該很快就可以使用了。

誰使用卷快照構建產品?

在本部落格釋出之時,以下來自Kubernetes資料保護工作組的參與者正在使用Kubernetes卷快照構建產品或已經構建了產品。

  • Dell-EMC: PowerProtect

  • Druva

  • Kasten K10

  • Pure Storage (Pure Service Orchestrator)

  • Red Hat OpenShift Container Storage

  • TrilioVault for Kubernetes

  • Velero plugin for CSI

如何部署卷快照?

卷快照功能包含以下元件:

  • Kubernetes Volume Snapshot CRDs

  • Volume snapshot controller

  • Snapshot validation webhook

  • CSI Driver along with CSI Snapshotter sidecar

強烈建議Kubernetes發行商捆綁並部署卷快照控制器、CRD和驗證webhook,作為Kubernetes叢集管理程序的一部分(獨立於任何CSI驅動程式)。

**警告:**快照驗證webhook在從使用v1beta1平穩過渡到使用v1 API時起著關鍵作用。如果不安裝快照驗證webhook,就不可能阻止無效卷快照物件的建立/更新,這反過來會阻止無效卷快照物件在未來的升級中被刪除。

如果你的叢集沒有預先安裝正確的元件,你可以手動安裝它們。詳見CSI Snapshotter README。

如何使用卷快照?

假設所有必需的元件(包括CSI驅動程式)已經部署並執行在叢集上,你可以使用VolumeSnapshot API物件建立卷快照,或者通過在PVC上指定VolumeSnapshot資料來源,使用現有的VolumeSnapshot來恢復PVC。有關更多細節,請參閱卷快照文件。

**注意:**Kubernetes Snapshot API不提供任何應用程式一致性保證。在手動或使用更高級別的API/控制器進行快照之前,你必須準備好你的應用程式(暫停應用程式,凍結檔案系統等等)。

動態建立卷快照

要動態建立卷快照,首先建立一個VolumeSnapshotClass API物件。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
 name: test-snapclass
driver: testdriver.csi.k8s.io
deletionPolicy: Delete
parameters:
 csi.storage.k8s.io/snapshotter-secret-name: mysecret
 csi.storage.k8s.io/snapshotter-secret-namespace: mysecretnamespace

然後通過指定卷快照類從PVC建立一個VolumeSnapshot API物件。

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

使用Kubernetes匯入現有卷快照

要將預先存在的卷快照匯入Kubernetes,請首先手動建立一個VolumeSnapshotContent物件。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
 name: test-content
spec:
 deletionPolicy: Delete
 driver: testdriver.csi.k8s.io
 source:
 snapshotHandle: 7bdd0de3-xxx
 volumeSnapshotRef:
 name: test-snapshot
 namespace: default

然後建立一個指向VolumeSnapshotContent物件的VolumeSnapshot物件。

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

從快照建立新卷

繫結並準備就緒的VolumeSnapshot物件可用於通過快照資料預先填充的資料建立新卷,如下所示:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: pvc-restore
 namespace: demo-namespace
spec:
 storageClassName: test-storageclass
 dataSource:
 name: test-snapshot
 kind: VolumeSnapshot
 apiGroup: snapshot.storage.k8s.io
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 1Gi

如何在CSI驅動程式中新增對快照的支援?

有關如何在CSI驅動程式中實現快照特性的更多細節,請參閱CSI規範和Kubernetes-CSI驅動程式開發指南。

有什麼限制?

Kubernetes卷快照的GA實現有以下限制:

  • 不支援將現有PVC恢復到快照所表示的早期狀態(只支援從快照中建立新卷)。

如何學習更多?

快照API和控制器的程式碼儲存庫在這裡:
https://github.com/kubernetes-csi/external-snapshotter

檢視快照特性的其他文件:
http://k8s.io/docs/concepts/storage/volume-snapshots
https://kubernetes-csi.github.io/docs/

如何參與?

這個專案,像所有的Kubernetes一樣,是許多來自不同背景的貢獻者共同努力的結果。

我們對在過去的幾個季度裡幫助GA實現該專案的貢獻者表示非常感謝。我們要感謝Saad Ali、Michelle Au、Tim Hockin和Jordan Liggitt對設計的深刻見解和透徹考慮;感謝Andi Li在增加快照驗證Webhook的支援方面所做的工作;感謝Grant Griffiths對實施指標支援 在快照控制器中並在驗證Webhook中處理密碼輪換;感謝Chris Henzie、Raunak Shah和Manohar Reddy編寫了關鍵的e2e測試以滿足升級的可伸縮性和穩定性要求;感謝Kartik Sharma將快照API和客戶端庫遷移到了 單獨的go模組;並感謝Raunak Shah和Prafull Ladha在從Beta到GA的升級測試中所提供的幫助。

還有很多人幫助將快照功能從beta版本提升到GA版本。我們要感謝為這一努力作出貢獻的每一個人:

  • Andi Li

  • Ben Swartzlander

  • Chris Henzie

  • Christian Huffman

  • Grant Griffiths

  • Humble Devassy Chirammal

  • Jan Šafránek

  • Jiawei Wang

  • Jing Xu

  • Jordan Liggitt

  • Kartik Sharma

  • Madhu Rajanna

  • Manohar Reddy

  • Michelle Au

  • Patrick Ohly

  • Prafull Ladha

  • Prateek Pandey

  • Raunak Shah

  • Saad Ali

  • Saikat Roychowdhury

  • Tim Hockin

  • Xiangqian Yu

  • Xing Yang

  • Zhu Can

對於那些有興趣參與CSI或Kubernetes儲存系統的任何部分的設計和開發的人,加入Kubernetes儲存特別興趣組(SIG)。我們正在快速發展,歡迎新的貢獻者。

我們亦定期舉行保障資料工作小組會議。歡迎新參會者加入討論。

點選閱讀網站原文


CNCF (Cloud Native Computing Foundation)成立於2015年12月,隸屬於Linux Foundation,是非營利性組織。
CNCF(雲原生計算基金會)致力於培育和維護一個廠商中立的開源生態系統,來推廣雲原生技術。我們通過將最前沿的模式民主化,讓這些創新為大眾所用。掃描二維碼關注CNCF微信公眾號。
在這裡插入圖片描述