Kubernetes 1.20:Kubernetes卷快照提升到GA
技術標籤:kubernetes雲原生容器雲資料儲存snapshot
問卷連結(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微信公眾號。