×

容器存储接口 (CSI) 允许 OpenShift Dedicated 使用实现 CSI 接口 的存储后端作为持久性存储。

OpenShift Dedicated 支持 CSI 规范 的 1.6.0 版本。

CSI 架构

CSI 驱动程序通常作为容器镜像交付。这些容器不知道它们运行的 OpenShift Dedicated 环境。要在 OpenShift Dedicated 中使用兼容 CSI 的存储后端,集群管理员必须部署一些组件作为 OpenShift Dedicated 和存储驱动程序之间的桥梁。

下图提供了在 OpenShift Dedicated 集群中以 Pod 形式运行的组件的高级概述。

Architecture of CSI components

可以为不同的存储后端运行多个 CSI 驱动程序。每个驱动程序都需要它自己的外部控制器部署和带有驱动程序和 CSI 注册器的 DaemonSet。

外部 CSI 控制器

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

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

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

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

  • 外部 CSI 置备程序容器将 OpenShift Dedicated 的provisiondelete调用转换为对 CSI 驱动程序的相应CreateVolumeDeleteVolume调用。

  • CSI 驱动程序容器。

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

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

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

CSI 驱动程序 DaemonSet

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

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

  • CSI 驱动程序。

部署在节点上的 CSI 驱动程序应尽可能少地使用存储后端的凭据。OpenShift Dedicated 只会使用节点插件集的 CSI 调用,例如NodePublish/NodeUnpublishNodeStage/NodeUnstage(如果实现了这些调用)。

OpenShift Dedicated 支持的 CSI 驱动程序

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

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

AWS EFS 和 GCP Filestore CSI 驱动程序未默认安装,必须手动安装。有关安装 AWS EFS CSI 驱动程序的说明,请参阅 设置 AWS Elastic File Service CSI 驱动程序 Operator。有关安装 GCP Filestore CSI 驱动程序的说明,请参阅 Google Compute Platform Filestore CSI 驱动程序 Operator

下表描述了 OpenShift Dedicated 支持的 CSI 驱动程序及其支持的 CSI 功能,例如卷快照和调整大小。

如果下表中未列出您的 CSI 驱动程序,则必须按照 CSI 存储供应商提供的安装说明使用其支持的 CSI 功能。

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

AWS EBS

AWS EFS

Google Compute Platform (GCP) 持久性磁盘 (PD)

GCP Filestore

LVM 存储

动态预配

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

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

步骤
  • 创建一个默认存储类,以确保所有不需要任何特殊存储类的 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