ローカル NVMe およびボリューム レプリケーションを有効にして Azure Container Storage プレビューを使用する
Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 この記事では、Kubernetes ワークロードのバックエンド ストレージとしてローカル NVMe およびボリューム レプリケーションが有効なエフェメラル ディスクを使用するように Azure Container Storage を構成する方法について説明します。 最後に、ローカル NVMe をストレージとして使用するポッドが得られます。 レプリケーションでは、異なるノード上のボリューム間でデータをコピーし、レプリカが失われたときにボリュームを復元し、エフェメラル ディスクの回復性を提供します。
エフェメラル ディスクとは
アプリケーションでミリ秒未満のストレージ待ち時間が必要な場合は、Azure Container Storage でエフェメラル ディスクを使用してパフォーマンス要件を満たすことができます。 エフェメラルとは、ディスクが AKS クラスターをホストするローカル仮想マシン (VM) にデプロイされ、Azure ストレージ サービスに保存されないことを意味します。 VM を停止または割り当て解除すると、これらのディスク上のデータは失われます。
使用できるエフェメラル ディスクには、NVMe と一時 SSD の 2 種類があります。 NVMe は、ストレージと CPU 間の高速データ転送用に設計されています。 アプリケーションで一時 SSD よりも高い IOPS とスループットが必要な場合、またはワークロードでレプリケーションが必要な場合は、NVMe を選択します。 一時 SSD では、レプリケーションは現在サポートされていません。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
この記事では、最新バージョン (2.35.0 以降) の Azure CLI が必要です。 「Azure CLI のインストール方法」を参照してください。 Azure Cloud Shell の Bash 環境を使用している場合は、最新バージョンが既にインストールされています。 Azure Cloud Shell ではなくローカルでコマンドを実行する場合は、必ず管理特権で実行してください。 詳細については、「Azure Cloud Shell の概要」を参照してください。
Kubernetes コマンド ライン クライアント
kubectl
が必要です。 Azure Cloud Shell を使用している場合は既にインストールされています。または、az aks install-cli
コマンドを実行してローカルにインストールできます。Azure Container Storage をまだインストールしていない場合は、Azure Kubernetes Service での Azure Container Storage の使用に関する記事の手順に従ってください。
ターゲット リージョンが Azure Container Storage リージョンでサポート対象になっているかどうかを確認します。
ローカル NVMe をサポートする VM の種類を選択する
エフェメラル ディスクは、特定の種類の VM でのみ使用できます。 ローカル NVMe を使用する予定の場合は、standard_l8s_v3 などの、ストレージ最適化 VM が必要です。
次のコマンドを実行すると、ノード プールで使用される VM の種類を取得できます。
az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table
出力の例を次に示します。
PoolName VmSize
---------- ---------------
nodepool1 standard_l8s_v3
各 VM に少なくとも 4 つの仮想 CPU (vCPU) があり、各ノード プールに少なくとも 3 つのノードがあることをお勧めします。
永続ボリュームを作成してアタッチする
次の手順に従って永続ボリュームを作成してアタッチします。
1.ボリューム レプリケーションが有効なストレージ プールを作成する
ローカル NVMe とレプリケーションを使用してストレージ プールを作成するには、次の手順に従います。 Azure Container Storage は、現在 3 つのレプリカ構成と 5 つのレプリカ構成をサポートしています。 3 つのレプリカを指定する場合、AKS クラスターに少なくとも 3 つのノードが必要です。 5 つのレプリカを指定する場合、少なくとも 5 つのノードが必要です。
Note
エフェメラル ディスク ストレージ プールは使用可能なすべての NVMe ディスクを使用するため、新しいストレージ プールを作成する前に、既存のすべてのローカル NVMe ストレージ プールを削除する必要があることに注意してください。
任意のテキスト エディターを使用して、
code acstor-storagepool.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。 ストレージ プールの name の値は何でもかまいません。 レプリカを「3」または「5」に設定します。
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: nvme namespace: acstor spec: poolType: ephemeralDisk: diskType: nvme replicas: 3
YAML マニフェスト ファイルを適用してストレージ プールを作成します。
kubectl apply -f acstor-storagepool.yaml
ストレージ プールの作成が完了すると、次のようなメッセージが表示されます。
storagepool.containerstorage.azure.com/nvme created
このコマンドを実行して、ストレージ プールの状態を確認することもできます。
<storage-pool-name>
はストレージ プールの name の値に置き換えます。 この例では、値は nvme になります。kubectl describe sp <storage-pool-name> -n acstor
ストレージ プールが作成されると、Azure Container Storage により、名前付け規則 acstor-<storage-pool-name>
を使用してストレージ クラスが自動的に作成されます。
2.使用可能なストレージ クラスを表示する
ストレージ プールを使用する準備ができたら、ストレージ クラスを選択して、ボリュームの作成とデプロイ時にストレージが動的に作成される方式を定義する必要があります。
kubectl get sc
を実行して、使用可能なストレージ クラスを表示します。 acstor-<storage-pool-name>
というストレージ クラスがあることを確認します。
$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal disk.csi.azure.com Retain WaitForFirstConsumer true 65m
acstor-ephemeraldisk containerstorage.csi.azure.com Delete WaitForFirstConsumer true 2m27s
重要
internal が付いているストレージ クラスは使用しないでください。 これは、Azure Container Storage の動作に必要な内部ストレージ クラスです。
3.永続ボリューム要求の作成
永続ボリューム要求 (PVC) を使用して、ストレージ クラスに基づいてストレージを自動的にプロビジョニングします。 新しいストレージ クラスを使用して PVC を作成するには、次の手順に従います。
任意のテキスト エディターを使用して、
code acstor-pvc.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。 PVC
name
の値はどのような値にもすることができます。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ephemeralpvc spec: accessModes: - ReadWriteOnce storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different resources: requests: storage: 100Gi
ボリュームのストレージ サイズを変更する際には、そのサイズが単一ノードのエフェメラル ディスクの利用可能な容量より小さいことを確認します。 「ノード エフェメラル ディスク容量を確認する」を参照してください。
YAML マニフェスト ファイルを適用して PVC を作成します。
kubectl apply -f acstor-pvc.yaml
次のような出力が表示されます。
persistentvolumeclaim/ephemeralpvc created
次のコマンドを実行して、PVC の状態を確認できます。
kubectl describe pvc ephemeralpvc
PVC が作成されると、ポッドで使用できるようになります。
4.ポッドをデプロイして永続ボリュームをアタッチする
Fio (フレキシブル I/O テスター) を使用してベンチマークおよびワークロード シミュレーション用にポッドを作成し、永続ボリュームのマウント パスを指定します。 claimName には、永続ボリューム要求の作成時に使用した name の値を使用します。
任意のテキスト エディターを使用して、
code acstor-pod.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: acstor.azure.com/io-engine: acstor volumes: - name: ephemeralpv persistentVolumeClaim: claimName: ephemeralpvc containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: ephemeralpv
YAML マニフェスト ファイルを適用してポッドをデプロイします。
kubectl apply -f acstor-pod.yaml
次のような出力が表示されます。
pod/fiopod created
ポッドが実行されていること、および永続ボリューム要求がポッドに正常にバインドされていることを確認します。
kubectl describe pod fiopod kubectl describe pvc ephemeralpvc
fio テストをチェックして、その現在の状態を確認します。
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
ボリューム レプリケーションが有効なローカル NVMe を使用するポッドをデプロイしたので、それを Kubernetes ワークロードに使用できます。
ボリュームとストレージ プールを管理する
このセクションでは、単一ノードで利用可能なエフェメラル ディスクの容量を確認する方法、永続ボリュームをデタッチして再アタッチする方法、ストレージ プールを拡張または削除する方法を学習します。
ノード エフェメラル ディスク容量を確認する
エフェメラル ボリュームは、単一ノードに割り当てられます。 エフェメラル ボリュームのサイズを構成する際には、そのサイズを単一ノードのエフェメラル ディスクの利用可能な容量より小さくする必要があります。
次のコマンドを実行して、単一ノードのエフェメラル ディスクの利用可能な容量を確認します。
$ kubectl get diskpool -n acstor
NAME CAPACITY AVAILABLE USED RESERVED READY AGE
ephemeraldisk-nvme-diskpool-jaxwb 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-nvme-diskpool-wzixx 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-nvme-diskpool-xbtlj 75660001280 75031990272 628011008 560902144 True 21h
この例では、単一ノードのエフェメラル ディスクの利用可能な容量は、75031990272
バイトまたは 69 GiB です。
永続ボリュームをデタッチして再アタッチする
永続ボリュームをデタッチするには、永続ボリュームがアタッチされているポッドを削除します。
kubectl delete pods <pod-name>
永続ボリュームを再アタッチするには、「ポッドをデプロイして永続ボリュームをアタッチする」の説明に従って、YAML マニフェスト ファイル内の永続ボリューム要求名を参照するだけです。
永続ボリューム要求がバインドされている永続ボリュームを確認するには、次を実行します。
kubectl get pvc <persistent-volume-claim-name>
ストレージ プールを拡張する
ローカル NVMe によってサポートされるストレージ プールを拡張すると、ダウンタイムなしで迅速にスケールアップできます。 ストレージ プールの縮小は現在サポートされていません。
エフェメラル ディスクによってサポートされるストレージ プールは AKS クラスター ノード (VM) 上のローカル ストレージ リソースを使用するため、ストレージ プールを拡張するには、クラスターに別のノードを追加する必要があります。 ストレージ プールを拡張するには、次の手順に従います。
次のコマンドを実行して、AKS クラスターにノードを追加します。
<cluster-name>
、<nodepool name>
、および<resource-group-name>
を独自の値に置き換えます。 ノード プールの名前を取得するには、kubectl get nodes
を実行します。az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
kubectl get nodes
を実行すると、ノードがクラスターに追加されたことがわかります。kubectl get sp -A
を実行すると、ストレージ プールの容量が増えたことがわかります。
ストレージ プールを削除する
ストレージ プールを削除する場合は、次のコマンドを実行します。 <storage-pool-name>
はストレージ プール名に置き換えます。
kubectl delete sp -n acstor <storage-pool-name>
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示