Share via


エフェメラル ディスクで Azure Container Storage (プレビュー) を使用する

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

重要

ローカル ディスクはエフェメラルです。つまり、ローカル仮想マシン (VM) ストレージ上に作成され、Azure ストレージ サービスには保存されません。 VM を停止または割り当て解除すると、これらのディスク上のデータは失われます。 エフェメラル ディスク ストレージ プールからは Kubernetes 汎用エフェメラル ボリュームのみを作成できます。 永続ボリュームを作成する場合は、ストレージ プールのレプリケーションを有効にする必要があります。

前提条件

  • 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 Container Storage を使用するには、standard_l8s_v3 などのストレージ最適化 VM を少なくとも 3 つ含むノード プールを AKS クラスターに用意する必要があります。 各 VM に少なくとも 4 つの仮想 CPU (vCPU) を用意することをお勧めします。

リージョン別の提供状況

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

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

記憶域プールを作成する

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

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

エフェメラル ディスクを使用するストレージ プールを作成するには、次の 3 つのオプションがあります。

NVMe を使用してストレージ プールを作成する

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

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

  2. 次のコードを貼り付けて、ファイルを保存します。 ストレージ プールの name の値は何でもかまいません。

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

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/ephemeraldisk created
    

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

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

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

一時 SSD を使用してストレージ プールを作成する

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

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

  2. 次のコードを貼り付けて、ファイルを保存します。 ストレージ プールの name の値は何でもかまいません。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. YAML マニフェスト ファイルを適用してストレージ プールを作成します。

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/ephemeraldisk created
    

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

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

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

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

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

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

重要

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

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

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
    
  3. YAML マニフェスト ファイルを適用してポッドをデプロイします。

    kubectl apply -f acstor-pod.yaml
    

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

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

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  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
    

エフェメラル ディスクをストレージとして使用するポッドをデプロイし、Kubernetes ワークロードに使用できるようになりました。

ストレージ プールを拡張する

ローカル NVMe または一時 SSD によってサポートされるストレージ プールを拡張すると、ダウンタイムなしで迅速にスケールアップできます。 ストレージ プールの縮小は現在サポートされていません。

エフェメラル ディスクによってサポートされるストレージ プールは AKS クラスター ノード (VM) 上のローカル ストレージ リソースを使用するため、ストレージ プールを拡張するには、クラスターに別のノードを追加する必要があります。 ストレージ プールを拡張するには、次の手順に従います。

  1. 次のコマンドを実行して、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
    
  2. kubectl get nodes を実行すると、ノードがクラスターに追加されたことがわかります。

  3. kubectl get sp -A を実行すると、ストレージ プールの容量が増えたことがわかります。

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

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

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

省略可能: ボリューム レプリケーションを使用してストレージ プールを作成する (NVMe のみ)

ローカル NVMe を使用するアプリケーションは、回復性を高めるためにストレージ レプリケーションを利用できます。 一時 SSD では、レプリケーションは現在サポートされていません。

Azure Container Storage は、現在 3 つのレプリカ構成と 5 つのレプリカ構成をサポートしています。 3 つのレプリカを指定する場合、AKS クラスターに少なくとも 3 つのノードが必要です。 5 つのレプリカを指定する場合、少なくとも 5 つのノードが必要です。

ローカル NVMe とレプリケーションを使用してストレージ プールを作成するには、次の手順に従います。

Note

エフェメラル ディスク ストレージ プールは使用可能なすべての NVMe ディスクを使用するため、レプリケーションを有効にして新しいストレージ プールを作成する前に、既存のすべてのエフェメラル ディスク ローカル NVMe ストレージ プールを削除する必要があることに注意してください。

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

  2. 次のコードを貼り付けて、ファイルを保存します。 ストレージ プールの name の値は何でもかまいません。 レプリカを「3」または「5」に設定します。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
          replicas: 3
    
  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> を使用してストレージ クラスが自動的に作成されます。 これで、使用できるストレージ クラスを表示し、永続ボリューム要求を作成できるようになりました。

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

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

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

  2. 次のコードを貼り付けて、ファイルを保存します。 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
    
  3. YAML マニフェスト ファイルを適用して PVC を作成します。

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/ephemeralpvc created
    

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

    kubectl describe pvc ephemeralpvc
    

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: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. YAML マニフェスト ファイルを適用してポッドをデプロイします。

    kubectl apply -f acstor-pod.yaml
    

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

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

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  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
    

エフェメラル ディスクをストレージとして使用するポッドをデプロイし、Kubernetes ワークロードに使用できるようになりました。

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

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

kubectl delete pods <pod-name>

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

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

関連項目