Volume
容器和 Pod 是短暫的。
其含義是它們的生命周期可能很短,會被頻繁地銷毀和創(chuàng)建。容器銷毀時,保存在容器內(nèi)部文件系統(tǒng)中的數(shù)據(jù)都會被清除。
Volume 的生命周期獨立于容器,Pod 中的容器可能被銷毀和重建,但 Volume 會被保留。Volume 與 Pod 的生命周期相同,但與容器的生命周期不相關(guān),當(dāng)容器終止或者重啟時, Volume 中的數(shù)據(jù)不會丟失。
volume的類型
emptyDir
一個 emptyDirVolume 是在 Pod 分配到 Node 時創(chuàng)建的。從它的名稱就可以看出,它的初始 內(nèi)容為空,并且無須指定宿主機上對應(yīng)的目錄文件,因為這是 Kubernetes 自動分配的 一個目錄,
作用:
- 臨時空間,例如用于某些應(yīng)用程序運行時所需的臨時目錄,且無須永久保留
- 長時間任務(wù)的中間過程 Check:Point 的臨時保存目錄
- 一個容器需要從另一個容器中獲取數(shù)據(jù)的目錄(多容器共享目錄〉

hostPath
hostPath 為在 Pod 上掛載宿主機上的文件或目錄,它通??梢杂糜谝韵聨追矫?。
- 容器應(yīng)用程序生成的日志文件需要永久保存時,可以使用宿主機的 高速文件系統(tǒng)進行存儲。
- 需要訪問宿主機上 Docker引擎內(nèi)部數(shù)據(jù)結(jié)構(gòu)的容器應(yīng)用時,可以通過定義 hostPath為 宿主機/var/lib/docker 目錄,使容器內(nèi)部應(yīng)用可以直接訪問 Docker的文件系統(tǒng)。
如果 Pod 被銷毀了,hostPath 對應(yīng)的目錄也還會被保留,從這點看,hostPath 的持久性比 emptyDir 強。不過一旦 Host 崩潰,hostPath 也就沒法訪問了。
注意:
-
在不同的 Node上具有相同配置的 Pod可能會因為宿主機上的目錄和文件不同而導(dǎo)致對Volume 上目錄和文件的訪問結(jié)果不一致。
image.png
NFS
使用 NFS 網(wǎng) 絡(luò)文件系統(tǒng)提供的共享目錄存儲數(shù)據(jù)時,我們需要在系統(tǒng)中部署 一 個 NFS Server。 定義 NFS 類型的 Volume 的示例如下
volumes :
- name: nfs
nfs :
#改為你的 NFS 服務(wù)器地址
server: nfs-server.localhost
path: "/"
PersistentVolume(PV)
PV 是外部存儲系統(tǒng)中的一塊存儲空間,由管理員創(chuàng)建和維護。PV 具有持久性,生命周期獨立于 Pod。

關(guān)鍵參數(shù)
存儲能力 Capacity:
描述存儲設(shè)備具備的能力,目前僅支持對存儲空間的設(shè)置( storage=xx )
訪問模式Access Modes:
對 PV 進行訪問模式的設(shè)置,用于描述用戶應(yīng)用對存儲資源的訪問的權(quán)限。訪問模式如下。
- ReadWriteOnce (簡寫為 RWO ):讀寫權(quán)限,并且只能被單個 Node 掛載
- ReadOnlyMany (簡寫為ROX):只讀權(quán)限,允許被多個Node掛載。
- ReadWriteMany (簡寫為 RWX): 讀寫權(quán)限,允許被多個 Node掛載。
回收策略 Reclaim Policy:
目前支持如下三種回收策略。
- 保留( Retain):保留數(shù)據(jù),需要手工處理 。
- 回收空間(Recycle):簡單清除文件的操作(例如執(zhí)行 rm-rf/thevolume/*命令)。
- 刪除(Delete):與PV相連的后端存儲完成 volume的刪除操作(如 AWSEBS、GCEPD、Azure Disk、 OpenStack Cinder 等設(shè)備的內(nèi)部 volume 清理)。
存儲類別Class:
PV 可以設(shè)定其存儲的類別( Class),通過 storageClassName 參數(shù)指定 一個 StorageClass 資源對象名稱。
PersistentVolumeClaim(PVC)
PVC是對 PV 的申請 (Claim)。PVC 通常由普通用戶創(chuàng)建和維護。需要為 Pod 分配存儲資源時,用戶可以創(chuàng)建一個 PVC,指明存儲資源的容量大小和訪問模式(比如只讀)等信息,Kubernetes 會查找并提供滿足條件的 PV。

PVC 就很簡單了,只需要指定 PV 的容量,訪問模式和 class
在Pod 中使用存儲了,Pod 配置文件 pod1.yml 如下:

與使用普通 Volume 的格式類似,在 volumes 中通過 persistentVolumeClaim 指定使用 mypvc1 申請的 Volume。
回收
如果不再需要使用 PV,可用刪除 PVC 回收 PV
參考:
《每天5分鐘玩轉(zhuǎn) Docker 容器技術(shù)》
