Azure Arc で有効になっている AKS で Container Storage Interface (CSI) ディスク ドライバーを使用する
> 適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server、AKS on Azure Local、バージョン 23H2
この記事では、Container Storage Interface (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 では、既定で default ストレージ クラスが作成され、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 Local の場合、この新しい場所は、パフォーマンスの高い SSD/NVMe によってサポートされるボリュームか、HDD によってサポートされるコスト最適化ボリュームである可能性があります。
カスタム ストレージ クラスは 2 段階のプロセスで作成します。
stack-hci-vm storagepath
コマンドレットを使用して新しいストレージ パスを作成し、Azure ローカル クラスター上のストレージ パスを作成、表示、一覧表示します。 ストレージ パスの作成の詳細については、「 ストレージ パス」を参照してください。$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
新しいストレージ パスを使用して、新しいカスタム ストレージ クラスを作成します。
sc-aks-hci-disk-custom.yaml という名前のファイルを作成し、次の YAML ファイルからマニフェストをコピーします。 ストレージ クラスは、新しい
container
を除き、既定のストレージ クラスと同じです。 前の手順で作成したstorage path ID
をcontainer
に使用します。group
とhostname
の場合は、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
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