×

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

OpenShift Container Platform 4.17 支持CSI 规范的 1.6.0 版本。

CSI 架构

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

下图提供了在 OpenShift Container Platform 集群中的 Pod 中运行的组件的高级概述。

Architecture of CSI components

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

外部 CSI 控制器

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

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

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

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

  • 外部 CSI 预配程序容器将来自 OpenShift Container Platform 的provisiondelete调用转换为对 CSI 驱动程序的相应CreateVolumeDeleteVolume调用。

  • CSI 驱动程序容器。

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

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

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

CSI 驱动程序守护程序集

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

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

  • CSI 驱动程序。

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

OpenShift Container Platform 支持的 CSI 驱动程序

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

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

AWS EFS 和 GCP Filestore CSI 驱动程序默认未安装,必须手动安装。有关安装 AWS EFS CSI 驱动程序的说明,请参阅 设置 AWS 弹性文件系统 CSI 驱动程序操作符。有关安装 GCP Filestore CSI 驱动程序的说明,请参阅 Google Compute Platform Filestore CSI 驱动程序操作符

下表描述了 OpenShift Container Platform 支持的、随 OpenShift Container Platform 一起安装的 CSI 驱动程序,以及它们支持的 CSI 功能,例如卷快照和调整大小。

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

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

AWS EBS

AWS EFS

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

GCP Filestore

IBM Power® 虚拟服务器块

IBM Cloud® 块

[3]

[3]

LVM 存储

Microsoft Azure 磁盘

Microsoft Azure Stack Hub

Microsoft Azure 文件

[4]

[4]

OpenStack Cinder

OpenShift Data Foundation

OpenStack Manila

共享资源

CIFS/SMB

VMware vSphere

[1]

[2]

1.

  • vCenter Server 和 ESXi 都需要 vSphere 7.0 Update 3 或更高版本。

  • 不支持文件共享卷。

2.

  • 离线卷扩展:最低要求的 vSphere 版本为 6.7 Update 3 P06

  • 在线卷扩展:最低要求的 vSphere 版本为 7.0 Update 2。

3.

  • 不支持离线快照或调整大小。卷必须附加到正在运行的 pod。

4.

  • Azure 文件克隆不支持 NFS 协议。它支持使用 SMB 协议的azurefile-csi存储类。

  • Azure 文件克隆和快照是技术预览功能

Azure 文件 CSI 克隆和快照仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户尽早访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

动态配置

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

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

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

卷填充程序

卷填充程序使用持久卷声明 (PVC) 规范中的datasource字段来创建预填充卷。

卷填充程序当前已启用,并作为技术预览功能受支持。但是,OpenShift Container Platform 没有附带任何卷填充程序。

卷填充程序仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户尽早访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

有关卷填充程序的更多信息,请参阅 Kubernetes 卷填充程序