|Index|SUSE Edge ドキュメント|ハウツーガイド|SUSE Storage V2データエンジン
適用項目 SUSE Edge 3.7

27 SUSE Storage V2データエンジン

SUSE Storage 1.12.1には、一般提供機能としてLonghorn V2データエンジンが含まれています。 SUSE Edge 3.7以降、クラスターがV2の前提条件を満たしている場合、新規にプロビジョニングされるボリュームにはV2データエンジンが推奨されます。

重要
重要

SUSE Storage Helmチャートは、既存のV1ボリュームをV2に変換しません。 データエンジンは変更不可能なボリュームプロパティです。 既存のV1ボリュームは、データが新規プロビジョニングされたV2ボリュームに移行されるまで、引き続きV1を使用します。

27.1 前提条件

V2データエンジンを有効にする前に、https://longhorn.io/docs/1.12.1/deploy/install/#v2-data-engine-requirements[アップストリームのV2要件]を確認してください。 特に、V2レプリカをホストできるすべてのノードには以下が必要です。

  • 専用のフォーマットされていないブロックデバイス。本番環境のワークロードにはNVMeデバイスが推奨されます。

  • nvme-tcp、vfio_pci、および`uio_pci_generic`カーネルモジュール。

  • V2インスタンスマネージャーに十分なCPUとメモリ。デフォルト設定では、インスタンスマネージャーごとに2 GiBのヒュージページを使用します。

  • サポートされているCPUとカーネル。AMD64 CPUにはSSE4.2が必要であり、カーネル6.7以降が推奨されます。

Longhornでは、移行完了後にデータエンジンを1つだけ使用することを推奨しています。 両方のエンジンを実行すると個別のインスタンスマネージャーが作成されるため、追加のCPUとメモリが消費されます。

27.2 新規ボリューム用にV2を設定する

アプリケーションボリュームをプロビジョニングする前に、必要なブロックデバイスを準備してください。 SUSE Storage UIを使用するか、対応する`block`リソースを更新して、各デバイスをLonghornノード上の`nodes.longhorn.io`ディスクとして登録してください。

V1ボリュームが存在しない新しいクラスターの場合は、以下のHelm値を使用してください。

defaultSettings:
  v1DataEngine: false
  v2DataEngine: true
persistence:
  dataEngine: v2

V1ボリュームを持つ既存のクラスターの場合は、移行中に両方のエンジンを有効のままにしてください。

defaultSettings:
  v1DataEngine: true
  v2DataEngine: true
persistence:
  dataEngine: v2

通常のHelmデプロイメントまたはアップグレードワークフローで値を適用してください。 次に例を示します。

helm upgrade --install longhorn oci://dp.apps.rancher.io/charts/suse-storage \
  --version 1.12.1 \
  --namespace longhorn-system \
  --create-namespace \
  --reuse-values \
  --values suse-storage-v2-values.yaml

既存のインストール環境で、実行中のLonghorn設定が有効になっていることを確認してください。 Helmアップグレード後も無効のままの場合は、明示的に有効にしてください。

kubectl -n longhorn-system patch settings.longhorn.io v2-data-engine \
  --type merge --patch '{"value":"true"}'
注意
注意

クラスター内にV1ボリュームが残っている間は、V1データエンジンを無効にしないでください。 既存のリリースをアップグレードする際は、--reuse-values`が`persistence.dataEngine`の古い値(`v1)を保持していないことも確認してください。

既存のStorageClassをその場で変更するのではなく、専用のV2 StorageClassを作成してください。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: longhorn-v2
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
  dataEngine: "v2"
  numberOfReplicas: "3"
  staleReplicaTimeout: "2880"
  fsType: "ext4"

`storageClassName`を指定しないPVCに対してV2をデフォルトにするには、デフォルトのアノテーションを新しいStorageClassに移動してください。

kubectl annotate storageclass longhorn \
  storageclass.kubernetes.io/is-default-class="false" --overwrite

kubectl annotate storageclass longhorn-v2 \
  storageclass.kubernetes.io/is-default-class="true" --overwrite

この変更は、新しくプロビジョニングされたボリュームにのみ影響します。 既存のボリュームのデータエンジンは変更されません。

設定、StorageClass、ディスク、およびボリュームを確認してください。

kubectl -n longhorn-system get settings.longhorn.io \
  v1-data-engine v2-data-engine

kubectl get storageclass longhorn-v2 \
  -o jsonpath='dataEngine={.parameters.dataEngine}{"\n"}'

kubectl -n longhorn-system get nodes.longhorn.io

