K8S Volumes 使用場景


Volumes

容器中的文件在磁盤上是臨時存放的,這給容器中運行的特殊應用程序帶來一些問題。 首先,當容器崩潰時,kubelet 將重新啟動容器,容器中的文件將會丟失——因為容器會以干凈的狀態重建。 其次,當在一個 Pod 中同時運行多個容器時,常常需要在這些容器之間共享文件。 Kubernetes 抽象出 Volume 對象來解決這兩個問題。

參考官方

常用卷及使用場景

configmap

configMap 資源提供了向 Pod 注入配置數據的方法。 ConfigMap 對象中存儲的數據可以被 configMap 類型的卷引用,然后被應用到 Pod 中運行的容器化應用。

emptyDir

當 Pod 指定到某個節點上時,首先創建的是一個 emptyDir 卷,並且只要 Pod 在該節點上運行,卷就一直存在。 就像它的名稱表示的那樣,卷最初是空的。 盡管 Pod 中的容器掛載 emptyDir 卷的路徑可能相同也可能不同,但是這些容器都可以讀寫 emptyDir 卷中相同的文件。 當 Pod 因為某些原因被從節點上刪除時,emptyDir 卷中的數據也會永久刪除。

容器崩潰並不會導致 Pod 被從節點上移除,因此容器崩潰時 emptyDir 卷中的數據是安全的。

emptyDir 的一些用途:

  • 緩存空間,例如基於磁盤的歸並排序。
  • 為耗時較長的計算任務提供檢查點,以便任務能方便地從崩潰前狀態恢復執行。
  • 在 Web 服務器容器服務數據時,保存內容管理器容器獲取的文件

默認情況下, emptyDir 卷存儲在支持該節點所使用的介質上;這里的介質可以是磁盤或 SSD 或網絡存儲,這取決於您的環境。 但是,您可以將 emptyDir.medium 字段設置為 "Memory",以告訴 Kubernetes 為您安裝 tmpfs(基於 RAM 的文件系統)。 雖然 tmpfs 速度非常快,但是要注意它與磁盤不同。 tmpfs 在節點重啟時會被清除,並且您所寫入的所有文件都會計入容器的內存消耗,受容器內存限制約束

常做臨時存儲

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

hostPath

卷能將主機節點文件系統上的文件或目錄掛載到您的 Pod 中。 雖然這不是大多數 Pod 需要的,但是它為一些應用程序提供了強大的逃生艙。

hostPath 的一些用法有:

  • 運行一個需要訪問 Docker 引擎內部機制的容器;請使用 hostPath 掛載 /var/lib/docker 路徑。
  • 在容器中運行 cAdvisor 時,以 hostPath 方式掛載 /sys。
  • 允許 Pod 指定給定的 hostPath 在運行 Pod 之前是否應該存在,是否應該創建以及應該以什么方式存在。

除了必需的 path 屬性之外,用戶可以選擇性地為 hostPath 卷指定 type。

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    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
  • 場景一:某個job服務需要每天ftp拉取第三方日志,進行讀取解析

ftp shell程序設置在特定node,拉取日志於node目錄假設為/opt/case,指定pod部署在這一node(通過。。。),指定hostPath為日志路徑掛載到容器目錄中(注意是掛載),程序讀取目錄日志解析。

  • 場景二:job服務執行會記錄日志

指定特定node,hostPath指定node目錄,volume掛載pod容器,程序執行,記錄到node上,及時pod銷毀,也不會擔心丟失,方便排查問題。


免責聲明!

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



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