本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

使用 Kubernetes 調整持久卷大小

編者按:此文章是關於 Kubernetes 1.11 新功能的一系列深度文章之一

在 Kubernetes v1.11 中,持久卷擴充套件功能正在升級到 Beta 版。此功能允許使用者透過編輯 `PersistentVolumeClaim` (PVC) 物件輕鬆調整現有卷的大小。使用者不再需要手動與儲存後端互動或刪除並重新建立 PV 和 PVC 物件來增加捲的大小。不支援縮小持久卷。

卷擴充套件在 v1.8 中作為 Alpha 功能引入,v1.11 之前的版本需要啟用功能門 `ExpandPersistentVolumes` 和准入控制器 `PersistentVolumeClaimResize`(後者阻止擴充套件其底層儲存提供商不支援調整大小的 PVC)。在 Kubernetes v1.11+ 中,功能門和准入控制器都預設啟用。

儘管該功能預設啟用,但叢集管理員必須選擇允許使用者調整其卷的大小。Kubernetes v1.11 支援以下內建卷外掛的卷擴充套件:AWS-EBS、GCE-PD、Azure Disk、Azure File、Glusterfs、Cinder、Portworx 和 Ceph RBD。一旦管理員確定底層提供商支援卷擴充套件,他們就可以透過在其 `StorageClass` 物件中將 `allowVolumeExpansion` 欄位設定為 `true` 來向用戶提供該功能。只有從該 `StorageClass` 建立的 PVC 才允許觸發卷擴充套件。

~> cat standard.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
parameters:
  type: pd-standard
provisioner: kubernetes.io/gce-pd
allowVolumeExpansion: true
reclaimPolicy: Delete

任何由此 `StorageClass` 建立的 PVC 都可以進行編輯(如下所示)以請求更多空間。Kubernetes 會將儲存欄位的更改解釋為請求更多空間,並觸發自動卷大小調整。

PVC StorageClass

檔案系統擴充套件

塊儲存卷型別,如 GCE-PD、AWS-EBS、Azure Disk、Cinder 和 Ceph RBD,通常需要檔案系統擴充套件,然後擴展卷的額外空間才能被 Pod 使用。當引用卷的 Pod 重啟時,Kubernetes 會自動處理此問題。

網路附加檔案系統(如 Glusterfs 和 Azure File)可以在不重啟引用 Pod 的情況下進行擴充套件,因為這些系統不需要特殊的檔案系統擴充套件。

檔案系統擴充套件必須透過終止使用該卷的 Pod 來觸發。更具體地說:

  • 編輯 PVC 以請求更多空間。
  • 一旦底層卷由儲存提供商擴充套件,PersistentVolume 物件將反映更新的大小,並且 PVC 將具有 `FileSystemResizePending` 條件。

您可以透過執行 `kubectl get pvc -o yaml` 進行驗證

~> kubectl get pvc myclaim -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
  namespace: default
  uid: 02d4aa83-83cd-11e8-909d-42010af00004
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 14Gi
  storageClassName: standard
  volumeName: pvc-xxx
status:
  capacity:
    storage: 9G
  conditions:
  - lastProbeTime: null
    lastTransitionTime: 2018-07-11T14:51:10Z
    message: Waiting for user to (re-)start a pod to finish file system resize of
      volume on node.
    status: "True"
    type: FileSystemResizePending
  phase: Bound
  • 一旦 PVC 具有條件 `FileSystemResizePending`,就可以重啟使用該 PVC 的 Pod 以完成節點上的檔案系統大小調整。可以透過刪除並重新建立 Pod,或者透過縮減部署然後再次擴容來實現重啟。
  • 檔案系統大小調整完成後,PVC 將自動更新以反映新大小。

檔案系統擴充套件過程中遇到的任何錯誤都應作為 Pod 上的事件提供。

線上檔案系統擴充套件

Kubernetes v1.11 還引入了一個名為線上檔案系統擴充套件的 Alpha 功能。此功能允許在卷仍被 Pod 使用時進行檔案系統擴充套件。由於此功能是 Alpha 版,因此需要啟用功能門 `ExpandInUsePersistentVolumes`。它受內建卷外掛 GCE-PD、AWS-EBS、Cinder 和 Ceph RBD 支援。啟用此功能後,引用已調整大小卷的 Pod 無需重啟。相反,檔案系統將在卷擴充套件過程中自動線上調整大小。檔案系統擴充套件直到 Pod 引用已調整大小的卷時才會發生,因此如果沒有任何 Pod 引用該卷正在執行,則檔案系統擴充套件將不會發生。

我如何瞭解更多資訊?

在此處檢視有關此功能的更多文件:http://k8s.io/docs/concepts/storage/persistent-volumes