【K8S】Volume類型-EmptyDir與HostPath的區別


【K8S】Volume類型-EmptyDir與HostPath的區別

 

我們知道,一個運行中的容器,默認情況下,對文件系統的寫入,都是發生在其分層文件系統的可寫層的,一旦容器運行結束,所有寫入都會被丟棄。因此需要支持容器數據的持久化。

k8s中通過Volume來提供對容器存儲的支持。


Volume類型

volume是kubernetes Pod中多個容器訪問的共享目錄。volume被定義在pod上,被這個pod的多個容器掛載到相同或不同的路徑下。volume的生命周期與pod的生命周期相同,pod內的容器停止和重啟時一般不會影響volume中的數據。所以一般volume被用於持久化pod產生的數據。

Kubernetes提供了眾多的volume類型,現在列出一部分,具體可以參考官方文檔

  • emptyDir
  • hostPath
  • gcePersistentDisk
  • awsElasticBlockStore
  • nfs
  • iscsi
  • flocker
  • glusterfs
  • rbd
  • cephfs
  • gitRepo
  • secret
  • persistentVolumeClaim
  • downwardAPI
  • azureFileVolume
  • azureDisk
  • vsphereVolume
  • Quobyte

本篇文章我們簡單說下emptyDir和hostPath。


emptyDir

emptyDir的生命周期與所屬的pod相同。pod刪除時,其emptyDir中的數據也會被刪除。

emptyDir類型的volume在pod分配到node上時被創建,kubernetes會在node上自動分配 一個目錄,因此無需指定宿主機node上對應的目錄文件。

emptyDir Volume主要用於某些應用程序無需永久保存的臨時目錄,多個容器的共享目錄等。

下面是一個pod掛載emptyDir的示例:

  1.  
    apiVersion: v1
  2.  
    kind: Pod
  3.  
    metadata:
  4.  
    name: test-pod
  5.  
    spec:
  6.  
    containers:
  7.  
    - image: test-webserver
  8.  
    name: test-container
  9.  
    volumeMounts:
  10.  
    - name: cache-volume
  11.  
    mountPath: /cache
  12.  
    volumes:
  13.  
    - name: cache-volume
  14.  
    emptyDir: {}

hostPath

pod刪除或者是調度到另外一個Node,原先Node上的存儲卷還在。

hostPath Volume為pod掛載宿主機上的目錄或文件,使得容器可以使用宿主機的文件系統進行存儲。缺點是,在k8s中,pod都是動態在各node節點上調度。當一個pod在當前node節點上啟動並通過hostPath存儲了文件到本地以后,下次調度到另一個節點上啟動時,就無法使用在之前節點上存儲的文件。

hostPath使用示例:

  1.  
    apiVersion: v1
  2.  
    kind: Pod
  3.  
    metadata:
  4.  
    name: test-pod
  5.  
    spec:
  6.  
    containers:
  7.  
    - image: test-webserver
  8.  
    name: test-container
  9.  
    volumeMounts:
  10.  
    - name: test-volume
  11.  
    mountPath: /www
  12.  
    volumes:
  13.  
    - name: test-volume
  14.  
    hostPath:
  15.  
    path: /data

當然也可以為 hostPath 卷指定 type:

行為

 

空字符串(默認)用於向后兼容,在掛載 hostPath 卷之前不會執行任何檢查

DirectoryOrCreate

將根據需要在那里創建一個空目錄,權限設置為 0755,與 Kubelet 具有相同的組和權限

Directory

給定的路徑下必須存在目錄

FileOrCreate

會根據需要創建一個空文件,權限設置為 0644,與 Kubelet 具有相同的組和權限

File

給定的路徑下必須存在文件

Socket

給定的路徑下必須存在 UNIX 套接字

CharDevice

給定的路徑下必須存在字符設備

BlockDevice

給定的路徑下必須存在塊設備


更多詳細的內容:

【kubernetes/k8s源碼分析】 k8s hostpath storage 源碼分析

emptyDir、hostPath以及local volume都是Kubernetes的本地存儲卷,那么有何不同?

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM