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 は、デフォルトで Azure File CSI Driver Operator および Azure File CSI ドライバーを openshift-cluster-csi-drivers namespace にインストールします。

  • Azure File CSI Driver Operator: 永続ボリューム要求 (PVC) の作成に使用できる azurefile-csi というストレージクラスを提供します。必要に応じて、このデフォルトのストレージクラスを無効にできます (デフォルトストレージクラスの管理 を参照)。
  • Azure File CSI ドライバー を使用すると、Azure File PV を作成し、マウントできます。Azure File CSI ドライバーは、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。

Azure File CSI Driver Operator は以下をサポートしません。

  • 仮想ハードディスク (VHD)
  • Server Message Block (SMB) ファイル共有に対して連邦情報処理標準 (FIPS) モードが有効になっているノードで実行。ただし、Network File System (NFS) は FIPS モードをサポートします。

サポートされる機能の詳細は、サポートされる CSI ドライバーおよび機能 を参照してください。

6.11.2. CSI について

ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。

CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。

6.11.3. NFS のサポート

OpenShift Container Platform 4.14 以降では、Network File System (NFS) を備えた Azure File Container Storage Interface (CSI) Driver Operator がサポートされていますが、次の注意事項があります。

  • コントロールプレーンノードにスケジュールされている Azure File NFS ボリュームを含む Pod を作成すると、マウントが拒否されます。

    この問題を回避するには、コントロールプレーンノードがスケジュール可能で、Pod がワーカーノードで実行できる場合は、nodeSelector または Affinity を使用してワーカーノードで Pod をスケジュールします。

  • FS グループポリシーの動作:

    重要

    NFS を使用した Azure File CSI は、Pod によって要求された fsGroupChangePolicy を受け入れません。NFS を使用した Azure File CSI は、Pod によって要求されたポリシーに関係なく、デフォルトの OnRootMismatch FS グループポリシーを適用します。

  • 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.4. Azure File のクロスサブスクリプションサポート

クロスサブスクリプションサポートにより、1 つの Azure サブスクリプションに OpenShift Container Platform クラスターを配置し、Azure File Container Storage Interface (CSI) ドライバーを使用して、別の Azure サブスクリプションに Azure ファイル共有をマウントできるようになります。

重要

OpenShift Container Platform クラスターと Azure File 共有 (プロビジョニング済みまたはプロビジョニング予定) は両方とも同じテナント内にある必要があります。

6.11.4.1. Azure File のサブスクリプション間での動的プロビジョニング

前提条件

  • 1 つのサブスクリプション (サブスクリプション A とします) で、サービスプリンシパルまたはマネージドアイデンティティーを Azure アイデンティティーとして使用して、Azure に OpenShift Container Platform クラスターをインストールした。
  • クラスターと同じテナント内にあるストレージを持つ別のサブスクリプション (Subscription B とする) へのアクセス
  • Azure CLI にログイン済み

手順

サブスクリプション間で Azure File の動的プロビジョニングを使用するには、以下を実行します。

  1. 以下から該当するコマンドを実行して、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
      Copy to Clipboard Toggle word wrap
    • クラスターのインストール時に マネージドアイデンティティー を 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
      Copy to Clipboard Toggle word wrap
  2. 次のいずれかの方法で、Azure File 共有のプロビジョニング先である Subscription B 内のリソースグループにアクセスするためのアクセスパーミッションを Azure アイデンティティー (サービスプリンシパルまたはマネージドアイデンティティー) に付与します。

    • 次の 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>
      Copy to Clipboard Toggle word wrap

      ここでは、以下のようになります。

      <object-id-or-app-id>: 前の手順で取得したサービスプリンシパルまたはマネージドアイデンティティー (sp_id または mi_id)。

      <role-name>: ロール名。コントリビューター、または必要なパーミッションを持つ独自のロール。

      <subscription-id>: Subscription B の ID。

      <resource-group-name>: Subscription B のリソースグループ名。

      または、以下を実行します。

    • Azure ポータルにログインし、左側のメニューで Resource groups をクリックします。

      1. Subscription B で、ロールを割り当てるリソースグループを選択します。そのためには、resource group Access control (IAM) Role assignments タブをクリックして現在の割り当てを表示し、Add > Add role assignment をクリックします。
      2. Role タブで、割り当てるコントリビューターロールを選択し、Next をクリックします。必要なパーミッションを持つ独自のロールを作成し、それを選択することもできます。
      3. Members タブで次の操作を行います。

        1. 割り当て先のタイプ (ユーザー、グループ、サービスプリンシパル (またはマネージドアイデンティティー)) を選択して、割り当て先を選択します。
        2. Select members をクリックします。
        3. 前の手順で記録したサービスプリンシパルまたはマネージドアイデンティティーを検索して選択します。
        4. Select をクリックして確定します。
      4. Review + assign タブで設定を確認します。
      5. Review + assign をクリックしてロールの割り当てを完了します。

        注記

        特定のストレージアカウントのみを使用して Azure File 共有をプロビジョニングする場合は、同様の手順で、ストレージアカウントにアクセスするための Azure アイデンティティー (サービスプリンシパルまたはマネージドアイデンティティー) のアクセス権を取得することもできます。

  3. 次のような設定を使用して、Azure File ストレージクラスを作成します。

    Azure File ストレージクラスの YAML ファイルの例

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <sc-name> 
    1
    
    mount options:
      - mfsymlinks
      - cache=strict
      - nosharesock
      - actimeo=30
    parameters:
      subscriptionID: <xxxx-xxxx-xxxx-xxxx-xxxx> 
    2
    
      resourceGroup: <resource group name> 
    3
    
      storageAccount: <storage account> 
    4
    
      skuName: <skuName> 
    5
    
    provisioner: file.csi.azure.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    Copy to Clipboard Toggle word wrap

    1
    ストレージクラス名
    2
    Subscription B の ID
    3
    Subscription B のリソースグループ名
    4
    ストレージアカウント名 (独自の名前を指定する場合)
    5
    SKU タイプの名前
  4. 次のような設定を使用して、前の手順で作成した Azure File ストレージクラスを指定する永続ボリューム要求 (PVC) を作成します。

    PVC YAML ファイルの例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-name> 
    1
    
    spec:
      storageClassName: <sc-name-cross-sub> 
    2
    
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    Copy to Clipboard Toggle word wrap

    1
    PVC の名前。
    2
    前の手順で作成したストレージクラスの名前。

