5.6. 管理默认存储类
5.6.1. 概述
管理默认存储类可让您完成几个不同的目标:
- 禁用动态置备来强制静态置备。
- 当您有其他首选存储类时,防止存储操作器重新创建初始默认存储类。
- 重命名或更改默认存储类
要实现这些目标,您可以更改 ClusterCSIDriver
对象中的 spec.storageClassState
字段的设置。此字段可能的设置有:
- Managed: (默认)Container Storage Interface (CSI) Operator 会主动管理其默认存储类,集群管理员对默认存储类进行的大多数手动更改会被删除,如果您试图手动默认存储类,则它们会被持续重新创建。
- Unmanaged :您可以修改默认存储类。CSI Operator 不会主动管理存储类,因此它不会协调它自动创建的默认存储类。
- Removed: CSI operator 删除默认存储类。
以下 Container Storage Interface (CSI) 驱动程序操作器支持管理默认存储类:
5.6.2. 使用 Web 控制台管理默认存储类
先决条件
- 访问 OpenShift Container Platform Web 控制台。
- 使用 cluster-admin 权限访问集群。
流程
使用 Web 控制台管理默认存储类:
- 登录到 web 控制台。
- 点 Administration > CustomResourceDefinitions。
-
在 CustomResourceDefinitions 页面中,键入
clustercsidriver
来查找ClusterCSIDriver
对象。 - 点 ClusterCSIDriver,然后点 Instances 选项卡。
- 点所需实例的名称,然后点 YAML 选项卡。
添加
spec.storageClassState
字段,值为Managed
、Unmanaged
或Removed
。示例
... spec: driverConfig: driverType: '' logLevel: Normal managementState: Managed observedConfig: null operatorLogLevel: Normal storageClassState: Unmanaged 1 ...
- 1
spec.storageClassState
字段设置为 "Unmanaged"
- 点击 Save。
5.6.3. 使用 CLI 管理默认存储类
先决条件
- 使用 cluster-admin 权限访问集群。
流程
要使用 CLI 管理存储类,请运行以下命令:
oc patch clustercsidriver $DRIVERNAME --type=merge -p "{\"spec\":{\"storageClassState\":\"${STATE}\"}}" 1
- 1
- 其中
${STATE}
为 "Removed" 或 "Managed" 或 "Unmanaged"。其中
$DRIVERNAME
是置备程序名称。您可以通过运行命令oc get sc
来查找置备程序名称。
5.6.4. 缺少或多个默认存储类
5.6.4.1. 多个默认存储类
如果您将非默认存储类标记为默认存储类,且没有取消设置现有的默认存储类,或者在默认存储类已存在时创建默认存储类,则可能会出现多个默认存储类。当存在多个默认存储类时,任何请求默认存储类 (pvc.spec.storageClassName
=nil) 的持久性卷声明 (PVC) 都会获得最近创建的默认存储类,无论该存储类的默认存储类是什么,管理员都会在警报仪表板中收到警报,该类有多个默认存储类,MultipleDefaultStorageClasses
。
5.6.4.2. 缺少默认存储类
PVC 可能会尝试使用不存在的默认存储类:
- 管理员删除默认存储类或将其标记为非默认,然后用户会创建一个请求默认存储类的 PVC。
- 在安装过程中,安装程序会创建一个请求默认存储类的 PVC,该类尚未创建。
在前面的场景中,PVC 会无限期保持待处理状态。
OpenShift Container Platform 提供了一个功能来重新将默认存储类分配给 PVC,以便它们不会处于待处理状态。启用此功能后,会请求在没有默认存储类时创建的默认存储类的 PVC,保持待处理状态,直到创建默认存储类或现有存储类之一声明默认存储类。创建或声明默认存储类后,PVC 会获取新的默认存储类。
Retroactive 默认存储类分配只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.6.4.2.1. 流程
启用重新引入的默认存储类分配:
启用功能门(请参阅 Nodes
working with cluster Enabling features using feature gates)。 重要在使用功能门开启技术预览功能后,无法关闭它们。因此,集群升级会被阻止。
以下配置示例启用 retroactive 默认存储类分配,以及所有其他技术预览功能:
apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade 1 ...
- 1
- 启用重新引入默认存储类分配。
5.6.5. 更改默认存储类
使用以下步骤更改默认存储类。
例如,您有两个定义的存储类 gp3
和 standard
,您想要将默认存储类从 gp3
改为 standard
。
先决条件
- 使用 cluster-admin 权限访问集群。
流程
更改默认存储类:
列出存储类:
$ oc get storageclass
输出示例
NAME TYPE gp3 (default) kubernetes.io/aws-ebs 1 standard kubernetes.io/aws-ebs
- 1
(default)
表示默认存储类。
将所需的存储类设为默认存储类。
对于所需的存储类,运行以下命令将
storageclass.kubernetes.io/is-default-class
注解设置为true
:$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
注意您可以短时间内有多个默认存储类。但是,您应该确保最终只有一个默认存储类。
当存在多个默认存储类时,任何请求默认存储类 (
pvc.spec.storageClassName
=nil) 的持久性卷声明 (PVC) 都会获得最近创建的默认存储类,无论该存储类的默认存储类是什么,管理员都会在警报仪表板中收到警报,该类有多个默认存储类,MultipleDefaultStorageClasses
。从旧的默认存储类中删除默认存储类设置。
对于旧的默认存储类,运行以下命令将
storageclass.kubernetes.io/is-default-class
注解的值改为false
:$ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
确认更改:
$ oc get storageclass
输出示例
NAME TYPE gp3 kubernetes.io/aws-ebs standard (default) kubernetes.io/aws-ebs