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. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
6.11.3. 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.4. Azure File 跨订阅支持 复制链接链接已复制到粘贴板!
通过跨订阅支持,您可以在一个 Azure 订阅中有一个 OpenShift Container Platform 集群,并使用 Azure File Container Storage Interface (CSI) 驱动程序将 Azure 文件共享挂载到另一个 Azure 订阅中。
OpenShift Container Platform 集群和 Azure File 共享(预置备或置备)都应在同一租户中。
6.11.4.1. Azure File 订阅的动态置备 复制链接链接已复制到粘贴板!
先决条件
- 在一个订阅中(称为 Subscription A)在 Azure 上安装带有服务主体或受管身份作为 Azure 身份的 OpenShift Container Platform 集群
- 使用与集群相同的租户中的存储访问另一个订阅(称为 Subscription B)
- 登录到 Azure CLI
流程
在订阅间使用 Azure File 动态置备:
运行以下适用的命令,记录 Azure 身份(服务主体或受管身份)。在后续步骤中需要 Azure 身份:
如果在安装集群时使用服务主体作为 Azure 身份:
sp_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) az ad sp show --id ${sp_id} --query displayName --output tsv
$ sp_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) $ az ad sp show --id ${sp_id} --query displayName --output tsv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在安装集群时使用受管身份作为 Azure 身份:
mi_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) az identity list --query "[?clientId=='${mi_id}'].{Name:name}" --output tsv
$ mi_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) $ az identity list --query "[?clientId=='${mi_id}'].{Name:name}" --output tsv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过执行以下操作之一,授予 Azure 身份(服务主体或受管身份)权限访问另一个订阅 B 中的资源组,其中您要置备 Azure File 共享:
运行以下 Azure CLI 命令:
az role assignment create \ --assignee <object-id-or-app-id> \ --role <role-name> \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>
az role assignment create \ --assignee <object-id-or-app-id> \ --role <role-name> \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<object-id-or-app-id>
: 从上一步中获取的服务主体或受管身份,如sp_id
或mi_id
。<role-name>
: 角色名称。具有所需权限的贡献者或您自己的角色。<subscription-id>
: 订阅 B ID。<resource-group-name>
: Subscription B 资源组名称。或者
登录到 Azure 门户和左侧菜单,点 Resource groups :
-
选择您要为其分配角色的 Subscription B 中的资源组,方法是点 resource group
Access control (IAM) Role assignments 选项卡查看当前分配,然后点 Add > Add role assignment。 - 在 Role 选项卡上,选择要分配的 Issuer 角色,然后点 Next。您还可以创建并选择您自己的角色,并具有所需权限。
在 Members 选项卡中:
- 通过选择分配者类型来选择分配者:用户、组或服务主体(或受管身份)。
- 点 Select members。
- 搜索,然后选择上一步中记录的所需服务主体或受管身份。
- 点 Select 确认。
- 在 Review + assign 选项卡中,查看设置。
要完成角色分配,请点 Review + assign。
注意如果您只想使用特定的存储帐户来置备 Azure File 共享,您也可以通过类似步骤获取 Azure 身份(服务主体或受管身份)权限来访问存储帐户。
-
选择您要为其分配角色的 Subscription B 中的资源组,方法是点 resource group
使用类似如下的配置创建 Azure File 存储类:
Azure File 存储类 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用类似如下的配置,创建一个持久性卷声明(PVC)来指定您在上一步中创建的 Azure File 存储类:
PVC YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11.4.2. 通过创建一个 PV 和 PVC,在 Azure File 订阅中静态置备: 复制链接链接已复制到粘贴板!
先决条件
- 在一个订阅中(称为 Subscription A)在 Azure 上安装带有服务主体或受管身份作为 Azure 身份的 OpenShift Container Platform 集群
- 使用与集群相同的租户中的存储访问另一个订阅(称为 Subscription B)
- 登录到 Azure CLI
流程
- 对于 Azure File 共享,记录资源组、存储帐户、存储帐户密钥和 Azure File 名称。这些值用于后续步骤。
运行以下命令,为持久性卷参数
spec.csi.nodeStageSecretRef.name
创建 secret:oc create secret generic azure-storage-account-<storageaccount-name>-secret --from-literal=azurestorageaccountname="<azure-storage-account-name>" --from-literal azurestorageaccountkey="<azure-storage-account-key>" --type=Opaque
$ oc create secret generic azure-storage-account-<storageaccount-name>-secret --from-literal=azurestorageaccountname="<azure-storage-account-name>" --from-literal azurestorageaccountkey="<azure-storage-account-key>" --type=Opaque
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<azure-storage-account-name>
和<azure-storage-account-key>
是您在第 1 步中记录的 Azure 存储帐户名称和密钥。使用类似以下示例文件创建持久性卷 (PV):
PV YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用类似以下内容的配置,创建一个持久性卷声明(PVC)指定第 1 步中引用的现有 Azure File 共享:
PVC YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
建议使用存储类
在订阅中的之前静态置备示例中,PV 和 PVC 中引用的存储类并不严格,因为存储类不需要完成静态置备。但是,建议使用存储类来避免手动创建的 PVC 与手动创建的 PV 不匹配的情况,从而可能触发新 PV 的动态置备。避免此问题的其他方法是,创建一个带有 provisioner: kubernetes.io/no-provisioner
的存储类,或引用一个不存在的存储类,这在这两种情形中都确保不会发生动态置备。使用其中任何一个策略时,如果出现不匹配的 PV 和 PVC 时,PVC 会一直处于待处理状态,您可以更正这个错误。
6.11.5. 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