CSI 驱动程序通常作为容器镜像交付。这些容器不知道运行它们的 OpenShift Container Platform。要在 OpenShift Container Platform 中使用兼容 CSI 的存储后端,集群管理员必须部署几个组件,这些组件充当 OpenShift Container Platform 和存储驱动程序之间的桥梁。
下图提供了在 OpenShift Container Platform 集群中的 Pod 中运行的组件的高级概述。
可以为不同的存储后端运行多个 CSI 驱动程序。每个驱动程序都需要使用驱动程序和 CSI 注册器的自己的外部控制器部署和守护程序集。
外部 CSI 控制器是一个部署,它部署一个或多个包含五个容器的 Pod。
快照程序容器监视VolumeSnapshot
和VolumeSnapshotContent
对象,并负责创建和删除VolumeSnapshotContent
对象。
调整器容器是一个 sidecar 容器,它监视PersistentVolumeClaim
更新,并在您请求PersistentVolumeClaim
对象上的更多存储空间时,针对 CSI 端点触发ControllerExpandVolume
操作。
外部 CSI 附加程序容器将来自 OpenShift Container Platform 的attach
和detach
调用转换为对 CSI 驱动程序的相应ControllerPublish
和ControllerUnpublish
调用。
外部 CSI 预配程序容器将来自 OpenShift Container Platform 的provision
和delete
调用转换为对 CSI 驱动程序的相应CreateVolume
和DeleteVolume
调用。
CSI 驱动程序容器。
CSI 附加程序和 CSI 预配程序容器使用 UNIX 域套接字与 CSI 驱动程序容器通信,确保没有 CSI 通信离开 Pod。CSI 驱动程序无法从 Pod 外部访问。
|
对于不支持第三方 |
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
/NodeUnpublish
和NodeStage
/NodeUnstage
(如果实现了这些调用)。
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 功能。 |
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 驱动程序的名称。 |
以下示例安装默认的 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 卷填充程序。