kubectl -n longhorn-system get volumes.longhorn.io \
  -o custom-columns='NAME:.metadata.name,ENGINE:.spec.dataEngine,STATE:.status.state,ROBUSTNESS:.status.robustness'

27.3 V1ボリュームをV2に移行する

SUSE Storage 1.12.1は、既存のボリュームをV1からV2へその場で変換することをサポートしていません。 メンテナンスウィンドウを計画し、各ワークロードを新しいV2ボリュームに移行してください。

  1. アプリケーションとそのV1ボリュームをバックアップしてください。

  2. ソースPVCに書き込むすべてのワークロードを停止またはスケールダウンしてください。

  3. longhorn-v2 StorageClassを使用し、ソースPVCと同等以上の容量を持つ宛先PVCを同じネームスペースに作成してください。

  4. アプリケーションでサポートされている方法を使用してデータをコピーしてください。

  5. ワークロードが宛先PVCを使用するように変更する前に、コピーされたデータを検証してください。

  6. ワークロードがV2 PVCを参照するように、更新または再作成してください。

  7. アプリケーションがV2で検証されるまでV1ボリュームを保持し、その後、保持ポリシーに従って削除してください。

データベースや、整合性を意識した移行を必要とする他のアプリケーションによって管理されていないファイルシステムボリュームの場合、単一のメンテナンスポッドでV1ソースを読み取り専用、V2宛先を読み取り/書き込みでマウントできます:

apiVersion: batch/v1
kind: Job
metadata:
  name: copy-v1-to-v2
  namespace: <application-namespace>
spec:
  backoffLimit: 3
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: copy
          image: registry.suse.com/bci/bci-micro:latest
          command:
            - /bin/bash
            - -c
            - |
              set -euo pipefail
              cp -a /source/. /destination/
              sync
          volumeMounts:
            - name: source
              mountPath: /source
              readOnly: true
            - name: destination
              mountPath: /destination
      volumes:
        - name: source
          persistentVolumeClaim:
            claimName: <v1-pvc-name>
        - name: destination
          persistentVolumeClaim:
            claimName: <v2-pvc-name>
警告
警告

コピー・ジョブは、一般的なファイルシステムの例にすぎません。 データベース、RAWブロックボリューム、および独自の整合性要件を持つアプリケーションには、アプリケーションネイティブのバックアップと復元、またはレプリケーションを使用してください。 ソースPVCを削除する前に、所有権、権限、拡張属性、およびアプリケーションデータを確認してください。

すべてのワークロードが移行された後、V1ボリュームが残っていないことを確認してください。

kubectl -n longhorn-system get volumes.longhorn.io \
  -o custom-columns='NAME:.metadata.name,ENGINE:.spec.dataEngine,STATE:.status.state'

その後、Helm値でV1 Data Engineを無効にし、リリースをアップグレードできます:

defaultSettings:
  v1DataEngine: false
  v2DataEngine: true
persistence:
  dataEngine: v2

Helmアップグレード後も実行設定が有効なままの場合は、明示的に無効にしてください。

kubectl -n longhorn-system patch settings.longhorn.io v1-data-engine \
  --type merge --patch '{"value":"false"}'

V1固有のノードストレージを削除する前に、ボリュームインベントリコマンドを再度実行し、V1ボリュームが見落とされていないことを確認してください。

27.4 使用上の制限

ワークロードをV2に移行する前に、https://longhorn.io/docs/1.12.1/v1-v2-volume-behavior-and-feature-parity/[V1とV2の機能比較]を確認してください。 以下の制限は、SUSE Storage 1.12.1に特に関連しています:

  • V1ボリュームをその場でV2に変換することはできません。

  • V2バッキングイメージはサポートされていません。KubeVirtイメージのインポートワークフローにはCDIを使用してください。

  • Strict-localボリューム、オフラインの高速レプリカ再構築、リビジョンカウンター、および孤立したインスタンスの管理は、V2データエンジンではサポートされていません。

  • V2エンジンのライブアップグレードはサポートされていないため、SUSE Storage 1.12のパッチ間でアップグレードを行う前に、V2ボリュームをデタッチする必要があります。

  • シャーディングされたV2データエンジンは実験的なものであり、レプリケートされたV2ボリュームと機能の同等性はありません。バックアップ、ディザスタリカバリ、クローン作成、ライブマイグレーションなど、サポートされていない機能を必要とする本番ワークロードには使用しないでください。

  • ARM64では、NVMeブロックデバイスをバックエンドとするV2ボリュームにはアップストリームの制限があります。デプロイメントの前に、https://longhorn.io/docs/1.12.1/important-notes/[Longhornの重要な注意事項]を確認してください。