6.6. 管理默认存储类


6.6.1. 概述

管理默认存储类可让您完成几个不同的目标:

  • 禁用动态置备来强制静态置备。
  • 当您有其他首选存储类时,防止存储操作器重新创建初始默认存储类。
  • 重命名或更改默认存储类

要实现这些目标,您可以更改 ClusterCSIDriver 对象中的 spec.storageClassState 字段的设置。此字段可能的设置有:

  • Managed: (默认)Container Storage Interface (CSI) Operator 会主动管理其默认存储类,集群管理员对默认存储类进行的大多数手动更改会被删除,如果您试图手动默认存储类,则它们会被持续重新创建。
  • Unmanaged :您可以修改默认存储类。CSI Operator 不会主动管理存储类,因此它不会协调它自动创建的默认存储类。
  • Removed: CSI operator 删除默认存储类。

以下 Container Storage Interface (CSI) 驱动程序操作器支持管理默认存储类:

6.6.2. 使用 Web 控制台管理默认存储类

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 使用 cluster-admin 权限访问集群。

流程

使用 Web 控制台管理默认存储类:

  1. 登录到 web 控制台。
  2. Administration > CustomResourceDefinitions
  3. CustomResourceDefinitions 页面中,键入 clustercsidriver 来查找 ClusterCSIDriver 对象。
  4. ClusterCSIDriver,然后点 Instances 选项卡。
  5. 点所需实例的名称,然后点 YAML 选项卡。
  6. 添加 spec.storageClassState 字段,值为 ManagedUnmanagedRemoved

    示例

    ...
    spec:
      driverConfig:
        driverType: ''
      logLevel: Normal
      managementState: Managed
      observedConfig: null
      operatorLogLevel: Normal
      storageClassState: Unmanaged 
    1
    
    ...
    Copy to Clipboard Toggle word wrap

    1
    spec.storageClassState 字段设置为 "Unmanaged"
  7. 点击 Save

6.6.3. 使用 CLI 管理默认存储类

先决条件

  • 使用 cluster-admin 权限访问集群。

流程

要使用 CLI 管理存储类,请运行以下命令:

$ oc patch clustercsidriver $DRIVERNAME --type=merge -p "{\"spec\":{\"storageClassState\":\"${STATE}\"}}" 
1
Copy to Clipboard Toggle word wrap
1
其中 ${STATE} 为 "Removed" 或 "Managed" 或 "Unmanaged"。

其中 $DRIVERNAME 是置备程序名称。您可以通过运行命令 oc get sc 来查找置备程序名称。

6.6.4. 缺少或多个默认存储类

6.6.4.1. 多个默认存储类

如果您将非默认存储类标记为默认存储类,且没有取消设置现有的默认存储类,或者在默认存储类已存在时创建默认存储类,则可能会出现多个默认存储类。当存在多个默认存储类时,任何请求默认存储类 (pvc.spec.storageClassName=nil) 的持久性卷声明 (PVC) 都会获得最近创建的默认存储类,无论该存储类的默认存储类是什么,管理员都会在警报仪表板中收到警报,该类有多个默认存储类,MultipleDefaultStorageClasses

6.6.4.2. 缺少默认存储类

PVC 可能会尝试使用不存在的默认存储类:

  • 管理员删除默认存储类或将其标记为非默认,然后用户会创建一个请求默认存储类的 PVC。
  • 在安装过程中,安装程序会创建一个请求默认存储类的 PVC,该类尚未创建。

在前面的场景中,PVC 会无限期处于 pending 状态。要解决这种情况,请创建一个默认存储类,或声明其中一个现有存储类作为默认值。创建或声明默认存储类后,PVC 就会获取新的默认存储类。如果可能,PVC 最终会绑定到静态或动态置备的 PV,并移出待处理状态。

6.6.5. 更改默认存储类

使用以下步骤更改默认存储类。

例如,您有两个定义的存储类 gp3standard,您想要将默认存储类从 gp3 改为 standard

先决条件

  • 使用 cluster-admin 权限访问集群。

流程

更改默认存储类:

  1. 列出存储类:

    $ oc get storageclass
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                 TYPE
    gp3 (default)        ebs.csi.aws.com 
    1
    
    standard             ebs.csi.aws.com
    Copy to Clipboard Toggle word wrap

    1
    (default) 表示默认存储类。
  2. 将所需的存储类设为默认存储类。

    对于所需的存储类,运行以下命令将 storageclass.kubernetes.io/is-default-class 注解设置为 true

    $ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
    Copy to Clipboard Toggle word wrap
    注意

    您可以短时间内有多个默认存储类。但是,您应该确保最终只有一个默认存储类。

    当存在多个默认存储类时,任何请求默认存储类 (pvc.spec.storageClassName=nil) 的持久性卷声明 (PVC) 都会获得最近创建的默认存储类,无论该存储类的默认存储类是什么,管理员都会在警报仪表板中收到警报,该类有多个默认存储类,MultipleDefaultStorageClasses

  3. 从旧的默认存储类中删除默认存储类设置。

    对于旧的默认存储类,运行以下命令将 storageclass.kubernetes.io/is-default-class 注解的值改为 false

    $ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
    Copy to Clipboard Toggle word wrap
  4. 确认更改:

    $ oc get storageclass
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                 TYPE
    gp3                  ebs.csi.aws.com
    standard (default)   ebs.csi.aws.com
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat