了解Kubernetes和OpenEBS中的持久卷和持續(xù)卷聲明
譯文【51CTO.com快譯】概述:Kubernetes中的卷是什么?
在Kubernetes中,存儲(chǔ)卷抽象用于提供API,該API將存儲(chǔ)的物理實(shí)現(xiàn)從應(yīng)用程序資源的使用方式中抽象出來。在Kubernetes上運(yùn)行的容器并不存儲(chǔ)它們所創(chuàng)建或處理的數(shù)據(jù)。卷本質(zhì)上提供了一個(gè)存儲(chǔ)目錄,運(yùn)行在Pod中的容器可以使用該目錄來存儲(chǔ)和共享數(shù)據(jù)。
Kubernetes支持兩種主要類型的卷:
(1)臨時(shí)卷——這些是用于需要存儲(chǔ)但不需要在重新啟動(dòng)后訪問數(shù)據(jù)的應(yīng)用程序。臨時(shí)卷僅持續(xù)其Pod的生命周期,并在Pod停止運(yùn)行時(shí)被刪除。臨時(shí)卷適用于內(nèi)存大小有限且可能會(huì)影響性能的低延遲應(yīng)用程序。Kubernetes允許使用各種不同用途的臨時(shí)卷,其中包括:
- 空目錄
- Secrets、ConfigMaps和downAPI
- CSI臨時(shí)卷
- 通用臨時(shí)卷
(2)持久卷——這是一個(gè)API對(duì)象,代表Pod使用的物理存儲(chǔ)的抽象實(shí)現(xiàn),但它們的持續(xù)時(shí)間超過了Pod的生命周期。持久卷(PV)是Pod連接到的物理存儲(chǔ)的一部分,因此它們可以存儲(chǔ)即使在容器重新啟動(dòng)后也可用的數(shù)據(jù)。
本文將探討持久卷以及它們?cè)贙ubernetes生態(tài)系統(tǒng)中解決的問題。
卷插件
Kubernetes實(shí)現(xiàn)了容器存儲(chǔ)接口(CSI),可以標(biāo)準(zhǔn)化用于存儲(chǔ)實(shí)現(xiàn)的第三方插件的創(chuàng)建。Kubernetes使用這些插件將節(jié)點(diǎn)上的物理存儲(chǔ)公開給在集群數(shù)據(jù)平臺(tái)中運(yùn)行的Kubelet。通過這種方式,Kubernetes抽象可以為Pod和容器提供存儲(chǔ)資源。CSI支持的插件系統(tǒng)還允許供應(yīng)商向Kubernetes添加存儲(chǔ)系統(tǒng),而無需修改Kubernetes的核心代碼和二進(jìn)制文件。
一些最流行的Kubernetes CSI插件包括:
- AWS Elastic Block Storage
- Azure disk
- BeeGFS
- CephFS
- Dell EMC PowerMax
- GCE Persistent Disk
- Google Cloud Filestore
- GlusterFS
- Huawei Storage CSI
- HyperV CSI
- IBM Block Storage
- OpenEBS
- Portworx
- Pure Storage CSI
(1)Kubernetes中的持久化存儲(chǔ)
一旦CSI插件被設(shè)置并在Kubernetes中運(yùn)行,資源和用戶就可以使用Kubernetes存儲(chǔ)API對(duì)象來使用卷:持久卷(PV)、持久卷聲明(PVC)和存儲(chǔ)類。本節(jié)探討這些API對(duì)象及其在為Kubernetes中的容器提供持久存儲(chǔ)方面的作用。
(2)持久卷(PV)
PV是集群可用的塊存儲(chǔ),它通過捕獲其實(shí)現(xiàn)協(xié)議的詳細(xì)信息來公開對(duì)象、文件和塊存儲(chǔ)系統(tǒng),無論是iSCSI(互聯(lián)網(wǎng)上的SCSI)、NFS還是特定供應(yīng)商和云計(jì)算提供商提供的任何存儲(chǔ)系統(tǒng)。PV的生命周期獨(dú)立于任何使用它的Pod。這意味著PV會(huì)在整個(gè)應(yīng)用程序生命周期中持久保存數(shù)據(jù)以供容器使用。
PV是一個(gè)Kubernetes API對(duì)象,其配置類似于:
持久卷聲明(PVC)
當(dāng)用戶請(qǐng)求PV存儲(chǔ)時(shí),他們使用PVC作為請(qǐng)求特定存儲(chǔ)要求(例如訪問模式和大小)的Kubernetes對(duì)象。PVC是通過將YAML配置文件應(yīng)用于集群而創(chuàng)建的,其規(guī)范類似于:
Pod通過在Pod配置文件中將其聲明為卷規(guī)范來附加到PVC:
一旦Pod綁定到PVC,PVC會(huì)根據(jù)配置文件中指定的指定磁盤大小和訪問模式將其附加到相應(yīng)的PV。
靜態(tài)資源調(diào)配vs.動(dòng)態(tài)資源調(diào)配
PV可以進(jìn)行靜態(tài)配置或動(dòng)態(tài)配置。在靜態(tài)PV配置中,存儲(chǔ)對(duì)象首先在主機(jī)上創(chuàng)建和配置,然后可供集群使用。在這種情況下,Pod附加到指向此存儲(chǔ)對(duì)象特定部分的PV。
如果PV是動(dòng)態(tài)配置的,則使用存儲(chǔ)類對(duì)象來定義指向物理存儲(chǔ)系統(tǒng)的不同存儲(chǔ)實(shí)現(xiàn)特征。存儲(chǔ)類對(duì)象請(qǐng)求存儲(chǔ)對(duì)象的一部分,然后創(chuàng)建一個(gè)與其配置文件中的規(guī)范相匹配的卷。存儲(chǔ)類允許將PV自動(dòng)且動(dòng)態(tài)地分配給Kubernetes對(duì)象。
存儲(chǔ)類對(duì)象的配置文件類似于:
PV和PVC的生命周期
PVC代表對(duì)PV資源的請(qǐng)求。兩個(gè)對(duì)象之間的交互遵循以下模式:
(1)供應(yīng)——這是物理存儲(chǔ)系統(tǒng)可供集群用戶使用的地方。而供應(yīng)可以是靜態(tài)的或動(dòng)態(tài)的。
(2)綁定——將PVC與合適的PV匹配,然后將它們綁定在一起的過程。
(3)使用——Pod消耗卷的過程。
(4)回收——當(dāng)用戶使用完卷時(shí),將刪除綁定對(duì)象,從而回收存儲(chǔ)資源。一些受支持的回收策略包括:
- 保留
- 刪除
- 回收
可以使用預(yù)綁定程序?yàn)樘囟≒V保留一些PV。這意味著PVC將始終綁定到PV,無論其Pod是否正在運(yùn)行應(yīng)用程序。
單片存儲(chǔ)系統(tǒng)中的PV和PVC
在傳統(tǒng)存儲(chǔ)系統(tǒng)中,Kubernetes與可虛擬化和聚合多個(gè)存儲(chǔ)設(shè)備的單體存儲(chǔ)軟件接口。這些設(shè)備可以是SAN存儲(chǔ)、裸機(jī)服務(wù)器或基于云的塊存儲(chǔ)解決方案。該軟件與使用PV、PVC和存儲(chǔ)類管理存儲(chǔ)訪問的CSI插件接口。
傳統(tǒng)共享存儲(chǔ)設(shè)施
容器附加存儲(chǔ)(CAS)和持久卷(PV)
容器附加存儲(chǔ)(CAS)允許企業(yè)利用云原生平臺(tái)的靈活性和可擴(kuò)展性來擴(kuò)展卷抽象的功能。在CAS中,存儲(chǔ)解決方案作為微服務(wù)部署在容器中,可由Kubernetes等編排器管理。CAS集群的數(shù)據(jù)平臺(tái)包括運(yùn)行容器的副本Pod,這些容器提供卷并允許訪問存儲(chǔ)。CAS集群的控制平臺(tái)包括策略、存儲(chǔ)控制器和數(shù)據(jù)平臺(tái)配置。
OpenEBS LocalPV卷
OpenEBS支持為Kubernetes中的本地卷配置動(dòng)態(tài)PV。本地卷是僅可從單個(gè)節(jié)點(diǎn)(例如個(gè)人計(jì)算機(jī)(PC)或虛擬機(jī)(VM))使用的集群存儲(chǔ)。本地卷用于可以容忍節(jié)點(diǎn)不正常時(shí)不可用的應(yīng)用程序,并使用本地目錄、分區(qū)和磁盤向群集公開存儲(chǔ)資源。這使得該插件更適合需要?jiǎng)討B(tài)管理和監(jiān)視的本地需求,以及需要自我管理復(fù)制和數(shù)據(jù)安全的高性能應(yīng)用程序。本地卷的一些使用情形包括:
- 復(fù)制數(shù)據(jù)庫。
- 在單節(jié)點(diǎn)集群上運(yùn)行的邊緣工作負(fù)載。
- 具有自己的高可用集群(HA)配置的有狀態(tài)工作負(fù)載。
結(jié)語
PV向Kubernetes集群公開物理存儲(chǔ)實(shí)現(xiàn),以便Pod可以存儲(chǔ)和共享數(shù)據(jù)。使用PV,由不可變?nèi)萜魃珊痛鎯?chǔ)的數(shù)據(jù)可以在應(yīng)用程序的整個(gè)生命周期中持久使用。
本文探討了理解Kubernetes持久存儲(chǔ)所需的概念,主要關(guān)注PV和PVC。CAS通過依賴微服務(wù)和容器編排來擴(kuò)展卷的功能,還允許創(chuàng)建靈活、精細(xì)且高度可用的云原生存儲(chǔ)基礎(chǔ)設(shè)施。
原文連接:Understanding Persistent Volumes and PVCs in Kubernetes and OpenEBS,作者:Sudip Sengupta
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】