Share via


Azure Elastic SAN で Azure Container Storage (プレビュー) を使用する

Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 この記事では、Kubernetes ワークロードのバックエンド ストレージとして Azure Elastic SAN を使用するように Azure Container Storage を構成する方法について説明します。 最後に、Elastic SAN をストレージとして使用するポッドが得られます。

前提条件

  • 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 コマンドを実行してローカルにインストールできます。

Note

Azure Elastic SAN で Azure Container Storage を使うには、汎用 VM を少なくとも 3 つ (クラスター ノード用に standard_d4s_v5 など) 用意し、それぞれに仮想 CPU (vCPU) を 4 つ以上を割り当てたノード プールを AKS クラスターに用意する必要があります。

制限事項

Azure Container Storage を使用して Elastic SAN をデプロイおよび調整する場合、次の機能は現在サポートされていません。

  • ボリューム スナップショット
  • ストレージ プールの拡張

リージョン別の提供状況

Azure Container Storage は、次の Azure リージョンのサブセットでのみ使用できます。

  • (アフリカ) 南アフリカ北部
  • (アジア太平洋) オーストラリア東部
  • (アジア太平洋) 東アジア
  • (アジア太平洋) 東日本
  • (アジア太平洋) 韓国中部
  • (アジア太平洋) 東南アジア
  • (アジア太平洋) インド中部
  • (ヨーロッパ) フランス中部
  • (ヨーロッパ) 北ヨーロッパ
  • (ヨーロッパ) 西ヨーロッパ
  • (ヨーロッパ) 英国南部
  • (ヨーロッパ) スウェーデン中部
  • (ヨーロッパ) スイス北部
  • (中東) アラブ首長国連邦北部
  • (北米) 米国東部
  • (北米)米国東部 2
  • (北米) 米国西部
  • (北米)米国西部 2
  • (北米) 米国西部 3
  • (北米) 米国中部
  • (北米) 米国中北部
  • (北米) 米国中南部
  • (北米) 米国中西部
  • (北米) カナダ中部
  • (北米) カナダ東部
  • (南アメリカ) ブラジル南部

記憶域プールを作成する

まず、YAML マニフェスト ファイルで定義することによって、Kubernetes クラスターのストレージの論理グループであるストレージ プールを作成します。

az aks create または az aks update コマンドを使って Azure Container Storage を有効にした場合は、記憶域プールが既に存在している可能性があります。 kubectl get sp -n acstor を使って記憶域プールの一覧を取得します。 使いたい記憶域プールが既に使用可能な場合は、このセクションをスキップして、「使用可能なストレージ クラスを表示する」に進むことができます。

Azure Elastic SAN を使用してストレージ プールを作成するには、次の手順に従います。

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

  2. 次のコードを貼り付けます。 ストレージ プールの name の値は何でもかまいません。 Gi または Ti で必要なストレージ容量を反映するようストレージを調整し、ファイルを保存します。 Azure Elastic SAN では現在、ストレージ プールのサイズ変更はサポートされていません。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: managed
      namespace: acstor
    spec:
      poolType:
        elasticSan: {}
      resources:
        requests: {"storage": 1Ti}
    
  3. YAML マニフェスト ファイルを適用してストレージ プールを作成します。

    kubectl apply -f acstor-storagepool.yaml 
    

    ストレージ プールの作成が完了すると、次のようなメッセージが表示されます。

    storagepool.containerstorage.azure.com/managed created
    

    このコマンドを実行して、ストレージ プールの状態を確認することもできます。 <storage-pool-name> はストレージ プールの name の値に置き換えます。 この例では、値は managed.になります。

    kubectl describe sp <storage-pool-name> -n acstor
    

ストレージ プールが作成されると、Azure Container Storage により、名前付け規則 acstor-<storage-pool-name> を使用してストレージ クラスが自動的に作成されます。 また、Azure Elastic SAN リソースも作成されます。

Azure Elastic SAN サブスクリプションで AKS マネージド ID に共同作成者ロールを割り当てる

