Volume
容器和 Pod 是短暫的莺掠。
其含義是它們的生命周期可能很短闲礼,會(huì)被頻繁地銷毀和創(chuàng)建寡具。容器銷毀時(shí)秤茅,保存在容器內(nèi)部文件系統(tǒng)中的數(shù)據(jù)都會(huì)被清除。
Volume 的生命周期獨(dú)立于容器童叠,Pod 中的容器可能被銷毀和重建框喳,但 Volume 會(huì)被保留。Volume 與 Pod 的生命周期相同厦坛,但與容器的生命周期不相關(guān)五垮,當(dāng)容器終止或者重啟時(shí), Volume 中的數(shù)據(jù)不會(huì)丟失杜秸。
volume的類型
emptyDir
一個(gè) emptyDirVolume 是在 Pod 分配到 Node 時(shí)創(chuàng)建的放仗。從它的名稱就可以看出,它的初始 內(nèi)容為空撬碟,并且無(wú)須指定宿主機(jī)上對(duì)應(yīng)的目錄文件诞挨,因?yàn)檫@是 Kubernetes 自動(dòng)分配的 一個(gè)目錄,
作用:
- 臨時(shí)空間小作,例如用于某些應(yīng)用程序運(yùn)行時(shí)所需的臨時(shí)目錄亭姥,且無(wú)須永久保留
- 長(zhǎng)時(shí)間任務(wù)的中間過(guò)程 Check:Point 的臨時(shí)保存目錄
- 一個(gè)容器需要從另一個(gè)容器中獲取數(shù)據(jù)的目錄(多容器共享目錄〉
hostPath
hostPath 為在 Pod 上掛載宿主機(jī)上的文件或目錄,它通彻讼。可以用于以下幾方面 达罗。
- 容器應(yīng)用程序生成的日志文件需要永久保存時(shí),可以使用宿主機(jī)的 高速文件系統(tǒng)進(jìn)行存儲(chǔ)。
- 需要訪問宿主機(jī)上 Docker引擎內(nèi)部數(shù)據(jù)結(jié)構(gòu)的容器應(yīng)用時(shí)粮揉,可以通過(guò)定義 hostPath為 宿主機(jī)/var/lib/docker 目錄巡李,使容器內(nèi)部應(yīng)用可以直接訪問 Docker的文件系統(tǒng)。
如果 Pod 被銷毀了扶认,hostPath 對(duì)應(yīng)的目錄也還會(huì)被保留侨拦,從這點(diǎn)看,hostPath 的持久性比 emptyDir 強(qiáng)辐宾。不過(guò)一旦 Host 崩潰狱从,hostPath 也就沒法訪問了。
注意:
-
在不同的 Node上具有相同配置的 Pod可能會(huì)因?yàn)樗拗鳈C(jī)上的目錄和文件不同而導(dǎo)致對(duì)Volume 上目錄和文件的訪問結(jié)果不一致叠纹。
NFS
使用 NFS 網(wǎng) 絡(luò)文件系統(tǒng)提供的共享目錄存儲(chǔ)數(shù)據(jù)時(shí)季研,我們需要在系統(tǒng)中部署 一 個(gè) NFS Server。 定義 NFS 類型的 Volume 的示例如下
volumes :
- name: nfs
nfs :
#改為你的 NFS 服務(wù)器地址
server: nfs-server.localhost
path: "/"
PersistentVolume(PV)
PV 是外部存儲(chǔ)系統(tǒng)中的一塊存儲(chǔ)空間誉察,由管理員創(chuàng)建和維護(hù)与涡。PV 具有持久性,生命周期獨(dú)立于 Pod持偏。
關(guān)鍵參數(shù)
存儲(chǔ)能力 Capacity:
描述存儲(chǔ)設(shè)備具備的能力驼卖,目前僅支持對(duì)存儲(chǔ)空間的設(shè)置( storage=xx )
訪問模式Access Modes:
對(duì) PV 進(jìn)行訪問模式的設(shè)置,用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問的權(quán)限鸿秆。訪問模式如下酌畜。
- ReadWriteOnce (簡(jiǎn)寫為 RWO ):讀寫權(quán)限,并且只能被單個(gè) Node 掛載
- ReadOnlyMany (簡(jiǎn)寫為ROX):只讀權(quán)限谬莹,允許被多個(gè)Node掛載檩奠。
- ReadWriteMany (簡(jiǎn)寫為 RWX): 讀寫權(quán)限,允許被多個(gè) Node掛載附帽。
回收策略 Reclaim Policy:
目前支持如下三種回收策略。
- 保留( Retain):保留數(shù)據(jù)井誉,需要手工處理 蕉扮。
- 回收空間(Recycle):簡(jiǎn)單清除文件的操作(例如執(zhí)行 rm-rf/thevolume/*命令)。
- 刪除(Delete):與PV相連的后端存儲(chǔ)完成 volume的刪除操作(如 AWSEBS颗圣、GCEPD喳钟、Azure Disk、 OpenStack Cinder 等設(shè)備的內(nèi)部 volume 清理)在岂。
存儲(chǔ)類別Class:
PV 可以設(shè)定其存儲(chǔ)的類別( Class)奔则,通過(guò) storageClassName 參數(shù)指定 一個(gè) StorageClass 資源對(duì)象名稱。
PersistentVolumeClaim(PVC)
PVC是對(duì) PV 的申請(qǐng) (Claim)蔽午。PVC 通常由普通用戶創(chuàng)建和維護(hù)易茬。需要為 Pod 分配存儲(chǔ)資源時(shí),用戶可以創(chuàng)建一個(gè) PVC,指明存儲(chǔ)資源的容量大小和訪問模式(比如只讀)等信息抽莱,Kubernetes 會(huì)查找并提供滿足條件的 PV范抓。
PVC 就很簡(jiǎn)單了,只需要指定 PV 的容量食铐,訪問模式和 class
在Pod 中使用存儲(chǔ)了匕垫,Pod 配置文件 pod1.yml 如下:
與使用普通 Volume 的格式類似,在 volumes 中通過(guò) persistentVolumeClaim 指定使用 mypvc1 申請(qǐng)的 Volume虐呻。
回收
如果不再需要使用 PV象泵,可用刪除 PVC 回收 PV
參考:
《每天5分鐘玩轉(zhuǎn) Docker 容器技術(shù)》