跳至主要内容

Volume - Introduction

Kubernetes Volumes 是管理 Kubernetes 集群中儲存資源的關鍵。它們提供了容器之間共享數據的方式,並確保即使容器重啟或重新調度,數據仍然可以持久化。在這一部分,我們將介紹 Volume 是什麼、Volume 類型以及不同 Volume 的生命週期。


Volume 是什麼?

volume-intro

在 Kubernetes 中,Volume 是一種儲存資源,它允許容器在 Pod 內共享和持久化數據。Volume 抽象化了底層儲存系統的細節,為應用程式提供一致的接口。Volume 可以是暫時性的(ephemeral)或持久性的(persistent),並且其數據可以在 Pod 內的多個容器間共享。

與 Docker 中的容器文件系統不同,Kubernetes 的 Volume 使得數據能夠超越個別容器的生命週期,即使容器被銷毀或重新創建,數據仍然保持不變。


Volume 類型

Kubernetes 支援多種 Volume 類型,每種類型的用途不同。以下是一些常見的 Volume 類型:

1. EmptyDir

  • 生命週期EmptyDir 是 Pod 中的臨時存儲,它會在 Pod 啟動時創建,並且會在 Pod 被刪除時自動清除。
  • 特點
    • Volume 在 Pod 的生命週期內有效,Pod 被刪除時,EmptyDir 也會被刪除。
    • 不會在 Pod 被重新調度到其他節點時保留數據。
    • 常用於短期存儲、緩存等需求。

2. HostPath

  • 生命週期HostPath 將本地節點的文件系統掛載到 Pod 中。當 Pod 被刪除時,HostPath 不會被刪除,因為它依賴於主機上的文件系統。
  • 特點
    • HostPath 的生命週期與 Pod 不完全同步,Pod 被刪除時,HostPath 中的數據仍保留在主機上。
    • 如果 Pod 重新啟動並再次掛載 HostPath,它將繼續使用原來的資料。
    • 用於訪問節點本地資源,如日志文件、配置文件等。

3. PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

  • 生命週期PersistentVolume 是由集群管理的持久化儲存,它的生命週期不會隨著 Pod 的消失而終止。PersistentVolumeClaim 允許用戶申請儲存資源,並且會依賴於 PV 的存在。
  • 特點
    • PersistentVolume 的數據在 Pod 生命週期結束後仍然存在,除非明確刪除。
    • PersistentVolumeClaim 用於申請和繫結到 PersistentVolume,當 PVC 被刪除時,對應的 PV 不一定會被刪除。
    • 可設定不同的回收策略:Retain(保留)、Recycle(回收)、Delete(刪除)。

4. NFS (Network File System)

  • 生命週期:NFS 是一個網絡儲存系統,Pod 在其生命週期內將持久地掛載 NFS 目錄。這些文件系統通常跨多個節點共享,因此 Pod 可以在不同的節點上訪問相同的數據。
  • 特點
    • NFS 的生命週期不與 Pod 直接綁定。Pod 被刪除後,NFS 文件系統仍然存在。
    • 數據會存儲在 NFS 伺服器中,Pod 只是用來訪問這些數據。
    • 適用於需要跨多個節點和 Pod 共享數據的情況。

5. AWS EBS (Elastic Block Store)

  • 生命週期:AWS EBS 卷是 AWS 的持久區塊儲存服務,掛載到 Pod 上後,儲存數據將保留在 AWS 中。當 Pod 被刪除時,EBS 卷不會自動刪除,除非設定刪除策略。
  • 特點
    • EBS 卷與 Pod 的生命週期無關。Pod 被刪除時,EBS 卷仍然存在,數據保持不變。
    • 必須手動清理或設定回收策略來管理 EBS 卷的刪除。
    • 適用於需要高效能和持久存儲的應用程式。

6. Azure Disk

  • 生命週期:Azure Disk 是 Microsoft Azure 提供的區塊儲存。與 AWS EBS 類似,Azure Disk 在 Pod 刪除後保持不變。
  • 特點
    • 它的數據保持在 Azure 雲端,Pod 刪除後,磁碟仍然存在。
    • 如同 EBS,Azure Disk 的生命週期不依賴於 Pod,需要手動清理。

7. ConfigMap 和 Secret Volume

  • 生命週期ConfigMapSecret 是用來儲存配置信息和敏感數據的 Volume,通常與 Pod 一起創建並掛載。當 Pod 被刪除時,這些 Volume 也會被清除。
  • 特點
    • ConfigMapSecret 的生命週期通常和 Pod 同步。
    • 在容器重啟或重新創建時,這些 Volume 會繼續使用原來的配置或敏感資料。

8. Ceph、GlusterFS 等分佈式儲存

  • 生命週期:這些 Volume 是跨多個節點和 Pod 使用的分佈式儲存系統,當 Pod 被刪除後,儲存的數據會保留在分佈式儲存系統中。
  • 特點
    • 這些 Volume 的數據在 Pod 的生命週期外保持,Pod 可以在不同的節點間共享同一個 Volume。
    • 依賴於底層分佈式儲存系統,通常在多節點間提供高可用性。

Volume 生命週期

Volume 的生命週期與 Pod 以及相關的 PersistentVolume 和 PersistentVolumeClaim 物件的生命週期緊密相連。以下是主要的生命週期階段:

1. Volume 創建

  • Volume 可以是動態創建的,也可以是靜態創建的。對於持久儲存,會創建 PersistentVolume(PV),並且 PersistentVolumeClaim(PVC) 用來請求存取這個 Volume。
  • 在某些情況下,當 Pod 啟動時,Volume 會被創建並與 Pod 的生命週期關聯。

2. 掛載 Volume

  • 一旦 Volume 被創建或請求,Kubernetes 會將其掛載到 Pod 的容器中。此時,容器中的應用程式可以訪問 Volume 中的數據。

3. 訪問 Volume

  • Pod 內的容器現在可以讀寫 Volume 中的數據。Volume 的數據會在容器的生命週期之外持久化,因此即使容器崩潰或被替換,數據仍然保持。

4. Volume 分離

  • 當 Pod 被刪除或 Volume 不再需要時,Kubernetes 會自動將 Volume 從容器中分離。對於持久 Volume,這也會觸發回收策略(Retain、Recycle 或 Delete),決定後續對 Volume 的處理方式。

5. Volume 清理

  • 如果 Volume 設定為刪除,Pod 被刪除時,底層儲存資源(例如 EBS 卷、NFS 共享)會被清理。如果 Volume 設定為保留,則 Volume 會保持不變並可重新使用。