6.11. Azure File CSI Driver Operator
6.11.1. 概述 复制链接链接已复制到粘贴板!
OpenShift Container Platform 可以使用 Microsoft Azure File Storage 的 Container Storage Interface(CSI)驱动程序置备持久性卷(PV)。
在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储和配置 CSI 卷。
要创建挂载到 Azure File 存储资产中的 CSI 置备 PV,OpenShift Container Platform 在 openshift-cluster-csi-drivers
命名空间中默认安装 Azure File CSI Driver Operator 和 Azure File CSI 驱动程序。
-
Azure File CSI Driver Operator 提供了一个名为
azurefile-csi
的存储类,您可以使用它来创建持久性卷声明(PVC)。如果需要,您可以禁用此默认存储类 (请参阅管理默认存储类)。 - Azure File CSI 驱动程序 允许您创建并挂载 Azure File PV。Azure File CSI 驱动程序支持动态卷置备,方法是允许按需创建存储卷,使集群管理员无需预置备存储。
Azure File CSI Driver Operator 不支持:
- 虚拟硬盘(VHD)
- 在启用了联邦信息处理标准(FIPS)模式的节点上运行,用于服务器消息块(SMB)文件共享。但是,网络文件系统(NFS)支持 FIPS 模式。
有关支持的功能的更多信息,请参阅支持的 CSI 驱动程序和功能。
6.11.2. NFS 支持 复制链接链接已复制到粘贴板!
OpenShift Container Platform 4.14 及更新的版本支持带有 Network File System (NFS) 的 Azure File Container Storage Interface (CSI) Driver Operator,请考虑以下事项:
使用调度到 control plane 节点的 Azure File NFS 卷创建 pod 会导致挂载被拒绝。
要临时解决这个问题:如果您的 control plane 节点可以调度,pod 可以在 worker 节点上运行,使用
nodeSelector
或 Affinity 将 pod 调度到 worker 节点上。FS 组策略行为:
重要带有 NFS 的 Azure File CSI 不遵循 pod 请求的 fsGroupChangePolicy。带有 NFS 的 Azure File CSI 会应用默认的 OnRootMismatch FS Group 策略,无论 pod 请求的策略是什么。
Azure File CSI Operator 不会自动为 NFS 创建存储类。您必须手动创建它。使用类似如下的文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11.3. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
6.11.4. Azure File 的静态置备 复制链接链接已复制到粘贴板!
对于静态置备,集群管理员创建持久性卷(PV)来定义实际存储的详情。然后,集群用户可以创建消耗这些 PV 的持久性卷声明(PVC)。
先决条件
- 使用管理员权限访问 OpenShift Container Platform 集群
流程
为 Azure File 使用静态置备:
如果您还没有为 Azure 存储帐户创建 secret,请现在创建它:
此 secret 必须包含 Azure Storage Account 名称和键,并带有以下非常具体的格式,并带有两个键值对:
-
azurestorageaccountname
: <storage_account_name> azurestorageaccountkey
: <account_key>要创建名为 azure-secret 的 secret,请运行以下命令:
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
1 2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用以下 YAML 文件示例创建 PV:
PV YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 卷大小。
- 2
- 访问模式。定义读写权限和挂载权限。如需更多信息,请参阅附加资源中的访问模式。
- 3
- 重新声明策略。告诉集群在卷被释放后如何处理它。接受的值是
Retain
、Recycle
或Delete
。 - 4
- 存储类名称。PVC 使用这个名称来绑定到这个特定 PV。对于静态置备,一个
StorageClass
对象不需要存在,但 PV 和 PVC 中的名称必须匹配。 - 5
- 如果要增强安全性,请修改此权限。
- 6
- 缓存模式。接受的值是
none
,strict
, 和loose
。默认值为strict
。 - 7
- 使用减少重新连接竞争的可能性。
- 8
- CIFS 客户端在从服务器请求属性信息前缓存文件或目录的属性的时间(以秒为单位)。
- 9
- 禁用向服务器发送字节范围锁定请求,以及 POSIX 锁定面临挑战的应用程序。
- 10
- 确保
volumeHandle
在集群中是唯一的。resource-group-name
是存储帐户所在的 Azure 资源组。 - 11
- 文件共享名称。仅使用文件共享名称;不要使用完整路径。
- 12
- 提供在此流程的第 1 步中创建的 secret 名称。在本例中,它是 azure-secret。
- 13
- 创建 secret 的命名空间。这必须是使用 PV 的命名空间。
使用以下示例文件创建引用 PV 的 PVC:
PVC YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确保 PVC 在一段时间后创建并处于
Bound
状态:oc get pvc <pvc-name>
$ oc get pvc <pvc-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 的名称。
输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow