この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

ボリュームの拡張

ボリュームは二段階で拡張されます。まず、Longhornがブロックデバイスのサイズを変更し、その後ファイルシステムを拡張します。

Longhornはオンライン拡張をサポートしています。ほとんどの場合、Longhornは接続されたボリュームを制限なしに直接拡張できます。ボリュームが読み書き中であっても、または再構築中であっても関係ありません。

ただし、ボリュームがCSIインターフェースを介して拡張されなかった場合(例:Kubernetes v1.16より古い場合)、対応するPVCおよびPVの容量は変更されません。

前提条件

  • オフライン拡張の場合、Longhornのバージョンはv0.8.0以上でなければなりません。

  • オンライン拡張の場合、Longhornのバージョンはv1.4.0以上でなければなりません。

Longhornボリュームを拡張する

Longhornボリュームを拡張する方法は二つあります:PersistentVolumeClaim(PVC)を使用する方法とLonghorn UIを使用する方法です。

Via PVC

この方法は次の場合にのみ適用されます:

  • PVCがKubernetesによってLonghorn StorageClassで動的にプロビジョニングされていること。

  • 関連するStorageClassのフィールド`allowVolumeExpansion`は`true`である必要があります。

この方法は適用可能な場合に推奨されます。なぜなら、PVCとPVは自動的に更新され、拡張後もすべてが一貫性を保つからです。

使用方法:Longhornボリュームに対応するPVCを見つけて、PVCの要求された`spec.resources.requests.storage`を変更します:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"longhorn-simple-pvc","namespace":"default"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"longhorn"}}
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: driver.longhorn.io
  creationTimestamp: "2019-12-21T01:36:16Z"
  finalizers:
  - kubernetes.io/pvc-protection
  name: longhorn-simple-pvc
  namespace: default
  resourceVersion: "162431"
  selfLink: /api/v1/namespaces/default/persistentvolumeclaims/longhorn-simple-pvc
  uid: 0467ae73-22a5-4eba-803e-464cc0b9d975
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: longhorn
  volumeMode: Filesystem
  volumeName: pvc-0467ae73-22a5-4eba-803e-464cc0b9d975
status:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  phase: Bound

Longhorn UI経由

使用方法:Longhorn UIのボリュームページで、ボリュームのために`Expand`をクリックします。

ファイルシステムの拡張

Longhornは次の場合にのみファイルシステムを拡張しようとします:

  • 拡張サイズは現在のサイズより大きくする必要があります。

  • LonghornボリュームにはLinuxファイルシステムがあります。

  • Longhornボリュームで使用されるファイルシステムは次のいずれかです:

    • ext4

    • xfs

  • 拡張サイズは、ファイルシステムによって許可される最大ファイルサイズ(例えば、`ext4`の場合は16TiB)より小さくなければなりません。

  • Longhornボリュームはブロックデバイスフロントエンドを使用しています。

コーナーケース

ボリュームのリバート処理

ボリュームがサイズの小さいスナップショットにリバートされると、ボリュームのフロントエンドは依然として拡張サイズを保持しています。しかし、ファイルシステムのサイズはリバートされたスナップショットのサイズと同じになります。この場合、ファイルシステムを手動で処理する必要があります:

  1. ボリュームをランダムなノードにアタッチします。

  2. 対応するノードにログインし、ファイルシステムを拡張します。

    ファイルシステムが`ext4`の場合、ファイルシステムを手動でリサイズする前に、ボリュームを マウントし、 アンマウントする必要があるかもしれません。そうでない場合、`resize2fs`を実行するとエラーが発生する可能性があります:

     resize2fs: Superblock checksum does not match superblock while trying to open ......
     Couldn't find valid filesystem superblock.

    以下の手順に従ってファイルシステムを拡張します:

     mount /dev/longhorn/<volume name> <arbitrary mount directory>
     umount /dev/longhorn/<volume name>
     mount /dev/longhorn/<volume name> <arbitrary mount directory>
     resize2fs /dev/longhorn/<volume name>
     umount /dev/longhorn/<volume name>
  3. ファイルシステムが`xfs`の場合、直接マウントしてからファイルシステムを拡張できます。

     mount /dev/longhorn/<volume name> <arbitrary mount directory>
     xfs_growfs <the mount directory>
     umount /dev/longhorn/<volume name>

暗号化されたボリューム

Longhornのオンライン拡張のサポートはKubernetesに依存しています。

暗号化されたボリュームのオンライン拡張を有効にするには、次の暗号化パラメータをStorageClassに指定します。

  • csi.storage.k8s.io/node-expand-secret-name

  • csi.storage.k8s.io/node-expand-secret-namespace

それを有効にできない場合でも、オンライン拡張を行いたい場合は、次のことができます:

  1. 暗号化ボリュームが接続されているノードにログインします。

  2. `cryptsetup resize <volume name>`を実行します。このコマンドに必要なパスフレーズは、対応するシークレットのフィールド`CRYPTO_KEY_VALUE`です。

  3. ファイルシステムを拡張します。

RWXボリューム

v1.8.0以降、LonghornはRWXボリュームのファイルシステム(NFS)の完全自動オンライン拡張をサポートしています。この機能を使用するには、次のコンポーネントのv1.8.0バージョンが実行されている必要があります:

  • Longhorn Manager

  • CSIプラグイン

  • シェアマネージャー(NFSエクスポートを管理)

アップグレード中、シェアマネージャーポッド(各RWXボリューム用の1つ)は、自動的にアップグレードされず、混乱を避けます。

ブロックデバイスを拡張した後、CSIレイヤーはシェアマネージャーにファイルシステムをブロックデバイス内で拡張するためのリサイズコマンドを送信します。 ダウングレードされたシェアマネージャーでは、コマンドは「未実装」のエラーコードで失敗し、拡張は行われません。拡張の前に正しいイメージを取得するには、ポッドを強制的に再起動します。RWXボリュームのシェアマネージャーポッドを特定し(通常は`share-manager-<volume name>`という名前)、削除します。

kubectl -n longhorn-system delete pod <the share manager pod>

ポッドは適切なバージョンを使用して自動的に再作成され、拡張が完了します。今後の拡張には、さらなる介入は必要ありません。

オフライン

オフラインの間にRWXボリュームの拡張を許可するために、次の手順を実行します。

  1. RWXボリュームを`replicas=0`にスケールダウンして切り離します。ボリュームが完全に切り離されていることを確認してください。

  2. スケールコマンドが戻った後、次のコマンドを実行し、状態が`detached`であることを確認してください。

     kubectl -n longhorn-system get volume <volume-name>
  3. PVCまたはLonghorn UIを使用してブロックデバイスを拡張します。

  4. ワークロードをスケールアップします。

再接続されたボリュームは拡張されたサイズになります。さらに、Share Managerポッドは現在のバージョンで再作成されます。