次に、Azure Elastic SAN サブスクリプションで AKS マネージド ID に共同作成者の Azure RBAC 組み込みロールを割り当てる必要があります。 これを行うには、Azure サブスクリプションの [所有者] ロールが必要です。 十分なアクセス許可がない場合は、管理者にこれらの手順を実行するよう依頼してください。

  1. Azure portal にサインインします。

  2. [サブスクリプション] を選択し、Azure Container Storage が自動的に作成した Azure Elastic SAN リソースに関連付けられているサブスクリプションを見つけて選択します。 これは、Azure Container Storage がインストールされている AKS クラスターと同じサブスクリプションである可能性があります。 それを確認するには、AKS によって作成されたリソース グループで Elastic SAN リソースを見つけます (MC_YourResourceGroup_YourAKSClusterName_Region)。

  3. 左ペインから [アクセス制御 (IAM)] を選択します。

  4. [追加] > [ロールの割り当ての追加] の順に選択します。

  5. [割り当ての種類] で、[特権管理者ロール] を選び、それから [共同作成者]、それから [次へ] を選びます。 サブスクリプションに [所有者] ロールがない場合は、[共同作成者] ロールを追加できません。

    Azure portal を使用して AKS マネージド ID に共同作成者ロールを追加する方法を示すスクリーンショット。

  6. [アクセスの割り当て先][マネージド ID] を選択します。

  7. [メンバー] で、[+ メンバーの選択] をクリックします。 [マネージド ID の選択] メニューが表示されます。

  8. [マネージド ID] で、[ユーザー割り当てマネージド ID] を選択します。

  9. [選択] で、クラスター名に -agentpool が追加されたマネージド ID を探して選択します。

  10. [選択]、それから [確認と割り当て] をクリックします。

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

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

kubectl get sc を実行して、使用可能なストレージ クラスを表示します。 acstor-<storage-pool-name> というストレージ クラスがあることを確認します。

重要

internal が付いているストレージ クラスは使用しないでください。 これは、Azure Container Storage の動作に必要な内部ストレージ クラスです。

永続ボリューム要求の作成

永続ボリューム要求 (PVC) を使用して、ストレージ クラスに基づいてストレージを自動的にプロビジョニングします。 新しいストレージ クラスを使用して PVC を作成するには、次の手順に従います。

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

  2. 次のコードを貼り付けて、ファイルを保存します。 PVC name の値はどのような値にもすることができます。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: managedpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-managed # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. YAML マニフェスト ファイルを適用して PVC を作成します。

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/managedpvc created
    

    次のコマンドを実行して、PVC の状態を確認できます。

    kubectl describe pvc managedpvc
    

PVC が作成されると、ポッドで使用できるようになります。

ポッドをデプロイして永続ボリュームをアタッチする

Fio (フレキシブル I/O テスター) を使用してベンチマークおよびワークロード シミュレーション用にポッドを作成し、永続ボリュームのマウント パスを指定します。 claimName には、永続ボリューム要求の作成時に使用した name の値を使用します。

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

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

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: managedpv
          persistentVolumeClaim:
            claimName: managedpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: managedpv
    
  3. YAML マニフェスト ファイルを適用してポッドをデプロイします。

    kubectl apply -f acstor-pod.yaml
    

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

    pod/fiopod created
    
  4. ポッドが実行されていること、および永続ボリューム要求がポッドに正常にバインドされていることを確認します。

    kubectl describe pod fiopod
    kubectl describe pvc managedpvc
    
  5. 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
    

Elastic SAN をストレージとして使用するポッドをデプロイし、Kubernetes ワークロードに使用できるようになりました。

永続ボリュームをデタッチして再アタッチする

永続ボリュームをデタッチするには、永続ボリュームがアタッチされているポッドを削除します。 <pod-name> はポッドの名前 (fiopod など) に置き換えます。

kubectl delete pods <pod-name>

永続ボリュームを再アタッチするには、「ポッドをデプロイして永続ボリュームをアタッチする」の説明に従って、YAML マニフェスト ファイル内の永続ボリューム要求名を参照するだけです。

永続ボリューム要求がバインドされている永続ボリュームを確認するには、kubectl get pvc <persistent-volume-claim-name> を実行します。

ストレージ プールを削除する

ストレージ プールを削除する場合は、次のコマンドを実行します。 <storage-pool-name> はストレージ プール名に置き換えます。

kubectl delete sp -n acstor <storage-pool-name>

こちらもご覧ください