次の方法で共有


チュートリアル - AKS クラスターに Azure Container Storage (バージョン 1.x.x) をデプロイする

このチュートリアルでは、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

クラスターに接続し、ノードの状態を確認する

前のチュートリアルからクラスターにまだ接続していない場合は、次のコマンドを実行します。 既に接続している場合は、このセクションをスキップできます。

  1. 次のコマンドを実行して、クラスターに接続します。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. kubectl get コマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。

    kubectl get nodes
    
  3. 次の出力例は、クラスター内のノードを示しています。 すべてのノードの状態が [準備完了] と表示されていることを確認します。

    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

MessageStoragePool is readyと表示されない場合、記憶域プールはまだ作成中であるか、問題が発生している可能性があります。

使用可能なストレージ クラスを表示する

記憶域プールを使用する準備ができたら、ストレージ クラスを選択して、ボリュームの作成とデプロイ時に記憶域を動的に作成する方法を定義する必要があります。

kubectl get sc を実行して、使用可能なストレージ クラスを表示します。 acstor-<storage-pool-name>という名前のストレージ クラスが表示されます。 ポッドをデプロイするには、次のセクションでこのストレージ クラスを使用します。

汎用エフェメラル ボリュームを使用してポッドをデプロイする

汎用エフェメラル ボリュームを使用するベンチマークとワークロード シミュレーションに Fio (フレキシブル I/O テスター) を使用してポッドを作成します。

  1. 任意のテキスト エディターを使用して、code acstor-pod.yaml などの YAML マニフェスト ファイルを作成します。

  2. 次のコードを貼り付けて、ファイルを保存します。

    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を実行して、使用可能な容量を確認します。

  3. YAML マニフェスト ファイルを適用してポッドをデプロイします。

    kubectl apply -f acstor-pod.yaml
    

    次のような出力が表示されます。

    pod/fiopod created
    
  4. ポッドが実行中であり、エフェメラル ボリューム要求がポッドに正常にバインドされていることを確認します。

    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 料金が発生しないように、今すぐ削除することをお勧めします。

  1. ポッドを削除します。

    kubectl delete pod fiopod
    
  2. 記憶域プールを削除します。

    kubectl delete sp -n acstor <storage-pool-name>
    
  3. 拡張機能インスタンスを削除します。

    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) を有効にします。
  • バッキング ストレージの種類を選択し、記憶域プールを作成します。
  • 汎用エフェメラル ボリュームを使用してポッドをデプロイします。

次のチュートリアルでは、クラスターにアプリケーションをデプロイする方法について説明します。