更改默认的 StorageClass

本页面展示如何更改用于为没有特殊要求的 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 具有设置为 true 的注释 storageclass.kubernetes.io/is-default-class。 任何其他值或缺少注释都将解释为 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 标记为默认。 如果其中两个或多个被标记为默认,则无法创建未明确指定 storageClassNamePersistentVolumeClaim

  4. 验证你选择的 StorageClass 是否为默认

    kubectl get storageclass
    

    输出类似于这样

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

下一步

上次修改时间:太平洋标准时间 2023 年 12 月 06 日上午 9:05:清理 change-default-storage-class.md (d1d6eda640)