EmptyDir(空目錄):
沒有指定要掛載宿主機上的某個目錄,直接由Pod內(nèi)保部映射到宿主機上。類似于docker中的manager volume。
主要使用場景:
1. 只需要臨時將數(shù)據(jù)保存在磁盤上,比如在合并/排序算法中;
2. 作為兩個容器的共享存儲,使得個內(nèi)容管理的容器可以將生成的數(shù)據(jù)存入其中,同時由同一個webserver容器對外提供這些頁面。
emptyDir的特性:同個pod里面的不同容器,共享同一個持久化目錄,當pod節(jié)點刪除時,volume的數(shù)據(jù)也會被刪除。如果僅僅是容器被銷毀,pod還在,則不會影響volume中的數(shù)據(jù)。
總結來說:emptyDir的數(shù)據(jù)持久化的生命周期和使用的pod一致。一般是作為臨時存儲使用。
Hostpath:
將宿主機上已存在的目錄或文件掛載到容器內(nèi)部。類似于docker中的bind mount掛載方式。
這種數(shù)據(jù)持久化方式,運用場景不多,因為它增加了pod與節(jié)點之間的耦合。
一般對于k8s集群本身的數(shù)據(jù)持久化和docker本身的數(shù)據(jù)持久化會使用這種方式,可以自行參考apiService的yaml文件,位于:/etc/kubernetes/main…目錄下。
PersistentVolume(簡稱PV):
基于NFS服務的PV,也可以基于GFS的PV。它的作用是統(tǒng)一數(shù)據(jù)持久化目錄,方便管理。
在一個PV的yaml文件中,可以對其配置PV的大小,
指定PV的訪問模式:
1. ReadWriteOnce:只能以讀寫的方式掛載到單個節(jié)點;
2. ReadOnlyMany:能以只讀的方式掛載到多個節(jié)點;
3. ReadWriteMany:能以讀寫的方式掛載到多個節(jié)點。
以及指定pv的回收策略(這里的回收策略指的是在PV被刪除后,在這個PV下所存儲的源文件是否刪除):
1. recycle:清除PV的數(shù)據(jù),然后自動回收;
2. Retain:需要手動回收;
3. delete:刪除云存儲資源,云存儲專用;
若需使用PV,那么還有一個重要的概念:PVC,PVC是向PV申請應用所需的容量大小,K8s集群中可能會有多個PV,PVC和PV若要關聯(lián),其定義的訪問模式必須一致。定義的storageClassName也必須一致,若群集中存在相同的(名字、訪問模式都一致)兩個PV,那么PVC會選擇向它所需容量接近的PV去申請,或者隨機申請。