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