更改默认存储类
本页面介绍如何更改用于为没有特殊要求的 PersistentVolumeClaims 动态供应卷的默认 StorageClass。
准备工作
你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不充当控制平面主机的节点组成的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用这些 Kubernetes 演练场之一。
要检查版本,请输入 kubectl version
。
为什么要更改默认存储类?
根据安装方式,你的 Kubernetes 集群可能部署了一个标记为默认的现有 StorageClass。然后,此默认 StorageClass 将用于为不需要任何特定存储类的 PersistentVolumeClaims 动态供应存储。有关详细信息,请参阅 PersistentVolumeClaim 文档。
预安装的默认 StorageClass 可能不太适合你预期工作负载;例如,它可能会供应过于昂贵的存储。如果是这种情况,你可以更改默认 StorageClass,或完全禁用它以避免动态供应存储。
删除默认 StorageClass 可能不起作用,因为它可能会被集群中运行的插件管理器自动重新创建。有关插件管理器以及如何禁用单个插件的详细信息,请查阅你的安装文档。
更改默认 StorageClass
列出集群中的 StorageClass
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
下一步
- 了解更多关于 PersistentVolumes 的信息。