第7章 ボリュームスナップショットの使用

クラスター管理者は、ボリュームスナップショットを使用すると、サポート対象の MicroShift 論理ボリュームマネージャーストレージ (LVMS) Container Storage Interface (CSI) プロバイダーを使用してデータ損失を防ぐことができます。永続ボリューム についての知識が必要です。

スナップショットは、特定の時点でのクラスター内のストレージボリュームの状態を表します。ボリュームスナップショットを使用して、新しいボリュームをプロビジョニングすることもできます。スナップショットは、元のデータと同じデバイス上にある読み取り専用の論理ボリューム (LV) として作成されます。

クラスター管理者は、CSI ボリュームスナップショットを使用して以下のタスクを実行できます。

  • 既存の永続ボリューム要求 (PVC) のスナップショットを作成します。
  • ボリュームスナップショットを安全な場所にバックアップします。
  • ボリュームスナップショットを別の PVC として復元します。
  • 既存のボリュームスナップショットを削除します。
重要

MicroShift では、Logical Volume Manager Storage (LVMS) プラグイン CSI ドライバーのみがサポートされています。

7.1. LVM シンボリュームについて

ボリュームスナップショットの作成やボリュームクローン作成などの高度なストレージ機能を使用するには、以下のアクションを実行する必要があります。

  • 論理ボリュームマネージャーストレージ (LVMS) プロバイダーとクラスターの両方を設定します。
  • RHEL for Edge 上に論理ボリュームマネージャー (LVM) シンプールをプロビジョニングします。
  • LVM シンプールをボリュームグループに接続します。
重要

Container Storage Interface (CSI) スナップショットを作成するには、RHEL for Edge ホスト上でシンボリュームを設定する必要があります。CSI はボリュームの縮小をサポートしていません。

LVMS がシン論理ボリューム (LV) を管理するには、etc/lvmd.yaml 設定ファイルでシンプールの デバイスクラス アレイを指定する必要があります。複数のシンプールデバイスクラスが許可されます。

追加のストレージプールがデバイスクラスで設定されている場合、ストレージプールをユーザーおよびワークロードに公開するには、追加のストレージクラスも存在する必要があります。シンプールで動的プロビジョニングを有効にするには、StorageClass リソースがクラスター上に存在する必要があります。StorageClass リソースは、topolvm.io/device-class パラメーターでソース device-class クラス配列を指定します。

シンプール用の単一のデバイスクラスを指定する lvmd.yaml ファイルの例

socket-name: 1
device-classes: 2
  - name: thin 3
    default: true
    spare-gb: 0 4
    thin-pool:
      name: thin
      overprovision-ratio: 10 5
    type: thin 6
    volume-group: ssd 7

1
文字列。gRPC の UNIX ドメインソケットエンドポイント。デフォルトは /run/lvmd/lvmd.socket です。
2
device-class の設定のマップのリスト。
3
文字列。device-class の一意の名前。
4
未署名の 64 ビット整数ボリュームグループに未割り当てのままにする GB 単位のストレージ容量。デフォルトは 0 です。
5
同じプールを共有する複数のシンプロビジョニングされたデバイスがある場合に、これらのデバイスは過剰にプロビジョニングされる可能性があります。オーバープロビジョニングには、1 以上の浮動小数点値が必要です。
6
ボリュームのスナップショットの作成には、シンプロビジョニングが必要です。
7
文字列。device-class が論理ボリュームを作成するグループ。
重要

複数の PVC が同時に作成されると、競合状態が原因で、LVMS は割り当てられた領域を正確に追跡してデバイスクラスのストレージ容量を保持できなくなります。個別のボリュームグループとデバイスクラスを使用して、非常に動的なワークロードのストレージを相互に保護します。

7.1.1. ストレージクラス

ストレージクラスは、デバイスクラスを選択するためのワークロード層インターフェイスを提供します。MicroShift では、次のストレージクラスパラメーターがサポートされています。

  • csi.storage.k8s.io/fstype パラメーターは、ファイルシステムタイプを選択します。xfs および ext4 の両方のファイルシステムタイプがサポートされています。
  • topolvm.io/device-class パラメーターは、デバイスクラスの名前です。デバイスクラスが指定されていない場合は、デフォルトのデバイスクラスが使用されます。

複数のストレージクラスが同じデバイスクラスを参照できます。xfsext4 バリアントなど、同じバッキングデバイスクラスに、さまざまなパラメーターセットを指定できます。

MicroShift のデフォルトのストレージクラスリソースの例

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" 1
  name: topolvm-provisioner
parameters:
  "csi.storage.k8s.io/fstype": "xfs" 2
provisioner: topolvm.io 3
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer 4
allowVolumeExpansion: 5

1
デフォルトのストレージクラスの例。PVC がストレージクラスを指定しない場合、このクラスが使用されます。クラスター内に存在できるデフォルトのストレージクラスは 1 つだけです。このアノテーションに値を割り当てないというオプションもサポートされています。
2
ボリューム上にプロビジョニングするファイルシステムを指定します。オプションは xfs および ext4 です。
3
このクラスを管理するプロビジョナーを識別します。
4
クライアント Pod が存在するか、または即時にボリュームをプロビジョニングするかどうかを指定します。オプションは WaitForFirstConsumer および Immediate です。スケジュール可能な Pod に対してのみストレージがプロビジョニングされるようにするには、WaitForFirstConsumer を使用することを推奨します。
5
StorageClass からプロビジョニングされる PVC で拡張を許可するかどうかを指定します。MicroShift の LVMS CSI プラグインはボリューム拡張をサポートしますが、この値が false に設定されている場合、拡張はブロックされます。