×

容器存储接口 (CSI) 允许 Red Hat OpenShift Service on AWS 使用实现CSI 接口作为持久性存储的存储后端来使用存储。

Red Hat OpenShift Service on AWS 支持CSI 规范的 1.6.0 版本。

CSI 架构

CSI 驱动程序通常作为容器镜像提供。这些容器不知道它们运行在 Red Hat OpenShift Service on AWS 中。要在 Red Hat OpenShift Service on AWS 中使用兼容 CSI 的存储后端,集群管理员必须部署几个组件,这些组件充当 Red Hat OpenShift Service on AWS 和存储驱动程序之间的桥梁。

下图提供了在 Red Hat OpenShift Service on AWS 集群中的 Pod 中运行的组件的高级概述。

Architecture of CSI components

可以为不同的存储后端运行多个 CSI 驱动程序。每个驱动程序都需要使用驱动程序和 CSI 注册器的自己的外部控制器部署和守护程序集。

外部 CSI 控制器

外部 CSI 控制器是一个部署,它部署一个或多个包含五个容器的 Pod。

  • 快照程序容器监视VolumeSnapshotVolumeSnapshotContent对象,并负责创建和删除VolumeSnapshotContent对象。

  • 调整器容器是一个 sidecar 容器,它监视PersistentVolumeClaim更新,并在您请求PersistentVolumeClaim对象上更多存储空间时,对 CSI 端点触发ControllerExpandVolume操作。

  • 外部 CSI 附加器容器将 Red Hat OpenShift Service on AWS 的attachdetach调用转换为对 CSI 驱动程序的相应ControllerPublishControllerUnpublish调用。

  • 外部 CSI 预配器容器将 Red Hat OpenShift Service on AWS 的provisiondelete调用转换为对 CSI 驱动程序的相应CreateVolumeDeleteVolume调用。

  • 一个 CSI 驱动程序容器。

CSI 附加器和 CSI 预配器容器使用 UNIX 域套接字与 CSI 驱动程序容器通信,确保没有 CSI 通信离开 Pod。CSI 驱动程序无法从 Pod 外部访问。

attachdetachprovisiondelete操作通常需要 CSI 驱动程序使用存储后端的凭据。在基础架构节点上运行 CSI 控制器 Pod,以便凭据永远不会泄漏到用户进程,即使在计算节点发生灾难性安全漏洞的情况下也是如此。

对于不支持第三方attachdetach操作的 CSI 驱动程序,也必须运行外部附加器。外部附加器不会向 CSI 驱动程序发出任何ControllerPublishControllerUnpublish操作。但是,它仍然必须运行才能实现必要的 Red Hat OpenShift Service on AWS 附加 API。

CSI 驱动程序守护程序集

CSI 驱动程序守护程序集在每个节点上运行一个 Pod,允许 Red Hat OpenShift Service on AWS 将 CSI 驱动程序提供的存储挂载到节点上,并在用户工作负载(Pod)中将其用作持久卷 (PV)。安装了 CSI 驱动程序的 Pod 包含以下容器:

  • 一个 CSI 驱动程序注册器,它将 CSI 驱动程序注册到节点上运行的openshift-node服务中。然后,节点上运行的openshift-node进程使用节点上可用的 UNIX 域套接字直接连接 CSI 驱动程序。

  • 一个 CSI 驱动程序。

在节点上部署的 CSI 驱动程序应尽可能少地拥有存储后端的凭据。Red Hat OpenShift Service on AWS 仅使用节点插件集的 CSI 调用,例如NodePublish/NodeUnpublishNodeStage/NodeUnstage(如果这些调用已实现)。

Red Hat OpenShift Service on AWS 支持的 CSI 驱动程序

Red Hat OpenShift Service on AWS 默认安装某些 CSI 驱动程序,为用户提供树内卷插件无法实现的存储选项。

为了创建挂载到这些受支持存储资产的 CSI 预配持久卷,Red Hat OpenShift Service on AWS 默认安装必要的 CSI 驱动程序 Operator、CSI 驱动程序和所需的存储类。有关 Operator 和驱动程序的默认命名空间的更多详细信息,请参阅特定 CSI 驱动程序 Operator 的文档。

下表描述了随 Red Hat OpenShift Service on AWS 安装的 CSI 驱动程序以及它们支持的 CSI 功能,例如卷快照和调整大小。

除了下表中列出的驱动程序外,ROSA 还与来自第三方存储供应商的 CSI 驱动程序一起工作。Red Hat 不负责监督第三方供应程序或连接的 CSI 驱动程序,供应商完全控制源代码、部署、操作和 Kubernetes 兼容性。这些卷供应程序被认为是客户管理的,相应的供应商负责提供支持。有关更多信息,请参阅Red Hat OpenShift Service on AWS 的共享责任矩阵。

表 1. Red Hat OpenShift Service on AWS 中支持的 CSI 驱动程序和功能
CSI 驱动程序 CSI 卷快照 CSI 克隆 CSI 调整大小 内联临时卷

AWS EBS

AWS EFS

LVM 存储

动态配置

持久性存储的动态配置取决于 CSI 驱动程序和底层存储后端的 capabilities。CSI 驱动程序的提供商应记录如何在 Red Hat OpenShift Service on AWS 中创建存储类以及可用于配置的参数。

可以将创建的存储类配置为启用动态配置。

步骤
  • 创建一个默认存储类,以确保所有不需要任何特殊存储类的 PVC 都由已安装的 CSI 驱动程序配置。

    # oc create -f - << EOF
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class> (1)
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: <provisioner-name> (2)
    parameters:
    EOF
    1 将要创建的存储类的名称。
    2 已安装的 CSI 驱动程序的名称。

使用 CSI 驱动程序的示例

以下示例安装默认的 MySQL 模板,无需对模板进行任何更改。

先决条件
  • CSI 驱动程序已部署。

  • 已为动态配置创建存储类。

步骤
  • 创建 MySQL 模板

    # oc new-app mysql-persistent
    示例输出
    --> Deploying template "openshift/mysql-persistent" to project default
    ...
    # oc get pvc
    示例输出
    NAME              STATUS    VOLUME                                   CAPACITY
    ACCESS MODES   STORAGECLASS   AGE
    mysql             Bound     kubernetes-dynamic-pv-3271ffcb4e1811e8   1Gi
    RWO            cinder         3s