第 6 章 使用 Container Storage Interface (CSI)
6.1. 配置 CSI 卷 复制链接链接已复制到粘贴板!
容器存储接口 (CSI) 是一种标准规范,使存储供应商能够开发跨容器编排系统工作的插件。OpenShift 容器平台使用 CSI 驱动程序调配和管理持久存储,取代了树内存储插件。
6.1.1. CSI 架构 复制链接链接已复制到粘贴板!
容器存储接口 (CSI) 架构使用容器化驱动程序和桥组件在 OpenShift 容器平台和存储后端之间进行通信。每个驱动程序都需要控制器部署和守护程序集来进行卷操作。可以同时运行多个驱动程序。
容器存储接口 (CSI) 允许 OpenShift Container Platform 使用支持 CSI 接口的存储后端提供的持久性存储。
OpenShift Container Platform 4.22 支持 CSI 规范版本 1.6.0。
有关CSI规范的更多信息,请参阅"CSI规范 " 。
CSI 驱动程序通常由容器镜像提供。这些容器不了解其运行的 OpenShift Container Platform。要在 OpenShift Container Platform 中使用与 CSI 兼容的存储后端,集群管理员必须部署几个组件,作为 OpenShift Container Platform 和存储驱动程序间的桥接。
下图提供了在 OpenShift Container Platform 集群中以 pod 运行的组件的概述。
对于不同的存储后端,可以运行多个 CSI 驱动程序。每个驱动程序需要其自身的外部控制器部署,以及带驱动程序和 CSI 注册器的守护进程集。
6.1.1.1. 外部 CSI 控制器 复制链接链接已复制到粘贴板!
外部容器存储接口 (CSI) 控制器作为部署运行,容器处理卷调配、删除、附加、快照和调整大小。Controller pod 使用 UNIX 域套接字与 CSI 驱动程序通信,并在基础架构节点上运行,以保护凭据。
外部 CSI 控制器是一个部署,它部署带有以下五个容器的一个或多个 pod:
-
snapshotter 容器监视
VolumeSnapshot和VolumeSnapshotContent对象,并负责创建和删除VolumeSnapshotContent对象。 -
resizer 容器是一个 sidecar 容器,它会在 PersistentVolumeClaim 对象中监视
PersistentVolumeClaim更新,并在对PersistentVolumeClaim对象请求更多存储时针对 CSI 端点触发ControllerExpandVolume操作。 -
一个外部 CSI attacher 容器,它会将 OpenShift Container Platform 的
attach和detach调用转换为相关的 CSI 驱动程序的ControllerPublish和ControllerUnpublish调用。 -
一个外部 CSI 置备程序容器,它可将 OpenShift Container Platform 的
provision和delete调用转换为相应的 CSI 驱动程序的CreateVolume和DeleteVolume调用。 - 一个 CSI 驱动程序容器。
CSI attacher 和 CSI provisioner 容器使用 UNIX 域套接字与 CSI 驱动程序容器进行交互,确保没有 CSI 通讯会离开 pod。从 pod 以外无法访问 CSI 驱动程序。
attach、 detach、 provision和 delete 操作通常需要 CSI 驱动程序在存储后端使用凭证。在 infrastructure 节点上运行 CSI controller pod,因此即使在一个计算节点上发生严重的安全破坏时,凭据也不会暴露给用户进程。
当不支持第三方的 attach 或 detach 操作时,还需要为 CSI 驱动程序运行外部的附加器。外部附加器不会向 CSI 驱动程序发出任何 ControllerPublish 或 ControllerUnpublish 操作。然而,它仍必须运行方可实现所需的 OpenShift Container Platform attachment API。
6.1.1.2. CSI 驱动程序守护进程集 复制链接链接已复制到粘贴板!
CSI驱动程序守护程序集在每个节点上运行,以实现卷装载和操作。每个 Pod 都包含一个驱动程序和注册器,使用 UNIX 域套接字与节点服务进行通信。节点驱动程序使用最少的凭据,实现特定于节点的CSI操作,如发布和阶段。
CSI 驱动程序守护进程集在每个节点上运行一个 pod,它允许 OpenShift Container Platform 挂载 CSI 驱动程序提供的存储,并使用它作为持久性卷 (PV) 的用户负载 (pod) 。安装了 CSI 驱动程序的 pod 包含以下容器:
- CSI 驱动程序注册器
-
一个 CSI 驱动程序注册器,它会在节点上运行的
openshift-node服务中注册 CSI 驱动程序。在节点上运行的openshift-node进程然后使用节点上可用的 UNIX 域套接字直接连接到 CSI 驱动程序。 - CSI 驱动程序
-
在节点上部署的 CSI 驱动程序应该在存储后端中拥有尽量少的凭证。OpenShift Container Platform 只使用节点插件的 CSI 调用集合,如
NodePublish/NodeUnpublish和NodeStage/NodeUnstage(如果这些调用已被实现)。
6.1.2. OpenShift Container Platform 支持的 CSI 驱动程序 复制链接链接已复制到粘贴板!
OpenShift 容器平台默认安装多个 CSI 驱动程序,自动为支持的后端部署驱动程序 Operator、驱动程序和存储类。默认驱动程序提供树内插件之外的增强功能。某些驱动程序(如 AWS EFS 和 GCP Filestore)需要手动安装。
要创建挂载到这些支持的存储资产中的 CSI 置备的持久性卷,OpenShift Container Platform 会默认安装必要的 CSI 驱动程序 Operator、CSI 驱动程序和所需的存储类。如需有关 Operator 和驱动程序的默认命名空间的更多信息,请参阅特定 CSI Driver Operator 的文档。
AWS EFS CSI 驱动程序默认未安装,必须手动安装。有关安装 AWS EFS CSI 驱动程序的说明,请参阅"设置 AWS Elastic File Service CSI Driver Operator " 。
下表描述了 OpenShift Container Platform 支持的 OpenShift Container Platform 支持的 CSI 驱动程序及其支持的 CSI 功能,如卷快照和调整大小。
如果下表中没有列出您的 CSI 驱动程序,则需要按照 CSI 存储厂商提供的安装说明方可使用其支持的 CSI 功能。
有关第三方认证的 CSI 驱动程序列表,请参阅"红帽生态系统门户 " 。
| CSI 驱动程序 | CSI 卷快照 | CSI 卷组快照 [1] | CSI 克隆 | CSI 调整大小 | 内联临时卷 | 用户命名空间 |
|---|---|---|---|---|---|---|
| AWS EBS | ✅ | ✅ | ✅ | |||
| AWS EFS | ||||||
| Google Compute Platform (GCP) 持久磁盘 (PD) | ✅ | ✅[2] | ✅ | ✅ | ||
| 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 | ✅ | ✅ | ✅ | ✅ | ✅ [4] | |
| OpenStack Manila | ✅ | ✅ | ||||
| CIFS/SMB | ✅ | |||||
| VMware vSphere | ✅[5] | ✅[6] | ✅[7] |
1.
CSI 卷组快照只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
2.
- 使用存储池的超磁盘平衡磁盘不支持克隆。
3.
- 不支持离线快照或调整大小。卷必须附加到正在运行的 pod。
4.
- RBD 支持用户命名空间;CephFS 不支持。
5.
- 需要 VMware vSphere 版本 8.0 更新 1 或更高版本,或 VMware vSphere Foundation (VVF) 9 或 VMware Cloud Foundation (VCF) 9,用于 vCenter Server 和 ESXi。
- 不支持 fileshare 卷。
6.
- VMware vSphere 版本 8.0 更新 1 及更新的版本或 VVF 9 支持在线扩展,或 VCF 9 支持。
7.
- 文件持久性卷(PV) (如 vSAN 文件服务)不支持用户命名空间。
6.1.3. 动态置备 复制链接链接已复制到粘贴板!
动态资源调配通过存储类配置按需创建持久卷。容器存储接口 (CSI) 驱动程序支持确定行为的特定参数。创建默认存储类,以便为没有指定类的声明启用置备。
动态置备持久性存储取决于 CSI 驱动程序和底层存储后端的功能。CSI 驱动的供应商应该提供了在 OpenShift Container Platform 中创建存储类及进行配置的参数文档。
创建的存储类可以被配置为启用动态置备。
流程
创建一个默认存储类,以保证所有不需要特殊存储类的 PVC 由安装的 CSI 驱动程序来置备。
# oc create -f - << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class> annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: <provisioner-name> parameters: csi.storage.k8s.io/fstype: xfs EOF-
metadata.name: 指定将创建的存储类的名称。 -
provisioner: 指定已安装的 CSI 驱动程序的名称。 -
parameters.csi.storage.k8s.io/fstype: vSphere CSI 驱动程序支持底层红帽核心操作系统发行版本支持的所有文件系统,包括 XFS 和 Ext4。
6.1.4. 使用 CSI 驱动程序示例 复制链接链接已复制到粘贴板!
使用容器存储接口 (CSI) 持久存储部署 MySQL 应用程序,以演示动态卷调配。此示例显示CSI驱动程序自动创建持久卷声明并将其绑定到动态调配的卷,无需手动干预。
先决条件
- 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 gp3-csi 3s