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 控制台管理默认存储类:

  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
    ...

    1
    spec.storageClassState 字段设置为 "Unmanaged"
  7. 点击 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 会无限期处于 pending 状态。要解决这种情况,请创建一个默认存储类,或声明其中一个现有存储类作为默认值。创建或声明默认存储类后,PVC 就会获取新的默认存储类。如果可能,PVC 最终会绑定到静态或动态置备的 PV,并移出待处理状态。

5.6.5. 更改默认存储类

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

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

先决条件

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

流程

更改默认存储类:

  1. 列出存储类:

    $ oc get storageclass

    输出示例

    NAME                 TYPE
    gp3 (default)        kubernetes.io/aws-ebs 1
    standard             kubernetes.io/aws-ebs

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

    对于所需的存储类,运行以下命令将 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

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

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

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

    $ oc get storageclass

    输出示例

    NAME                 TYPE
    gp3                  kubernetes.io/aws-ebs
    standard (default)   kubernetes.io/aws-ebs

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.