CSI 驱动程序通常作为容器镜像交付。这些容器不知道它们运行的 OpenShift Dedicated 环境。要在 OpenShift Dedicated 中使用兼容 CSI 的存储后端,集群管理员必须部署一些组件作为 OpenShift Dedicated 和存储驱动程序之间的桥梁。
下图提供了在 OpenShift Dedicated 集群中以 Pod 形式运行的组件的高级概述。
可以为不同的存储后端运行多个 CSI 驱动程序。每个驱动程序都需要它自己的外部控制器部署和带有驱动程序和 CSI 注册器的 DaemonSet。
外部 CSI 控制器是一个部署,它部署一个或多个包含五个容器的 Pod。
快照程序容器监视VolumeSnapshot
和VolumeSnapshotContent
对象,并负责创建和删除VolumeSnapshotContent
对象。
调整器容器是一个 sidecar 容器,它监视PersistentVolumeClaim
更新,并在您请求PersistentVolumeClaim
对象上更多存储空间时,对 CSI 端点触发ControllerExpandVolume
操作。
外部 CSI 附加程序容器将 OpenShift Dedicated 的attach
和detach
调用转换为对 CSI 驱动程序的相应ControllerPublish
和ControllerUnpublish
调用。
外部 CSI 置备程序容器将 OpenShift Dedicated 的provision
和delete
调用转换为对 CSI 驱动程序的相应CreateVolume
和DeleteVolume
调用。
CSI 驱动程序容器。
CSI 附加程序和 CSI 置备程序容器使用 UNIX 域套接字与 CSI 驱动程序容器通信,确保没有 CSI 通信离开 Pod。CSI 驱动程序无法从 Pod 外部访问。
|
对于不支持第三方 |
CSI 驱动程序 DaemonSet 在每个节点上运行一个 Pod,允许 OpenShift Dedicated 将 CSI 驱动程序提供的存储挂载到节点,并在用户工作负载(Pod)中将其用作持久卷 (PV)。安装了 CSI 驱动程序的 Pod 包含以下容器
CSI 驱动程序注册器,它将 CSI 驱动程序注册到节点上运行的openshift-node
服务。然后,节点上运行的openshift-node
进程使用节点上可用的 UNIX 域套接字直接连接到 CSI 驱动程序。
CSI 驱动程序。
部署在节点上的 CSI 驱动程序应尽可能少地使用存储后端的凭据。OpenShift Dedicated 只会使用节点插件集的 CSI 调用,例如NodePublish
/NodeUnpublish
和 NodeStage
/NodeUnstage
(如果实现了这些调用)。
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 功能。 |
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 驱动程序的名称。 |
以下示例安装默认的 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