Kubernetes(k8s)的存儲Volume 詳細介紹


容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰 時,kubelet 會重啟它,但是容器中的文件將丟失——容器以干凈的狀態(鏡像最初的狀態)重新啟動。其次,在 Pod 中同時運行多個容器時,這些容器之間通常需要共享文件。Kubernetes 中的 Volume 抽象就很好的解決了 這些問題

背景 

Kubernetes 中的卷有明確的壽命 —— 與封裝它的 Pod 相同。所f以,卷的生命比 Pod 中的所有容器都長,當這 個容器重啟時數據仍然得以保存。當然,當 Pod 不再存在時,卷也將不復存在。也許更重要的是,Kubernetes 支持多種類型的卷,Pod 可以同時使用任意數量的卷


卷的類型 

Kubernetes 支持以下類型的卷:

  • awsElasticBlockStore     azureDisk     azureFile    cephfs    csi     downwardAPI     emptyDir
  • fc  flocker    gcePersistentDisk    gitRepo    glusterfs    hostPath    iscsi    local     nfs
  • persistentVolumeClaim    projected    portworxVolume    quobyte    rbd    scaleIO     secret
  • storageos  vsphereVolume
     

emptyDir 

當 Pod 被分配給節點時,首先創建 emptyDir 卷,並且只要該 Pod 在該節點上運行,該卷就會存在。正如卷的名 字所述,它最初是空的。Pod 中的容器可以讀取和寫入 emptyDir 卷中的相同文件,盡管該卷可以掛載到每個容 器中的相同或不同路徑上。當出於任何原因從節點中刪除 Pod 時, emptyDir 中的數據將被永久刪除 

emptyDir  的用法有:

  • 暫存空間,例如用於基於磁盤的合並排序
  • 用作長時間計算崩潰恢復時的檢查點
  • Web服務器容器提供數據時,保存內容管理器容器提取的文件
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

可以添加文件,實現不同容器共享,不同路徑掛載。

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  卷
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory

 


免責聲明!

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



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