更改默认 StorageClass

本页展示了如何更改用于为没有特殊要求的 PersistentVolumeClaims 配置卷的默认存储类。

在开始之前

您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个,也可以使用以下 Kubernetes 游乐场之一

要检查版本,请输入 kubectl version

为什么要更改默认存储类?

根据安装方法,您的 Kubernetes 集群可能已部署了一个现有的 StorageClass,该 StorageClass 被标记为默认。然后,此默认 StorageClass 用于为不需要任何特定存储类的 PersistentVolumeClaims 动态配置存储。有关详细信息,请参阅 PersistentVolumeClaim 文档

预安装的默认 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

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

    kubectl get storageclass
    

    输出类似于以下内容

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

下一步

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