更改預設儲存類

本頁面介紹如何更改用於為沒有特殊要求的 PersistentVolumeClaims 動態供應卷的預設 StorageClass。

準備工作

你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不充當控制平面主機的節點組成的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 演練場之一。

要檢查版本,請輸入 kubectl version

為什麼要更改預設儲存類?

根據安裝方式,你的 Kubernetes 叢集可能部署了一個標記為預設的現有 StorageClass。然後,此預設 StorageClass 將用於為不需要任何特定儲存類的 PersistentVolumeClaims 動態供應儲存。有關詳細資訊,請參閱 PersistentVolumeClaim 文件

預安裝的預設 StorageClass 可能不太適合你預期工作負載;例如,它可能會供應過於昂貴的儲存。如果是這種情況,你可以更改預設 StorageClass,或完全停用它以避免動態供應儲存。

刪除預設 StorageClass 可能不起作用,因為它可能會被叢集中執行的外掛管理器自動重新建立。有關外掛管理器以及如何停用單個外掛的詳細資訊,請查閱你的安裝文件。

更改預設 StorageClass

  1. 列出叢集中的 StorageClass

    kubectl get storageclass
    

    輸出類似於:

    NAME                 PROVISIONER               AGE
    standard (default)   kubernetes.io/gce-pd      1d
    gold                 kubernetes.io/gce-pd      1d
    

    預設 StorageClass 用 (default) 標記。

  2. 將預設 StorageClass 標記為非預設

    預設 StorageClass 有一個註解 storageclass.kubernetes.io/is-default-class 設定為 true。任何其他值或缺少該註解都被解釋為 false

    要將 StorageClass 標記為非預設,你需要將其值更改為 false

    kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    

    其中 standard 是你選擇的 StorageClass 的名稱。

  3. 將 StorageClass 標記為預設

    與上一步類似,你需要新增/設定註解 storageclass.kubernetes.io/is-default-class=true

    kubectl patch storageclass gold -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

    請注意,你可以有多個 StorageClass 標記為預設。如果將多個 StorageClass 標記為預設,則沒有明確定義 storageClassNamePersistentVolumeClaim 將使用最新建立的預設 StorageClass 進行建立。當使用指定的 volumeName 建立 PersistentVolumeClaim 時,如果靜態卷的 storageClassNamePersistentVolumeClaim 上的 StorageClass 不匹配,則它將保持掛起狀態。

  4. 驗證你選擇的 StorageClass 是否為預設

    kubectl get storageclass
    

    輸出類似於:

    NAME             PROVISIONER               AGE
    standard         kubernetes.io/gce-pd      1d
    gold (default)   kubernetes.io/gce-pd      1d
    

下一步

上次修改時間:2024 年 10 月 4 日晚上 11:16 PST:修復預設儲存類文件中的不一致性 (4e3523c0a0)