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 ディスクのボリューム スナップショット クラスを作成するには、次の手順に従います。
任意のテキスト エディターを使用して、
code acstor-volumesnapshotclass.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けます。 ボリューム スナップショット クラスの 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)
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
ボリューム スナップショットを作成する
次に、既存の永続ボリューム要求のスナップショットを作成し、前の手順で作成したボリューム スナップショット クラスを適用します。
任意のテキスト エディターを使用して、
code acstor-volumesnapshot.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けます。
volumeSnapshotClassName
は、前の手順で作成したボリューム スナップショット クラスの名前にする必要があります。persistentVolumeClaimName
については、スナップショットを取得する永続ボリューム要求の名前を使用します。 ボリューム スナップショットの name 値は任意のものでかまいません。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: azuredisk-volume-snapshot spec: volumeSnapshotClassName: csi-acstor-vsc source: persistentVolumeClaimName: azurediskpvc
YAML マニフェスト ファイルを適用してボリューム スナップショットを作成します。
kubectl apply -f acstor-volumesnapshot.yaml
作成が完了すると、次のようなメッセージが表示されます。
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
kubectl get volumesnapshot
を実行して、ボリューム スナップショットが作成されたことを確認することもできます。READYTOUSE
が true を示している場合、次の手順に進むことができます。
復元された永続ボリューム要求を作成する
これで、ボリューム スナップショットをデータ ソースとして使用する新しい永続ボリューム要求を作成できます。
任意のテキスト エディターを使用して、
code acstor-pvc-restored.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けます。
storageClassName
は、元の永続ボリュームの作成時に使用したストレージ クラスと一致している必要があります。 たとえば、バックエンド ストレージに Azure ディスクの代わりにエフェメラル ディスク (ローカル NVMe) を使用している場合は、storageClassName
をacstor-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
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>
元のポッドを削除する (省略可能)
新しいポッドを作成する前に、場合によっては、スナップショットの作成元となったポッドを削除する必要があります。
-
kubectl get pods
を実行してポッドを一覧表示します。 削除すべきポッドを削除していることを確認してください。 - ポッドを削除するには、
kubectl delete pod <pod-name>
を実行します。
復元されたスナップショットを使用して新しいポッドを作成する
次に、復元された永続ボリューム要求を利用して新しいポッドを作成します。 Fio (フレキシブル I/O テスター) を使用してベンチマークおよびワークロード シミュレーション用にポッドを作成し、永続ボリュームのマウント パスを指定します。
任意のテキスト エディターを使用して、
code acstor-pod2.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けます。 永続ボリューム要求
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
YAML マニフェスト ファイルを適用してポッドをデプロイします。
kubectl apply -f acstor-pod2.yaml
次のような出力が表示されます。
pod/fiopod2 created
ポッドが実行されていること、および永続ボリューム要求がポッドに正常にバインドされていることを確認します。
kubectl describe pod fiopod2 kubectl describe pvc pvc-azuredisk-snapshot-restored
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 ワークロードに使用できるようになりました。