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