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 创建存储类。您必须手动创建它。使用类似如下的文件:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class-name> 
    1
    
    provisioner: file.csi.azure.com 
    2
    
    parameters:
      protocol: nfs 
    3
    
      skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS
    mountOptions:
      - nconnect=4
    Copy to Clipboard Toggle word wrap
    1
    存储类名称。
    2
    指定 Azure File CSI 供应商。
    3
    指定 NFS 作为存储后端协议。

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 使用静态置备:

  1. 如果您还没有为 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>" 
      1
       
      2
      Copy to Clipboard Toggle word wrap
      1
      <namespace_name> 设置为消耗 PV 的命名空间。
      2
      <storage_account_name><account_key> 提供您的值。
  2. 使用以下 YAML 文件示例创建 PV:

    PV YAML 文件示例

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: pv-azurefile
    spec:
      capacity:
        storage: 5Gi 
    1
    
      accessModes:
        - ReadWriteMany 
    2
    
      persistentVolumeReclaimPolicy: Retain 
    3
    
      storageClassName: <sc-name> 
    4
    
      mountOptions:
        - dir_mode=0777  
    5
    
        - file_mode=0777
        - uid=0
        - gid=0
        - cache=strict  
    6
    
        - nosharesock  
    7
    
        - actimeo=30  
    8
    
        - nobrl  
    9
    
      csi:
        driver: file.csi.azure.com
        volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}" 
    10
    
        volumeAttributes:
          shareName: EXISTING_FILE_SHARE_NAME  
    11
    
        nodeStageSecretRef:
          name: azure-secret 
    12
    
          namespace: <my-namespace> 
    13
    Copy to Clipboard Toggle word wrap

    1
    卷大小。
    2
    访问模式。定义读写权限和挂载权限。如需更多信息,请参阅附加资源中的访问模式
    3
    重新声明策略。告诉集群在卷被释放后如何处理它。接受的值是 RetainRecycleDelete
    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 的命名空间。
  3. 使用以下示例文件创建引用 PV 的 PVC:

    PVC YAML 文件示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-name> 
    1
    
      namespace: <my-namespace> 
    2
    
    spec:
      volumeName: pv-azurefile 
    3
    
      storageClassName: <sc-name> 
    4
    
      accessModes:
        - ReadWriteMany 
    5
    
      resources:
        requests:
          storage: 5Gi 
    6
    Copy to Clipboard Toggle word wrap

    1
    PVC 名称。
    2
    PVC 的命名空间。
    3
    上一步中创建的 PV 名称。
    4
    存储类名称。PVC 使用这个名称来绑定到这个特定 PV。对于静态置备,一个 StorageClass 对象不需要存在,但 PV 和 PVC 中的名称必须匹配。
    5
    访问模式。为 PVC 定义请求的读写访问权限。声明在请求带有特定访问权限的存储时,使用与卷相同的格式。如需更多信息,请参阅附加资源中的访问模式
    6
    PVC 大小。
  4. 运行以下命令,确保 PVC 在一段时间后创建并处于 Bound 状态:

    $ oc get pvc <pvc-name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    PVC 的名称。

    输出示例

    NAME       STATUS    VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-name   Bound     pv-azurefile   5Gi        ReadWriteMany  my-sc          7m2s
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat