CSI 驱动程序通常作为容器镜像提供。这些容器不知道它们运行在 Red Hat OpenShift Service on AWS 中。要在 Red Hat OpenShift Service on AWS 中使用兼容 CSI 的存储后端,集群管理员必须部署几个组件,这些组件充当 Red Hat OpenShift Service on AWS 和存储驱动程序之间的桥梁。
下图提供了在 Red Hat OpenShift Service on AWS 集群中的 Pod 中运行的组件的高级概述。
可以为不同的存储后端运行多个 CSI 驱动程序。每个驱动程序都需要使用驱动程序和 CSI 注册器的自己的外部控制器部署和守护程序集。
外部 CSI 控制器是一个部署,它部署一个或多个包含五个容器的 Pod。
快照程序容器监视VolumeSnapshot
和VolumeSnapshotContent
对象,并负责创建和删除VolumeSnapshotContent
对象。
调整器容器是一个 sidecar 容器,它监视PersistentVolumeClaim
更新,并在您请求PersistentVolumeClaim
对象上更多存储空间时,对 CSI 端点触发ControllerExpandVolume
操作。
外部 CSI 附加器容器将 Red Hat OpenShift Service on AWS 的attach
和detach
调用转换为对 CSI 驱动程序的相应ControllerPublish
和ControllerUnpublish
调用。
外部 CSI 预配器容器将 Red Hat OpenShift Service on AWS 的provision
和delete
调用转换为对 CSI 驱动程序的相应CreateVolume
和DeleteVolume
调用。
一个 CSI 驱动程序容器。
CSI 附加器和 CSI 预配器容器使用 UNIX 域套接字与 CSI 驱动程序容器通信,确保没有 CSI 通信离开 Pod。CSI 驱动程序无法从 Pod 外部访问。
|
对于不支持第三方 |
CSI 驱动程序守护程序集在每个节点上运行一个 Pod,允许 Red Hat OpenShift Service on AWS 将 CSI 驱动程序提供的存储挂载到节点上,并在用户工作负载(Pod)中将其用作持久卷 (PV)。安装了 CSI 驱动程序的 Pod 包含以下容器:
一个 CSI 驱动程序注册器,它将 CSI 驱动程序注册到节点上运行的openshift-node
服务中。然后,节点上运行的openshift-node
进程使用节点上可用的 UNIX 域套接字直接连接 CSI 驱动程序。
一个 CSI 驱动程序。
在节点上部署的 CSI 驱动程序应尽可能少地拥有存储后端的凭据。Red Hat OpenShift Service on AWS 仅使用节点插件集的 CSI 调用,例如NodePublish
/NodeUnpublish
和NodeStage
/NodeUnstage
(如果这些调用已实现)。
Red Hat OpenShift Service on AWS 默认安装某些 CSI 驱动程序,为用户提供树内卷插件无法实现的存储选项。
为了创建挂载到这些受支持存储资产的 CSI 预配持久卷,Red Hat OpenShift Service on AWS 默认安装必要的 CSI 驱动程序 Operator、CSI 驱动程序和所需的存储类。有关 Operator 和驱动程序的默认命名空间的更多详细信息,请参阅特定 CSI 驱动程序 Operator 的文档。
下表描述了随 Red Hat OpenShift Service on AWS 安装的 CSI 驱动程序以及它们支持的 CSI 功能,例如卷快照和调整大小。
除了下表中列出的驱动程序外,ROSA 还与来自第三方存储供应商的 CSI 驱动程序一起工作。Red Hat 不负责监督第三方供应程序或连接的 CSI 驱动程序,供应商完全控制源代码、部署、操作和 Kubernetes 兼容性。这些卷供应程序被认为是客户管理的,相应的供应商负责提供支持。有关更多信息,请参阅Red Hat OpenShift Service on AWS 的共享责任矩阵。
CSI 驱动程序 | CSI 卷快照 | CSI 克隆 | CSI 调整大小 | 内联临时卷 |
---|---|---|---|---|
AWS EBS |
✅ |
✅ |
||
AWS EFS |
||||
LVM 存储 |
✅ |
✅ |
✅ |
持久性存储的动态配置取决于 CSI 驱动程序和底层存储后端的 capabilities。CSI 驱动程序的提供商应记录如何在 Red Hat OpenShift Service on AWS 中创建存储类以及可用于配置的参数。
可以将创建的存储类配置为启用动态配置。
创建一个默认存储类,以确保所有不需要任何特殊存储类的 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