使用永久磁碟的永久磁碟區

本頁面提供 Kubernetes 中 PersistentVolumes 及 PersistentVolumeClaims 的總覽,並且概述其搭配 Google Kubernetes Engine 的用法。本頁面重點介紹 Compute Engine 永久磁碟所支援的儲存空間。

總覽

PersistentVolume 資源可用於管理叢集中持久可用的儲存空間。在 GKE 上,PersistentVolumes 通常是由 Compute Engine 永久磁碟支援。PersistentVolumes 也可以搭配使用 NFS 等其他類型的儲存空間。如需 PersistentVolumes 的詳細總覽,請參閱 Kubernetes 說明文件

磁碟區不同的是,PersistentVolumes 的生命週期是由 Kubernetes 代管。PersistentVolumes 可以動態佈建;使用者不需要手動建立和刪除輔助儲存空間。

PersistentVolumes 是獨立存在的叢集資源,與 Pod 無關。這表示只要叢集變更,以及 Pod 遭到刪除和重建,PersistentVolume 所代表的磁碟和資料就會持續存在。PersistentVolume 資源可以透過 PersistentVolumeClaims 動態佈建,或由叢集管理員明確建立。

PersistentVolumeClaim 是向 PersistentVolume 資源提出的請求和要求。PersistentVolumeClaim 物件會請求 PersistentVolume 的特定大小、存取模式及 StorageClass。如果符合該項請求的 PersistentVolume 存在或可供佈建,則 PersistentVolumeClaim 會繫結至該 PersistentVolume。

Pod 使用要求所提供的磁碟區。叢集會檢查要求以找出繫結的磁碟區,然後為 Pod 掛接該磁碟區。

可攜性是使用 PersistentVolumes 和 PersistentVolumeClaims 的另一項好處。您可以在不同的叢集和環境中輕鬆使用相同的 Pod 規格,因為 PersistentVolume 是實際輔助儲存空間的介面。

StorageClasses

gcePersistentDisk 之類的磁碟區實作必須透過 StorageClass 資源進行設定。GKE 會自動建立預設的 StorageClass;這項 StorageClass 資源採用標準永久磁碟類型。若 PersistentVolumeClaim 沒有指定 StorageClassName,則會使用預設的 StorageClass。您可以將指定的預設 StorageClass 替換成您自己的 StorageClass。

您可以建立您自己的 StorageClass 資源,以說明不同級別的儲存空間。例如,級別可以對應到服務品質層級或備份政策。在其他儲存系統中,此概念有時稱為「設定檔」。

動態佈建 PersistentVolumes

在大多數情況下,您不需要直接設定 PersistentVolume 物件或建立 Compute Engine 永久磁碟。您可以改為建立 PersistentVolumeClaim,Kubernetes 就會自動佈建永久磁碟。

下列資訊清單提供 30 GiB 磁碟的請求說明,該磁碟的存取模式允許在讀取/寫入模式中一次由一個 Pod 掛接。

pvc-demo.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: helloweb-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
    

使用 kubectl apply -f pvc-demo.yaml 建立這個 PersistentVolumeClaim 時,Kubernetes 會動態建立對應的 PersistentVolume 物件。假設您尚未替換 GKE 的預設儲存空間級別,這個 PersistentVolume 是由新的空白 Compute Engine 永久磁碟支援。透過使用要求提供的磁碟區,您可以在 Pod 中使用此磁碟。

刪除此要求時,也會一併刪除對應的 PersistentVolume 物件及佈建的 Compute Engine 永久磁碟。

如要避免刪除動態佈建的永久磁碟,請將 PersistentVolume 資源或其 StorageClass 資源的回收政策設為 Retain。在此情況下,只要永久磁碟存在,即便沒有任何 PersistentVolumeClaim 使用該磁碟,系統也會向您收取該永久磁碟的使用費用。

存取模式

PersistentVolumes 支援下列存取模式

  • ReadWriteOnce:可由單一節點掛接成讀取/寫入磁碟區。
  • ReadOnlyMany:可由多個節點掛接成唯讀磁碟區。
  • ReadWriteMany:可由多個節點掛接成讀取/寫入磁碟區。Compute Engine 永久磁碟支援的 PersistentVolumes 不支援此存取模式。

以 ReadOnlyMany 模式使用 Compute Engine 永久磁碟

ReadWriteOnce 是最常見的永久磁碟使用情況,可做為大部分應用程式的預設存取模式。Compute Engine 永久磁碟也支援 ReadOnlyMany 模式,因此許多應用程式或同一個應用程式的多個備用資源可以同時使用相同的磁碟。其中一個範例用法便是在多個備用資源中提供靜態內容。

如要瞭解建立多個讀取器的永久磁碟操作說明,請參閱本文。

使用既有的永久磁碟做為 PersistentVolumes

動態佈建的 PersistentVolumes 在建立時為空白。如果您在現有的 Compute Engine 永久磁碟中填入資料,則您可以手動建立對應的 PersistentVolume 資源,將該磁碟加入您的叢集。永久磁碟必須位於與叢集節點相同的區域

請參閱如何建立既有永久磁碟支援的永久磁碟區範例

部署與 StatefulSet 的比較

您可以在更高階的控制器中使用永久磁碟區要求或磁碟區要求範本 (分別以部署StatefulSet 為例)。

部署是專為「無狀態應用程式」所設計,因此部署作業的所有備用資源均共用相同的永久磁碟區要求。由於 Pod 所建立的備用資源彼此相同,因此只有具備 ReadOnlyMany 或 ReadWriteMany 模式的磁碟區適用於這項設定。

部署只有一個使用 ReadWriteOnce 磁碟區的備用資源,則建議不要使用該部署作業。這是因為部署策略會先建立第二個 Pod,然後才會在重建時關閉第一個 Pod。這個做法會因為 ReadWriteOnce 磁碟區已在使用中,使得第二個 Pod 無法啟動,而第一個 Pod 又因第二個 Pod 尚未啟動而無法移除,最終導致部署作業發生死鎖而失敗。針對此情況,請改用 StatefulSet 搭配 ReadWriteOnce 磁碟區一起使用。

若要部署有狀態應用程式且需要每個備用資源有一個專用磁碟區,則建議使用 StatefulSet 方法。透過 StatefulSet 方法與永久磁碟區要求範本搭配使用,您的應用程式就可以透過與每個備用資源 Pod 相關聯的專用永久磁碟區要求,自動擴充資源配置。

地區永久磁碟

地區永久磁碟可在同一個地區的兩個區域之間複製資料,用法與一般永久磁碟類似。萬一發生區域服務中斷,Kubernetes 可使用此磁碟區將工作負載容錯移轉至另一個區域。您可以使用地區永久磁碟,針對 GKE 上的有狀態工作負載來建構具有高度可用性的解決方案。使用者必須確認主要區域和容錯移轉區域均已設定足夠的資源容量,可以執行此工作負載。

針對資料庫這類需要高可用性和高效能的應用程式,您可以選擇使用地區 SSD 永久磁碟。詳情請參閱區塊儲存空間效能比較

與一般永久磁碟相同,地區永久磁碟可以視需求動態佈建,或由叢集管理員事先手動佈建。

如要瞭解如何新增地區永久磁碟,請參閱佈建地區永久磁碟的操作說明

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件