共計(jì) 3035 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
如何分析 Kubernetes 的卷克隆 Alpha,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
什么是克隆?
許多存儲(chǔ)系統(tǒng)提供創(chuàng)建卷的“克隆”功能。克隆是一個(gè)現(xiàn)有卷的副本,它是系統(tǒng)上自己惟一的卷,但是源上的數(shù)據(jù)被復(fù)制到目標(biāo)(克隆)。克隆類似于快照,因?yàn)樗蔷淼囊粋€(gè)時(shí)間點(diǎn)副本,但是我們不是從卷創(chuàng)建一個(gè)新的快照對(duì)象,而是創(chuàng)建一個(gè)新的獨(dú)立卷,有時(shí)被認(rèn)為是預(yù)填充新創(chuàng)建的卷。
為什么要把克隆技術(shù)加到 Kubernetes
Kubernetes 卷插件系統(tǒng)已經(jīng)提供了一個(gè)強(qiáng)大的抽象,可以自動(dòng)提供、附加和掛載塊和文件存儲(chǔ)。Kubernetes v1.15 引入了對(duì)卷克隆的 alpha 支持。該特性允許使用 Kubernetes API 使用用戶命名空間中現(xiàn)有卷的內(nèi)容創(chuàng)建新卷。
所有這些特性的目標(biāo)是支持 Kubernetes 工作負(fù)載的可移植性:Kubernetes 的目標(biāo)是在分布式系統(tǒng)應(yīng)用程序和底層集群之間創(chuàng)建一個(gè)抽象層,這樣應(yīng)用程序就可以不知道它們所運(yùn)行的集群的具體情況,并且應(yīng)用程序部署不需要特定的存儲(chǔ)設(shè)備知識(shí)。
Kubernetes 存儲(chǔ) SIG 將克隆操作確定為許多有狀態(tài)工作負(fù)載的關(guān)鍵功能。例如,數(shù)據(jù)庫(kù)管理員可能希望復(fù)制數(shù)據(jù)庫(kù)卷,并創(chuàng)建現(xiàn)有數(shù)據(jù)庫(kù)的另一個(gè)實(shí)例。
https://github.com/kubernetes/community/tree/master/sig-storage
通過(guò)在 Kubernetes API 中提供觸發(fā)克隆操作的標(biāo)準(zhǔn)方法,Kubernetes 用戶現(xiàn)在可以處理這樣的用例,而無(wú)需環(huán)繞 Kubernetes API(以及手動(dòng)執(zhí)行存儲(chǔ)系統(tǒng)特定的操作)。雖然克隆在行為上類似于創(chuàng)建卷快照,然后從快照創(chuàng)建卷,但是克隆操作更精簡(jiǎn),對(duì)于許多后端設(shè)備更有效。
Kubernetes 用戶現(xiàn)在可以以一種集群無(wú)關(guān)的方式,將克隆操作合并到他們的工具和政策中,并且可以放心地知道,無(wú)論底層存儲(chǔ)是什么,克隆操作都可以針對(duì)任意的 Kubernetes 集群工作。
Kubernetes API 和克隆
Kubernetes 中的克隆特性是通過(guò) PersistentVolumeClaim.DataSource 字段啟用的。在 v1.15 之前,惟一允許作為數(shù)據(jù)源(dataSource)使用的有效對(duì)象類型是 VolumeSnapshot。克隆特性擴(kuò)展了允許的 PersistentVolumeclaim.DataSource.Kind 字段不僅允許 VolumeSnapshot,還允許 PersistentVolumeClaim。現(xiàn)有行為不會(huì)更改。
沒(méi)有引入新的對(duì)象來(lái)啟用克隆。而是對(duì) PersistentVolumeClaim 對(duì)象中的現(xiàn)有數(shù)據(jù)源字段進(jìn)行了擴(kuò)展,以便能夠接受同一命名空間中現(xiàn)有的 PersistentVolumeClaim 的名稱。重要的是要注意,從用戶的角度來(lái)看,克隆只是另一個(gè) PersistentVolume 和 PersistentVolumeClaim,惟一的區(qū)別是這個(gè) PersistentVolume 是在創(chuàng)建時(shí)用另一個(gè) PersistentVolume 的內(nèi)容填充的。創(chuàng)建之后,它的行為與任何其他 Kubernetes PersistentVolume 完全相同,并遵循相同的行為和規(guī)則。
哪些卷插件支持 Kubernetes 克隆?
Kubernetes 支持三種類型的卷插件:in-tree、Flex 和容器存儲(chǔ)接口(Container Storage Interface,CSI)。有關(guān)詳細(xì)信息,請(qǐng)參閱 Kubernetes Volume Plugin FAQ。
https://github.com/container-storage-interface/spec/blob/master/spec.md
https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md
克隆只支持 CSI 驅(qū)動(dòng)程序(不支持 in-tree 或 Flex)。要使用 Kubernetes 克隆特性,請(qǐng)確保在集群上部署了實(shí)現(xiàn)克隆的 CSI 驅(qū)動(dòng)程序。有關(guān)當(dāng)前支持克隆的 CSI 驅(qū)動(dòng)程序列表,請(qǐng)參閱 CSI 驅(qū)動(dòng)程序文檔。
https://kubernetes-csi.github.io/docs/drivers.html
Kubernetes 克隆需求
在使用 Kubernetes 卷克隆之前,你必須:
確保在 Kubernetes 集群上部署并運(yùn)行實(shí)現(xiàn)克隆的 CSI 驅(qū)動(dòng)程序。
通過(guò)新的 Kubernetes 特性門啟用 Kubernetes 卷克隆特性(alpha 默認(rèn)禁用):
在 API 服務(wù)器二進(jìn)制文件上設(shè)置以下標(biāo)志:–features-gates=VolumePVCDataSource=true
源和目標(biāo)聲明必須位于相同的命名空間中。
在 Kubernetes 創(chuàng)建一個(gè)克隆
要使用現(xiàn)有 Kubernetes 卷中的數(shù)據(jù)預(yù)先填充新的卷,請(qǐng)使用 PersistentVolumeClaim 中的 dataSource 字段。有三個(gè)參數(shù):
name – 要用作源的 PersistentVolumeClaim 對(duì)象的名稱
kind – 必須是 PersistentVolumeClaim
apiGroup – 必須是
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-clone Namespace: demo-namespacespec: storageClassName: csi-storageclass dataSource: name: src-pvc kind: PersistentVolumeClaim apiGroup: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi # NOTE this capacity must be specified and must be = the capacity of the source volume
當(dāng)創(chuàng)建 PersistentVolumeClaim 對(duì)象時(shí),它將觸發(fā)一個(gè)新的卷的供應(yīng),該卷預(yù)先填充了來(lái)自指定數(shù)據(jù)源卷的數(shù)據(jù)。實(shí)現(xiàn)卷的克隆是 CSI 插件的責(zé)任。
作為存儲(chǔ)供應(yīng)商,我如何將對(duì)克隆的支持添加到我的 CSI 驅(qū)動(dòng)程序中?
有關(guān)如何在 CSI 插件中實(shí)現(xiàn)克隆的更多信息,請(qǐng)參考 CSI 文檔中給 Kubernetes 開(kāi)發(fā) CSI 驅(qū)動(dòng)程序的部分。
https://kubernetes-csi.github.io/docs/developing.html
alpha 的局限性是什么?
克隆 Kubernetes 的 alpha 實(shí)現(xiàn)有以下限制:
不支持跨不同命名空間克隆卷
不支持跨不同存儲(chǔ)類(后端)克隆卷
未來(lái)
根據(jù)反饋和采用情況,Kubernetes 團(tuán)隊(duì)計(jì)劃將 CSI 克隆實(shí)現(xiàn)在 1.16 版本推進(jìn)到 beta。
關(guān)于克隆,用戶經(jīng)常遇到的一個(gè)問(wèn)題是“跨命名空間克隆怎么樣?”。如前所述,當(dāng)前版本要求源和目標(biāo)位于同一個(gè)命名空間中。不過(guò),目前正在努力提出命名空間傳輸 API,Kubernetes 的未來(lái)版本可能提供將卷資源從一個(gè)命名空間傳輸?shù)搅硪粋€(gè)命名空間的能力。
關(guān)于如何分析 Kubernetes 的卷克隆 Alpha 問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識(shí)。