本页面介绍了如何更改用于为没有特殊要求的 PersistentVolumeClaims 提供卷的默认存储类(Storage Class)。
你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
要检查版本,请输入 kubectl version。
根据安装方式的不同,您的 Kubernetes 集群在部署时可能已经指定了一个默认的 StorageClass。当 PersistentVolumeClaims 不需要任何特定的存储类时,系统会使用此默认 StorageClass 动态提供存储。详情请参阅 PersistentVolumeClaim 文档。
预装的默认 StorageClass 可能不符合您的工作负载预期;例如,它提供的存储可能过于昂贵。如果是这种情况,您可以更改默认的 StorageClass,或者将其完全禁用,以避免动态供应存储。
删除默认的 StorageClass 可能不起作用,因为它可能会被集群中运行的插件管理器自动重新创建。请查阅您的安装文档,了解有关插件管理器以及如何禁用特定插件的详细信息。
列出集群中的 StorageClasses
kubectl get storageclass
输出类似于此
NAME PROVISIONER AGE
standard (default) kubernetes.io/gce-pd 1d
gold kubernetes.io/gce-pd 1d
默认的 StorageClass 被标记为 (default)。
将默认 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 的名称。
将 StorageClass 标记为默认
与上一步类似,您需要添加/设置注解 storageclass.kubernetes.io/is-default-class=true。
kubectl patch storageclass gold -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
请注意,您可以有多个标记为默认的 StorageClass。如果超过一个 StorageClass 被标记为默认,则没有显式定义 storageClassName 的 PersistentVolumeClaim 将使用最近创建的默认 StorageClass 进行创建。当创建一个指定了 volumeName 的 PersistentVolumeClaim 时,如果静态卷的 storageClassName 与 PersistentVolumeClaim 上的 StorageClass 不匹配,它将保持挂起状态。
验证您选择的 StorageClass 是否为默认
kubectl get storageclass
输出类似于此
NAME PROVISIONER AGE
standard kubernetes.io/gce-pd 1d
gold (default) kubernetes.io/gce-pd 1d