存儲(chǔ)資源在所有計(jì)算資源中扮演著十分重要的角色,大部分業(yè)務(wù)場(chǎng)景下都有可能使用到各類存儲(chǔ)資源。在Kubernetes中,系統(tǒng)通過Volume對(duì)集群中的容器動(dòng)態(tài)或靜態(tài)提供存儲(chǔ)資源。通常情況下,我們可以認(rèn)為容器或者Pod的生命周期時(shí)短暫的,當(dāng)容器被銷毀時(shí),容器內(nèi)部的數(shù)據(jù)也同時(shí)被清除。為了持久化保存容器的數(shù)據(jù),Kubernetes引入了Volume,類似于Docker的Volume這個(gè)Volume被某個(gè)Pod掛載之后,這個(gè)Pod里面的所有容器都能使用這個(gè)Volume。Kubernetes目前支持的volume類型可以參考文末官方資料。
emptyDir: emptyDir是最基礎(chǔ)的Volume類型。每個(gè)emptyDir Volume是主機(jī)上的一個(gè)空目錄,可以被Pod中所有的容器共享。它對(duì)于容器來(lái)說(shuō)是持久的,對(duì)于Pod則不是。刪除容器并不會(huì)對(duì)它造成影響,只有刪除整個(gè)Pod時(shí),它才會(huì)被刪除,它的生命周期與所掛載的Pod一致。簡(jiǎn)而言之,emptyDir類型的Volume在Pod分配到Node上時(shí)被創(chuàng)建,Kubernetes會(huì)在Node主機(jī)上自動(dòng)分配一個(gè)目錄,因此無(wú)需指定Node主機(jī)上對(duì)應(yīng)的目錄文件。 這個(gè)目錄的初始內(nèi)容為空,當(dāng)Pod從Node上移除時(shí),emptyDir中的數(shù)據(jù)會(huì)被永久刪除。emptyDir主要用于一些無(wú)需永久保留的數(shù)據(jù),例如臨時(shí)目錄,多容器共享目錄等。
hostPath: hostPath的主要作用是將主機(jī)的文件或目錄掛載給Pod的容器使用,使得容器能以較為良好的性能來(lái)存儲(chǔ)數(shù)據(jù)。這種掛載方式比emptyDir更為持久,除非所在Node發(fā)生故障。不過,除了掛載一些配置文件/二進(jìn)制文件之外,一般不采用該類掛載方式,因?yàn)檫@樣的掛載操作增加了Pod文件與Node主機(jī)文件的耦合,不利于統(tǒng)一管理。