volumes
Container(容器)中的磁盤文件都是短暫的,當容器崩潰時,kubelet會重新啟動容器,但最初的文件將會丟失,容器會以最干凈的狀態(tài)啟動。另外,當一個pod運行多個容器時,各個容器可能需要共享一些文件,kubernetes volume可以解決這兩個問題
卷的類型:
1.configmap
configmap卷也可以作為volume使用,存儲在configmap中的數(shù)據(jù)可以通過configmap類型的卷掛載到pod中,然后使用configmap中的數(shù)據(jù),引用configmap對象時,只需要在volume中引用configmap的名稱即可,同時也可以自定義configmap的掛載路徑。
1.2emptydir
emptydir和volume不同的是,如果刪除pod,emptydir卷中的數(shù)據(jù)也將會被刪除,一般emptydir卷用于pod中不同的container共享數(shù)據(jù),它可以被掛載到相同或不同的路徑上
簡單來說,pod刪除了,emptyDir也隨之刪除
默認情況下,emptydir卷支持節(jié)點上的任何介質,可能是ssd,磁盤或網(wǎng)絡存儲,具體取決于自身的環(huán)境,可以將emptydir,medium字段設置為memory,讓kubernetes使用tmpfs(內存支持的文件系統(tǒng)),雖然tmpfs非常快,但是tmpfs在節(jié)點重啟時,數(shù)據(jù)同樣會被清除,并且設置的大小會被計入到container的內存限制當中
1.3hostPath
hostpath卷可將節(jié)點上的文件或者目錄掛載到pod上,用于pod自定義日志輸出或訪問docker內部的容器等
1.4 NFS
1.5 persistentVolumeClaim
1.6 Secret
1.7 SubPath
pv &pvc
k8s引入了一組叫做pvc和pv的API對象,在pod的Volumes中,只要聲明類型是persistentVolumeClaim,指定PVC的名字,當創(chuàng)建這個pvc對象,k8s就自動為他綁定一個符合條件的volume
pvc和pv,類似"接口"和"實現(xiàn)"的思想,開發(fā)者用"接口"pvc,運維人員負責綁定具體的實現(xiàn)pv,pvc就是一種特殊的volume
persistentVolume(簡稱pv)是由管理員設置的存儲,它同樣時集群中的一類資源,pv時容量插件,如volumes(卷),但其生命周期獨立使用pv的任何pod,pv的創(chuàng)建可使用NFS,CEPH等
persistentVolumeClaim(簡稱pvc)是用戶對存儲的請求,類似于pod,pod消耗節(jié)點資源,pod可以請求特定級別的資源(cpu和內存),pvc可以請求特定的大小和訪問模式,例如,可以以一次讀寫/寫或只讀多次的模式掛載。
雖然pvc允許用戶使用抽象存儲資源,但是用戶肯呢個需要具有不同性質的pv來解決不同的問題,比如使用ssd硬盤來提高性能,所以集群管理員需要能夠提供各種pv,而不僅是大小和訪問模式,并且無須讓用戶了解這些卷的實現(xiàn)方式,對于這些需求可以使用stotageClass資源實現(xiàn)
目前pv的提供方式有兩種:靜態(tài)和動態(tài)
靜態(tài)pv由管理員提前創(chuàng)建,動態(tài)pv 無需提前創(chuàng)建,只需指定pvc的storageClass即可
(1)回收策略
當用戶使用完卷時,可以從api中刪除pvc對象,從而允許回收資源,回收資源會告訴pv如何處理改卷,目前卷可以保留,回收或刪除
- Retain: 保留,改策略允許手動回收資源,當刪除pvc時,pv仍然存在,volume被視為已釋放,管理員可以手動回收卷
- Recycle: 回收,如果volume插件支持,Recycle策略會對卷執(zhí)行rm -fr 刪除該pv
-
delete: 刪除,如果volume插件支持,刪除pvc時會同時刪除pv,
(2)創(chuàng)建pv
在使用持久化時,需要先創(chuàng)建pv,然后在創(chuàng)建pvc,pvc會和pv進行綁定,然后pod即可使用該存儲
創(chuàng)建一個基于nfs的pv
image.png
創(chuàng)建的pv會有一下幾種狀態(tài):
- Available(可用),沒有被PVC綁定的空間資源
- Bound (已綁定),已經(jīng)被pvc綁定
- Released (已釋放),PVC被刪除,但是資源還未被重新使用
-
Failed (失敗),自動回收失敗
可以創(chuàng)建一個基于hostPath 的pv:
image.png
(3)創(chuàng)建pvc
創(chuàng)建pvc需要注意的是,各個方面都符合要求pvc才能和pv進行綁定,比如 accessModes,storageClassName,volumeMode 都需要相同才能進行綁定
創(chuàng)建PVC的示例如下:
pv,pvc pod連接
根據(jù)上述hostPath 的pv創(chuàng)建pvc創(chuàng)建pod
pvc
pod