前提条件

  • 1 つのサブスクリプション (サブスクリプション A とします) で、サービスプリンシパルまたはマネージドアイデンティティーを Azure アイデンティティーとして使用して、Azure に OpenShift Container Platform クラスターをインストールした。
  • クラスターと同じテナント内にあるストレージを持つ別のサブスクリプション (Subscription B とする) へのアクセス
  • Azure CLI にログイン済み

手順

  1. Azure File 共有のリソースグループ、ストレージアカウント、ストレージアカウントキー、Azure File 名を記録します。これらの値は次のステップで使用されます。
  2. 次のコマンドを実行して、永続ボリュームパラメーター spec.csi.nodeStageSecretRef.name のシークレットを作成します。

    $ 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 Toggle word wrap

    この場合の <azure-storage-account-name><azure-storage-account-key> は、ステップ 1 でそれぞれ記録した Azure ストレージアカウントの名前とキーです。

  3. 次のサンプルファイルと同様の設定を使用して、永続ボリューム (PV) を作成します。

    PV YAML ファイルの例

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

    1
    PV の名前。
    2
    PV のサイズ。
    3
    ストレージクラスの名前。
    4
    クラスター内の同一の共有で、それぞれの volumeHandle が一意であることを確認します。
    5
    `<existing-file-share-name> には、完全なパスではなく、ファイル共有名のみを使用します。
    6
    前のステップで作成されたシークレットの名前。
    7
    シークレットが存在する namespace。
  4. 次のような設定を使用して、ステップ 1 で参照された既存の Azure File 共有を指定する永続値要求 (PVC) を作成します。

    PVC YAML ファイルの例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-name> 
    1
    
    spec:
      storageClassName: <sc-name> 
    2
    
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    Copy to Clipboard Toggle word wrap

    1
    PVC の名前。
    2
    前のステップで PV に指定したストレージクラスの名前。

ストレージクラスの使用を推奨

前述のサブスクリプション間の静的プロビジョニング例では、静的プロビジョニングを達成するためにストレージクラスは必要ないため、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 の静的プロビジョニングを使用する場合:

  1. Azure ストレージアカウントのシークレットをまだ作成していない場合は、ここで作成します。

    このシークレットには、次の 2 つのキーと値のペアを含む非常に特殊な形式の Azure ストレージアカウント名とキーが含まれている必要があります。

    • azurestorageaccountname: <storage_account_name>
    • azurestorageaccountkey: <account_key>

      azure-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 が消費される namespace に設定します。
      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
    回収ポリシー: ボリュームが解放された後にボリュームをどのように処理するかをクラスターに指示します。受け入れられる値は、RetainRecycle、または Delete です。
    4
    ストレージクラス名: この名前は、この特定の PV にバインドするために PVC によって使用されます。静的プロビジョニングの場合、StorageClass オブジェクトが存在する必要はありませんが、PV と PVC 内の名前は一致する必要があります。
    5
    セキュリティーを強化したい場合は、このパーミッションを変更してください。
    6
    キャッシュモード: 受け入れられる値は nonestrictloose です。デフォルトは strict です。
    7
    再接続時の競合が発生する確率を低減させるために使用します。
    8
    CIFS クライアントがサーバーから属性情報を要求する前に、ファイルまたはディレクトリーの属性をキャッシュする時間 (秒単位)。
    9
    サーバーへのバイト範囲ロック要求の送信を無効化し、POSIX ロックの扱いに課題を持つアプリケーションに対応します。
    10
    volumeHandle がクラスター全体で一意であることを確認します。resource-group-name は、ストレージアカウントが存在する Azure リソースグループです。
    11
    ファイル共有名: ファイル共有名のみを使用し、フルパスは使用しないでください。
    12
    この手順のステップ 1 で作成したシークレットの名前を指定します。この例では、azure-secret です。
    13
    シークレットが作成された namespace: これは、PV が消費される namespace である必要があります。
  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 の namespace。
    3
    前のステップで作成した PV の名前。
    4
    ストレージクラス名: この名前は、この特定の PV にバインドするために PVC によって使用されます。静的プロビジョニングの場合、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

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat