第 5 章 使用 Container Storage Interface (CSI)


5.1. 配置 CSI 卷

容器存储接口 (CSI) 允许 OpenShift Container Platform 使用支持 CSI 接口的存储后端提供的持久性存储。

注意

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

5.1.1. CSI 架构

CSI 驱动程序通常由容器镜像提供。这些容器不了解其运行的 OpenShift Container Platform。要在 OpenShift Container Platform 中使用与 CSI 兼容的存储后端,集群管理员必须部署几个组件,作为 OpenShift Container Platform 和存储驱动程序间的桥接。

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

CSI 组件构架

对于不同的存储后端,可以运行多个 CSI 驱动程序。每个驱动程序需要其自身的外部控制器部署,以及带驱动程序和 CSI 注册器的守护进程集。

5.1.1.1. 外部 CSI 控制器

外部 CSI 控制器是一个部署,它部署带有以下五个容器的一个或多个 pod:

  • snapshotter 容器监视 VolumeSnapshotVolumeSnapshotContent 对象,并负责创建和删除 VolumeSnapshotContent 对象。
  • resizer 容器是一个 sidecar 容器,它会在 PersistentVolumeClaim 对象中监视 PersistentVolumeClaim 更新,并在对 PersistentVolumeClaim 对象请求更多存储时针对 CSI 端点触发 ControllerExpandVolume 操作。
  • 一个外部 CSI attacher 容器,它会将 OpenShift Container Platform 的 attachdetach 调用转换为相关的 CSI 驱动程序的 ControllerPublishControllerUnpublish 调用。
  • 一个外部 CSI 置备程序容器,它可将 OpenShift Container Platform 的 provisiondelete 调用转换为相应的 CSI 驱动程序的 CreateVolumeDeleteVolume 调用。
  • 一个 CSI 驱动程序容器。

CSI attacher 和 CSI provisioner 容器使用 UNIX 域套接字与 CSI 驱动程序容器进行交互,确保没有 CSI 通讯会离开 pod。从 pod 以外无法访问 CSI 驱动程序。

注意

attachdetachprovisiondelete 操作通常需要 CSI 驱动程序在存储后端使用凭证。在 infrastructure 节点上运行 CSI controller pod,因此即使在一个计算节点上发生严重的安全破坏时,凭据也不会暴露给用户进程。

注意

当不支持第三方的 attachdetach 操作时,还需要为 CSI 驱动程序运行外部的附加器。外部附加器不会向 CSI 驱动程序发出任何 ControllerPublishControllerUnpublish 操作。然而,它仍必须运行方可实现所需的 OpenShift Container Platform attachment API。

5.1.1.2. CSI 驱动程序守护进程集

CSI 驱动程序守护进程集在每个节点上运行一个 pod,它允许 OpenShift Container Platform 挂载 CSI 驱动程序提供的存储,并使用它作为持久性卷 (PV) 的用户负载 (pod) 。安装了 CSI 驱动程序的 pod 包含以下容器:

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

在节点上部署的 CSI 驱动程序应该在存储后端中拥有尽量少的凭证。OpenShift Container Platform 只使用节点插件的 CSI 调用集合,如NodePublish/NodeUnpublishNodeStage/NodeUnstage(如果这些调用已被实现)。

5.1.2. OpenShift Container Platform 支持的 CSI 驱动程序

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

要创建挂载到这些支持的存储资产中的 CSI 置备的持久性卷,OpenShift Container Platform 会默认安装必要的 CSI 驱动程序 Operator、CSI 驱动程序和所需的存储类。如需有关 Operator 和驱动程序的默认命名空间的更多信息,请参阅特定 CSI Driver Operator 的文档。

重要

默认情况下,AWS EFS 和 GCP Filestore CSI 驱动程序不会被安装,必须手动安装。有关安装 AWS EFS CSI 驱动程序的步骤,请参阅设置 AWS Elastic File Service CSI Driver Operator。有关安装 GCP Filestore CSI 驱动程序的步骤,请参阅 Google Compute Platform Filestore CSI Driver Operator

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

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

AliCloud Disk

 ✅

 -

 ✅

 -

AWS EBS

 ✅

 -

 ✅

 -

AWS EFS

 -

 -

 -

 -

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

  ✅

  ✅

 ✅

 -

GCP Filestore

 ✅

 -

 ✅

 -

IBM Power® Virtual Server Block

 -

 -

 ✅

 -

IBM Cloud® Block

 ✅[3]

 -

 ✅[3]

 -

LVM 存储

 ✅

 ✅

 ✅

 -

Microsoft Azure Disk

 ✅

 ✅

 ✅

 -

Microsoft Azure Stack Hub

 ✅

 ✅

 ✅

 -

Microsoft Azure 文件

 -

 -

 ✅

 ✅

OpenStack Cinder

 ✅

 ✅

 ✅

 -

OpenShift Data Foundation

 ✅

 ✅

 ✅

 -

OpenStack Manila

 ✅

 -

 -

 -

共享资源

 -

 -

 -

 ✅

VMware vSphere

 ✅[1]

 -

 ✅[2]

 -

1.

  • 对于 vCenter Server 和 ESXi,需要 vSphere 版本 7.0 更新 3 或更高版本。
  • 不支持 fileshare 卷。

2.

  • 离线卷扩展:最低所需的 vSphere 版本为 6.7 更新 3 P06
  • 在线卷扩展:最低的 vSphere 版本为 7.0 更新 2。

3.

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

如果上表中没有列出您的 CSI 驱动程序,则需要按照 CSI 存储厂商提供的安装说明方可使用其支持的 CSI 功能。

5.1.3. 动态置备

动态置备持久性存储取决于 CSI 驱动程序和底层存储后端的功能。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 驱动程序名称。

5.1.4. 使用 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

5.1.5. 卷填充器

卷填充器使用持久性卷声明 (PVC) spec 中的 datasource 字段来创建预先填充的卷。

目前启用了卷填充,并作为技术预览功能支持。但是,OpenShift Container Platform 不附带任何卷填充器。

重要

卷填充程序只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

如需有关卷填充器的更多信息,请参阅 Kubernetes 卷填充器

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.