天天看點

K8s中Volume

容器磁盤上的檔案的生命周期是短暫的,這就使得在容器中運作重要應用時會出現一些問題。首先,當容器崩潰

時,kubelet 會重新開機它,但是容器中的檔案将丢失——容器以幹淨的狀态(鏡像最初的狀态)重新啟動。其次,在

Pod 中同時運作多個容器時,這些容器之間通常需要共享檔案。Kubernetes 中的 Volume 抽象就很好的解決了這些問題

背景

Kubernetes 中的卷有明确的壽命 —— 與封裝它的 Pod 相同。所f以,卷的生命比 Pod 中的所有容器都長,當這

個容器重新開機時資料仍然得以儲存。當然,當 Pod 不再存在時,卷也将不複存在。也許更重要的是,Kubernetes

支援多種類型的卷,Pod 可以同時使用任意數量的卷卷的類型。

一個emptyDir 第一次建立是在一個pod被指定到具體node的時候,并且會一直存在在pod的生命周期當中,正如它的名字一樣,它初始化是一個空的目錄,pod中的容器都可以讀寫這個目錄,這個目錄可以被挂在到各個容器相同或者不相同的的路徑下。當一個pod因為任何原因被移除的時候,這些資料會被永久删除。注意:一個容器崩潰了不會導緻資料的丢失,因為容器的崩潰并不移除pod.

emptyDir 磁盤的作用:

scratch space, such as for a disk-based mergesortcw checkpointing a long computation for recovery from crashes holding files that a content-manager container fetches while a webserver container serves the data

普通空間,基于磁盤的資料存儲

作為從崩潰中恢複的備份點

存儲那些那些需要長久儲存的資料,例web服務中的資料

預設的,emptyDir 磁盤會存儲在主機所使用的媒介上,可能是SSD,或者網絡硬碟,這主要取決于你的環境。當然,我們也可以将emptyDir.medium的值設定為Memory來告訴Kubernetes 來挂在一個基于記憶體的目錄tmpfs,因為

tmpfs速度會比硬碟塊度了,但是,當主機重新開機的時候所有的資料都會丢失

執行:

看來裡面有這個檔案夾

hostPath

hostPath 卷将主機節點的檔案系統中的檔案或目錄挂載到叢集中

hostPath 的用途如下:

運作需要通路 Docker 内部的容器;使用 /var/lib/docker 的 hostPath

在容器中運作 cAdvisor;使用 /dev/cgroups 的 hostPath

允許 pod 指定給定的 hostPath 是否應該在 pod 運作之前存在,是否應該建立,以及它應該以什麼形式存在

除了所需的 path 屬性之外,使用者還可以為 hostPath 卷指定 type

使用這種卷類型是請注意,因為:

由于每個節點上的檔案都不同,具有相同配置(例如從 podTemplate 建立的)的 pod 在不同節點上的行為可能會有所不同。

當 Kubernetes 按照計劃添加資源感覺排程時,将無法考慮 hostPath 使用的資源

在底層主機上建立的檔案或目錄隻能由 root 寫入。您需要在特權容器中以 root 身份運作程序,或修改主機上的檔案權限以便寫入 hostPath 卷。

假如子節點沒有data檔案夾

在子節點檢視