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

使用 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 <pvc_name> -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