次の方法で共有


Azure Container Storage でボリューム スナップショットを使用する

Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 この記事では、永続ボリュームのポイントインタイム スナップショットを取得し、新しい永続ボリューム要求を使用して復元する方法について説明します。

前提条件

  • この記事では、最新バージョン (2.35.0 以降) の Azure CLI が必要です。 「Azure CLI のインストール方法」を参照してください。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。 Azure Cloud Shell ではなくローカルでコマンドを実行する場合は、必ず管理特権で実行してください。
  • クラスター ノード用の少なくとも 3 つの仮想マシン (VM) (それぞれが少なくとも 4 つの仮想 CPU (vCPU) を持つ) のノード プールを持つ Azure Kubernetes Service (AKS) クラスターが必要になります。
  • この記事では、AKS クラスターに Azure Container Storage を既にインストールしていることと、Azure Disksエフェメラル ディスク (ローカル ストレージ) を使用してストレージ プールと永続ボリューム要求 (PVC) を作成していることを前提としています。 Elastic SAN をバッキング ストレージとして使用する場合、ボリューム スナップショットは現在サポートされていません。

ボリューム スナップショット クラスを作成する

まず、ボリューム スナップショット クラスを作成します。これにより、YAML マニフェスト ファイルで定義することで、ボリューム スナップショットの属性を指定できます。 Azure ディスクのボリューム スナップショット クラスを作成するには、次の手順に従います。

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

  2. 次のコードを貼り付けます。 ボリューム スナップショット クラスの name 値は任意のものでかまいません。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-acstor-vsc
    driver: containerstorage.csi.azure.com
    deletionPolicy: Delete
    parameters:
      incremental: "true"  # available values: "true", "false" ("true" by default for Azure Public Cloud, and "false" by default for Azure Stack Cloud)
    
  3. YAML マニフェスト ファイルを適用してボリューム スナップショット クラスを作成します。

    kubectl apply -f acstor-volumesnapshotclass.yaml
    

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

    volumesnapshotclass.snapshot.storage.k8s.io/csi-acstor-vsc created
    

    kubectl get volumesnapshotclass を実行して、ボリューム スナップショット クラスが作成されたことを確認することもできます。 次のような出力結果が表示されます。

    NAME            DRIVER                            DELETIONPOLICY    AGE
    csi-acstor-vsc	 containerstorage.csi.azure.com	   Delete	           11s
    

ボリューム スナップショットを作成する

次に、既存の永続ボリューム要求のスナップショットを作成し、前の手順で作成したボリューム スナップショット クラスを適用します。

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

  2. 次のコードを貼り付けます。 volumeSnapshotClassName は、前の手順で作成したボリューム スナップショット クラスの名前にする必要があります。 persistentVolumeClaimName については、スナップショットを取得する永続ボリューム要求の名前を使用します。 ボリューム スナップショットの name 値は任意のものでかまいません。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: azuredisk-volume-snapshot
    spec:
      volumeSnapshotClassName: csi-acstor-vsc
      source:
        persistentVolumeClaimName: azurediskpvc
    
  3. YAML マニフェスト ファイルを適用してボリューム スナップショットを作成します。

    kubectl apply -f acstor-volumesnapshot.yaml
    

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

    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    

    kubectl get volumesnapshot を実行して、ボリューム スナップショットが作成されたことを確認することもできます。 READYTOUSEtrue を示している場合、次の手順に進むことができます。

復元された永続ボリューム要求を作成する

これで、ボリューム スナップショットをデータ ソースとして使用する新しい永続ボリューム要求を作成できます。

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

  2. 次のコードを貼り付けます。 storageClassName は、元の永続ボリュームの作成時に使用したストレージ クラスと一致している必要があります。 たとえば、バックエンド ストレージに Azure ディスクの代わりにエフェメラル ディスク (ローカル NVMe) を使用している場合は、storageClassNameacstor-ephemeraldisk に変更します。 データ ソースの name 値には、前の手順で作成したボリューム スナップショットの名前を使用します。 永続ボリューム要求のメタデータ name の値には、任意の値を指定できます。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk-snapshot-restored
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk
      resources:
        requests:
          storage: 100Gi
      dataSource:
        name: azuredisk-volume-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    
  3. YAML マニフェスト ファイルを適用して PVC を作成します。

    kubectl apply -f acstor-pvc-restored.yaml
    

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

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    

    kubectl describe pvc pvc-azuredisk-snapshot-restored を実行して、永続ボリュームが作成されたことを確認することもできます。 Pendingの状態にする必要があり、メッセージとしてはバインド前に最初のコンシューマーが作成されるのを待機しているが表示されます。

ヒント

復元された永続ボリューム要求を既に作成していて、エラーを修正するまたは変更を加えるために yaml ファイルをもう一度適用する場合は、yaml ファイルをもう一度適用する前に、まず次のようにして古い永続ボリューム要求を削除する必要があります。kubectl delete pvc <pvc-name>

元のポッドを削除する (省略可能)

新しいポッドを作成する前に、場合によっては、スナップショットの作成元となったポッドを削除する必要があります。

  1. kubectl get pods を実行してポッドを一覧表示します。 削除すべきポッドを削除していることを確認してください。
  2. ポッドを削除するには、kubectl delete pod <pod-name> を実行します。

復元されたスナップショットを使用して新しいポッドを作成する

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

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

  2. 次のコードを貼り付けます。 永続ボリューム要求 claimName は、作成した復元されたスナップショット永続ボリューム要求の名前である必要があります。 ポッドのメタデータ name の値には、任意の値を指定できます。

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

    kubectl apply -f acstor-pod2.yaml
    

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

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

    kubectl describe pod fiopod2
    kubectl describe pvc pvc-azuredisk-snapshot-restored
    
  5. fio テストをチェックして、その現在の状態を確認します。

    kubectl exec -it fiopod2 -- 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 ワークロードに使用できるようになりました。

こちらもご覧ください