Azure Blob Storage Container Storage Interface(CSI) ドライバーを使用する

Azure Blob Storage Container Storage Interface (CSI) ドライバーは、Azure Blob Storage のライフサイクルを管理するために Azure Kubernetes Service (AKS) によって使用される CSI 仕様に準拠したドライバーです。 CSI は、Kubernetes のコンテナー化されたワークロードに任意のブロックおよびファイル ストレージ システムを公開する標準です。

CSI を採用および使用すると、AKS が Kubernetes で新しいストレージ システムを公開したり、既存のストレージ システムを改良したりするプラグインを記述、デプロイ、反復処理できるようになります。 AKS で CSI ドライバーを使用すると、Kubernetes のコア コードに触れたり、そのリリース サイクルを待ったりする必要がなくなります。

Azure Blob Storage をファイル システムとしてコンテナーまたはポッドにマウントすると、大量の非構造化データを処理する多数のアプリケーションで BLOB ストレージを使用できるようになります。 次に例を示します。

  • ログ ファイル データ
  • 画像、ドキュメント、ストリーミング ビデオまたはオーディオ
  • ディザスター リカバリー データ

オブジェクト ストレージ上のデータには、BlobFuse または Network File System (NFS) 3.0 プロトコルを使用してアプリケーションからアクセスできます。 Azure Blob Storage CSI ドライバーが導入される前は、サポートされていないドライバーを手動でインストールして、AKS で実行されているアプリケーションから Blob Storage にアクセスすることが唯一の選択肢でした。 Azure Blob ストレージ CSI ドライバーが AKS で有効になっている場合、azureblob-fuse-premiumazureblob-nfs-premium の 2 つの組み込みストレージ クラスがあります。

CSI ドライバーがサポートされる AKS クラスターを作成するには、AKS 上の CSI ドライバーに関する記事を参照してください。 NFS プロトコルを使用した各 Azure ストレージの種類間のアクセスの違いの詳細については、「NFS を使用した Azure Files、Blob Storage、および Azure NetApp Files へのアクセスを比較する」を参照してください。

Azure Blob Storage CSI ドライバーの機能

Azure Blob Storage CSI ドライバーでは、次の機能がサポートされています。

  • BlobFuse および Network File System (NFS) バージョン 3.0 プロトコル

開始する前に

  • Azure CLI バージョン 2.42 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

  • お使いのクラスターから Azure Blob Storage にアクセスするために CSI Blob Storage オープンソース ドライバーを以前にインストールしている場合は、このリンクの手順を実行します。

Note

オープンソース ドライバーのインストール中に blobfuse-proxy が有効になっていない場合、オープンソース ドライバーのアンインストールによって既存の blobfuse マウントが中断されます。 ただし、NFS マウントは影響を受けません。

新規または既存の AKS クラスターで CSI ドライバーを有効にする

Azure CLI を使用すると、クラスター内のポッドで使用する永続ボリュームを構成する前に、新規または既存の AKS クラスターで Blob Storage CSI ドライバーを有効にすることができます。

新しいクラスターでドライバーを有効にするには、次の例に示すように、az aks create コマンドに --enable-blob-driver パラメーターを含めます。

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

既存クラスターでドライバーを有効にするには、次の例に示すように、az aks update コマンドに --enable-blob-driver パラメーターを含めます。

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

オープンソースの BLOB CSI ドライバーがインストールされていないことを確認するよう求められます。 確認した後、この操作が完了するまでに数分かかる場合があります。 完了すると、クラスターでドライバーを有効にした状態が出力に表示されます。 次の例は、前のコマンドの結果を示すセクションに似ています。

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

既存の AKS クラスターで CSI ドライバーを無効にする

Azure CLI を使用すると、クラスターから永続ボリュームを削除した後で、既存の AKS クラスターで Blob Storage CSI ドライバーを無効にすることができます。

既存のクラスターでドライバーを無効にするには、次の例に示すように、az aks update コマンドに --disable-blob-driver パラメーターを含めます。

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Azure Blob Storage で永続ボリュームを使用する

永続ボリューム (PV) とは、Kubernetes ポッドで使用するためにプロビジョニングされているストレージの一部です。 PV は 1 つまたは複数のポッドで使用でき、動的または静的にプロビジョニングできます。 複数のポッドが同じストレージ ボリュームに同時にアクセスする必要がある場合は、Azure Blob Storage を使用し、Network File System (NFS) または blobfuse を使用して接続できます。 この記事では、AKS クラスターの複数のポッドで使用するために、Azure Blob Storage コンテナーを動的に作成する方法を示します。

Kubernetes ボリュームの詳細については、AKS でのアプリケーションのストレージ オプションに関するページを参照してください。

組み込みのストレージ クラスを使用して Azure Blob Storage PV を動的に作成する

ストレージ クラスは、Azure Blob Storage コンテナーの作成方法を定義するために使用されます。 ストレージ アカウントは、ストレージ クラスと共に使用して Azure Blob Storage コンテナーを保持するために、ノード リソース グループ内に自動的に作成されます。 skuName には、次のいずれかの Azure Storage の冗長性 SKU を選択します。

  • Standard_LRS:標準のローカル冗長ストレージ
  • Premium_LRS:Premium ローカル冗長ストレージ
  • Standard_ZRS: Standard ゾーン冗長ストレージ
  • Premium_ZRS:Premium ゾーン冗長ストレージ
  • Standard_GRS:標準の geo 冗長ストレージ
  • Standard_RAGRS:標準の読み取りアクセス geo 冗長ストレージ

AKS で Storage CSI ドライバーを使用する場合は、Azure Blob Storage CSI ドライバーを使用する 2 つの組み込みストレージ クラスが追加されています。

両方のストレージ クラスの再利用ポリシーによって、それぞれの PV が削除されたときに、基になる Azure Blob Storage が削除されます。 また、set allowVolumeExpansion パラメーターが true に設定されているため、ストレージ クラスにより、コンテナーを既定で展開できるように構成されます。

ストレージ クラスを確認するには、kubectl get sc コマンドを使用します。 次の例は、AKS クラスター内で使用できる azureblob-fuse-premiumazureblob-nfs-premium のストレージ クラスを示したものです。

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

これらのストレージ クラスを使用するには、PVC とそれらを参照して使用するポッドを作成します。 PVC を使用して、ストレージ クラスに基づいてストレージを自動的にプロビジョニングします。 PVC は、事前に作成されたいずれかのストレージ クラスまたはユーザー定義のストレージ クラスを使用して、目的の SKU、サイズ、プロトコルの Azure Blob Storage コンテナーを作成し、それと通信できます。 ポッド定義を作成するとき、必要なストレージを要求するために PVC が指定されます。

StatefulSet の使用

ワークロード用にストレージ ボリュームを保持するには、StatefulSet を使用できます。 これにより、既存のボリュームと、障害が発生したポッドを置き換える新しいポッドとの照合が容易になります。 次の例では、Blobfuse または NFS プロトコルを使用して BLOB ストレージの StatefulSet を設定する方法を示しています。

前提条件

  • AKS クラスター "コントロール プレーン" ID (お使いの AKS クラスター名) が、VNet およびネットワーク セキュリティ グループの共同作成者ロールに追加されます。
  1. azure-blob-nfs-ss.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. kubectl create コマンドを使用して、StatefulSet を作成します。

    kubectl create -f azure-blob-nfs-ss.yaml
    

次の手順