Azure Arc で有効になっている AKS でコンテナー ストレージ インターフェイス (CSI) ディスク ドライバーを使用する

> 適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server、AKS on Azure Stack HCI 23H2

この記事では、コンテナー ストレージ インターフェイス (CSI) の組み込みストレージ クラスを使用して、ディスク永続ボリュームを動的に作成し、Arc で有効になっている AKS でカスタム ストレージ クラスを作成する方法について説明します。

Arc で有効になっている AKS の CSI の概要

Container Storage Interface (CSI) は、Kubernetes のコンテナー化されたワークロードに任意のブロックおよびファイル ストレージ システムを公開する標準です。 CSI を使用すると、Arc で有効になっている AKS でプラグインを書き込み、デプロイ、反復して、新しいストレージ システムを公開できます。 また、CSI を使用すれば、コアの Kubernetes コードに触れることなく、さらにそのリリース サイクルを待たなくても、Kubernetes で既存のコードを改善することができます。

AKS Arc で使用されるディスクおよびファイル CSI ドライバーは 、CSI 仕様に準拠したドライバーです。

AKS Arc での CSI ストレージ ドライバーのサポートでは、次のものを使用できます。

  • Kubernetes DataDisk リソースの作成に使用できる AKS Arc ディスク。 これらは ReadWriteOnce としてマウントされるため、一度に 1 つのポッドでのみ使用できます。 複数のポッドから同時にアクセスできるストレージ ボリュームの場合は、 AKS Arc ファイルを使用します。

  • SMB または NFS 共有をポッドにマウントするために使用できる AKS Arc ファイル。 これらは ReadWriteMany としてマウントされるため、複数のノードおよびポッド間でデータを共有できます。 また、それらは PVC (永続ボリューム要求) の仕様に基づいて ReadWriteOnce としてマウントすることもできます。

組み込みのストレージ クラスを使用してディスク永続ボリュームを動的に作成する

ストレージ クラスは、保存の単位を永続ボリュームを使用して動的に作成する方法を定義します。 ストレージ クラスの使用方法の詳細については、Kubernetes ストレージ クラスに関する記事を参照してください。

AKS Arc では、 既定で既定 のストレージ クラスが作成され、CSI を使用して VHDX でバックアップされたボリュームが作成されます。 解放ポリシーによって、基礎となる VHDX を使用していた永続ボリュームが削除されるときに、VHDX も確実に削除されます。 ストレージ クラスによって永続ボリュームを拡張可能にする構成も行われるため、必要なのは、永続ボリューム要求を新しいサイズで編集することだけです。

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

ディスクのカスタム ストレージ クラスを作成する

既定のストレージ クラスはほとんどの一般的なシナリオに適合します。 ただし、場合によっては、特定のパフォーマンス レベルにマップされている特定の場所に PV を格納する独自のストレージ クラスの作成が必要になることがあります。

Linux ワークロード (ポッド) がある場合は、パラメーター fsType: ext4 を使用してカスタム ストレージ クラスを作成する必要があります。 この要件は、Kubernetes バージョン 1.19 および 1.20 以降に適用されます。 次の例は、パラメーターが定義されたカスタム ストレージ クラス定義を fsType 示しています。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aks-hci-disk-custom
parameters:
  blocksize: "33554432"
  container: SqlStorageContainer
  dynamic: "true"
  group: clustergroup-summertime
  hostname: TESTPATCHING-91.sys-sqlsvr.local
  logicalsectorsize: "4096"
  physicalsectorsize: "4096"
  port: "55000"
  fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true  

カスタム ストレージ クラスを作成する場合は、PV を格納する場所を指定できます。 基になるインフラストラクチャが Azure Stack HCI の場合、この新しい場所は、パフォーマンスの高い SSD/NVMe によってサポートされるボリューム、または HDD によってサポートされるコスト最適化ボリュームである可能性があります。

カスタム ストレージ クラスは 2 段階のプロセスで作成します。

  1. コマンドレットを使用して新しいストレージ パスを stack-hci-vm storagepath 作成し、Azure Stack HCI クラスター上のストレージ パスを作成、表示、一覧表示します。 ストレージ パスの作成の詳細については、「ストレージ パス」を参照してください。

    の場合 $pathは、 という名前 $storagepathnameのストレージ パスを作成します。たとえば、 C:\ClusterStorage\test-storagepath:

    az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
    

    ストレージ パス リソース ID を取得します。

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. 新しいストレージ パスを使用して、新しいカスタム ストレージ クラスを作成します。

    1. sc-aks-hci-disk-custom.yaml という名前のファイルを作成し、次の YAML ファイルからマニフェストをコピーします。 ストレージ クラスは、新しい container を除き、既定のストレージ クラスと同じです。 に対して storage path ID 前の手順で作成した を使用します container。 と hostnameの場合groupは、 を実行して既定のストレージ クラスに対してクエリを実行kubectl get storageclass default -o yamlし、指定された値を使用します。

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
       name: aks-hci-disk-custom
      provisioner: disk.csi.akshci.com
      parameters:
       blocksize: "33554432"
       container: <storage path ID>
       dynamic: "true"
       group: <e.g clustergroup-akshci> # same as the default storageclass
       hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass
       logicalsectorsize: "4096"
       physicalsectorsize: "4096"
       port: "55000"
       fsType: ext4 # refer to the note above to determine when to include this parameter
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
      
    2. kubectl apply コマンドを使用してストレージ クラスを作成し、sc-aks-hci-disk-custom.yaml ファイルを指定します。

       $ kubectl apply -f sc-aks-hci-disk-custom.yaml
       storageclass.storage.k8s.io/aks-hci-disk-custom created
      

次のステップ