このチュートリアルでは、Azure Container Storage について説明し、Azure Kubernetes Service (AKS) で実行されているアプリケーションのコンテナー ネイティブ ストレージをデプロイおよび管理する方法について説明します。 Azure Container Storage を今すぐデプロイしない場合は、このチュートリアルをスキップして、 AKS でのアプリケーションのデプロイに直接進むことができます。 このチュートリアル シリーズでは、基本的なネットショップ アプリケーションに Azure Container Storage は必要ありません。
Important
この記事では、Azure Container Storage (バージョン 1.x.x) をインストールする方法について説明します。インストールには、バージョン固定パラメーター --container-storage-version 1 が明示的に必要になりました。
Azure Container Storage (バージョン 2.x.x) を使用できるようになりました。
Azure Container Storage では、データベース、分析プラットフォーム、高パフォーマンス アプリケーションなど、さまざまなワークロードに合わせて調整されたコンテナーネイティブ ストレージを提供することで、Kubernetes でのステートフル アプリケーションの管理が簡素化されます。
このチュートリアルの終わりまでに、次の操作を行います。
- Azure Container Storage が Kubernetes で多様なワークロードをサポートする方法について説明します。
- 複数のストレージ バックエンド オプションを調べて、アプリケーションのニーズに合わせてストレージを調整します。
- AKS クラスターに Azure Container Storage (バージョン 1.x.x) をデプロイし、汎用エフェメラル ボリュームを作成します。
開始する前に
前のチュートリアルでは、コンテナー イメージを作成し、それを ACR インスタンスにアップロードし、AKS クラスターを作成しました。 「チュートリアル 1 - AKS のアプリケーションを準備する」から始めてください。
- このチュートリアルでは、Azure CLI バージョン 2.35.0 以降を使用する必要があります。 Azure Container Storage では、ポータルと PowerShell は現在サポートされていません。
az --versionを使用して、お使いのバージョンを確認します。 インストールまたはアップグレードする必要には、「Azure CLI のインストール」をご覧ください。 Azure Cloud Shell の Bash 環境を使用している場合は、最新バージョンが既にインストールされています。 - ストレージ最適化 VM SKU または GPU 高速 VM SKU を持つノードが少なくとも 3 つ存在する既存の Linux ベースの AKS クラスターが必要です。 「チュートリアル 3 - AKS クラスターを作成する」を参照してください。
- Kubernetes コマンド ライン クライアント (
kubectl) が必要です。 Azure Cloud Shell を使用している場合は既にインストールされています。または、az aks install-cliコマンドを実行してローカルにインストールできます。
Kubernetes 拡張機能をインストールする
次のコマンドを実行して、 k8s-extension の最新バージョンを追加またはアップグレードします。
az extension add --upgrade --name k8s-extension
クラスターに接続し、ノードの状態を確認する
前のチュートリアルからクラスターにまだ接続していない場合は、次のコマンドを実行します。 既に接続している場合は、このセクションをスキップできます。
次のコマンドを実行して、クラスターに接続します。
az aks get-credentials --resource-group myResourceGroup --name myAKSClusterkubectl getコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodes次の出力例は、クラスター内のノードを示しています。 すべてのノードの状態が [準備完了] と表示されていることを確認します。
NAME STATUS ROLES AGE VERSION aks-nodepool1-34832848-vmss000000 Ready agent 80m v1.30.9 aks-nodepool1-34832848-vmss000001 Ready agent 80m v1.30.9 aks-nodepool1-34832848-vmss000002 Ready agent 80m v1.30.9
バッキング ストレージ オプションを選択する
Azure Container Storage (バージョン 1.x.x) では、ストレージ プールを使用して永続ボリュームと汎用ボリュームをプロビジョニングおよび管理します。 記憶域プールにはさまざまなバックエンド ストレージ オプションが用意されており、それぞれ特定のワークロードに適しています。 ワークロードのパフォーマンス、持続性、コスト効率を最適化するには、適切なストレージの種類を選択することが重要です。 このチュートリアルでは、一般的なエフェメラル ボリュームを作成するために、ローカル NVMe をバッキング ストレージとして使用するエフェメラル ディスクを使用します。 ただし、永続ボリュームを作成できる他のバッキング ストレージ オプションについても説明します。
エフェメラル ディスク
エフェメラル ディスクは、AKS ノード (ローカル NVMe または一時 SSD) 上のローカル ストレージ リソースを利用します。 低いミリ秒未満の待機時間と高い IOPS が提供されますが、VM が再起動してもデータ永続化は行われません。 エフェメラル ディスクは、永続化よりも速度を優先する Cassandra などのアプリケーションに最適であり、独自のアプリケーション レベルのレプリケーションを使用するワークロードに最適です。
一時ディスクを使用すると、VM が再起動した場合にデータが失われる場合でも、汎用エフェメラル ボリュームまたは永続ボリュームを作成できます。
Azure ディスク
PostgreSQL や MongoDB などのデータベースに最適な Azure ディスクは、Premium SSD や Ultra SSD などの持続性、スケーラビリティ、多層パフォーマンス オプションを提供します。
Azure Disks を使用すると、ストレージ ボリュームの自動プロビジョニングが可能になり、冗長性と高可用性が組み込まれています。
Azure Elastic SAN (プレビュー)
Azure Elastic SAN は、共有ストレージのニーズと、スケーラビリティと高可用性を必要とする汎用データベース向けに設計されており、CI/CD パイプラインや大規模なデータ処理などのワークロードに適しています。
Azure Container Storage (バージョン 1.x.x) を有効にして記憶域プールを作成する
次のコマンドを実行して、クラスターに Azure Container Storage をインストールし、ローカル NVMe 記憶域プールを作成します。
az aks update -n myAKSCluster -g myResourceGroup --enable-azure-container-storage ephemeralDisk --container-storage-version 1 --storage-pool-option NVMe
デプロイにかかる時間は 15 分未満です。
記憶域プールの状態を確認する
デプロイが完了すると、選択した記憶域プールの種類のコンポーネントが有効になり、既定の記憶域プールが作成されます。
使用可能な記憶域プールの一覧を取得するには、次のコマンドを実行します。
kubectl get sp -n acstor
記憶域プールの状態を確認するには、次のコマンドを実行します。
kubectl describe sp <storage-pool-name> -n acstor
MessageがStoragePool is readyと表示されない場合、記憶域プールはまだ作成中であるか、問題が発生している可能性があります。
使用可能なストレージ クラスを表示する
記憶域プールを使用する準備ができたら、ストレージ クラスを選択して、ボリュームの作成とデプロイ時に記憶域を動的に作成する方法を定義する必要があります。
kubectl get sc を実行して、使用可能なストレージ クラスを表示します。
acstor-<storage-pool-name>という名前のストレージ クラスが表示されます。 ポッドをデプロイするには、次のセクションでこのストレージ クラスを使用します。
汎用エフェメラル ボリュームを使用してポッドをデプロイする
汎用エフェメラル ボリュームを使用するベンチマークとワークロード シミュレーションに Fio (フレキシブル I/O テスター) を使用してポッドを作成します。
任意のテキスト エディターを使用して、
code acstor-pod.yamlなどの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: acstor.azure.com/io-engine: acstor containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: ephemeralvolume volumes: - name: ephemeralvolume ephemeral: volumeClaimTemplate: metadata: labels: type: my-ephemeral-volume spec: accessModes: [ "ReadWriteOnce" ] storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different resources: requests: storage: 1Giボリュームのストレージ サイズを変更する場合は、サイズが単一ノードのエフェメラル ディスクの使用可能な容量より小さいことを確認します。
kubectl get diskpool -n acstorを実行して、使用可能な容量を確認します。YAML マニフェスト ファイルを適用してポッドをデプロイします。
kubectl apply -f acstor-pod.yaml次のような出力が表示されます。
pod/fiopod createdポッドが実行中であり、エフェメラル ボリューム要求がポッドに正常にバインドされていることを確認します。
kubectl describe pod fiopod kubectl describe pvc fiopod-ephemeralvolume
これで、ローカル NVMe をストレージとして使用するポッドがデプロイされ、Kubernetes ワークロードに使用できるようになりました。
追加のボリュームをプロビジョニングする前に、エフェメラル ディスクの使用可能な容量を確認します。
kubectl describe node <node-name>
永続ボリュームの作成方法など、Azure Container Storage (バージョン 1.x.x) の詳細については、「Azure Container Storage とは」を参照してください。
リソースをクリーンアップする
このチュートリアル シリーズの残りの部分には Azure Container Storage は必要ないため、不要な Azure 料金が発生しないように、今すぐ削除することをお勧めします。
ポッドを削除します。
kubectl delete pod fiopod記憶域プールを削除します。
kubectl delete sp -n acstor <storage-pool-name>拡張機能インスタンスを削除します。
az aks update -n myAKSCluster -g myResourceGroup --disable-azure-container-storage all
次のステップ
このチュートリアルでは、AKS クラスターに Azure Container Storage (バージョン 1.x.x) をデプロイしました。 以下の方法を学習しました。
- AKS クラスターで Azure Container Storage (バージョン 1.x.x) を有効にします。
- バッキング ストレージの種類を選択し、記憶域プールを作成します。
- 汎用エフェメラル ボリュームを使用してポッドをデプロイします。
次のチュートリアルでは、クラスターにアプリケーションをデプロイする方法について説明します。
Azure Kubernetes Service