CephFS - cephfs

Ceph はオープンソースのストレージプラットフォームで、データを RADOS に基づいたストレージクラスタ内に保管します。 非常にスケーラブルで、単一障害点がない分散システムであり非常に信頼性が高いです。

Ceph はブロックストレージ用とファイルシステム用に異なるコンポーネントを提供します。

CephFS は堅牢でフル機能の POSIX 互換の分散ファイルシステムを提供する Ceph のファイルシステムコンポーネントです。 内部的には ファイルを Ceph オブジェクトにマップし、ファイルのメタデータ(たとえば、ファイルの所有権、ディレクトリーパス、アクセス権限)を別のデータプールに保管します。

用語

Ceph は保管するデータに オブジェクト という用語を使用します。 データを保存と管理する責任を持つデーモンは Ceph OSD です。 Ceph のストレージは プール に分割されます。これはオブジェクトを保管する論理的なパーティションです。 これらは データプール, ストレージプール, OSD プール とも呼ばれます。

CephFS ファイルシステム は 2 つの OSD ストレージプールから構成され、ひとつは実際のデータ、もうひとつはファイルメタデータに使用されます。

Incus の cephfs ドライバー

注釈

cephfs ドライバはコンテントタイプ filesystem のカスタムストレージボリュームにのみ使用できます。

他のストレージボリュームには Ceph ドライバを使用してください。 そのドライバはコンテントタイプ filesystem のカスタムストレージボリュームにも使用できますが、 Ceph RBD イメージを使って実装しています。

使用したい CephFS ファイルシステムを事前に作成しておいて source に指定するか、ファイルシステムと(cephfs.data_poolcephfs.meta_pool で指定される名前で)データとメタデータ OSD プールを自動的に作成するcephfs.create_missing オプションを指定します。

他のストレージドライバーとは異なり、このドライバーはストレージシステムをセットアップはせず、既に Ceph クラスタをインストール済みであると想定します。

使用したい CephFS ファイルシステムは事前に作成する必要があり source オプションで指定する必要があります。

このドライバーはリモートのストレージを提供するという意味でも他のドライバーとは異なる振る舞いをします。 結果として、内部ネットワークに依存し、ストレージへのアクセスはローカルのストレージより少し遅くなるかもしれません。 一方で、リモートのストレージを使うことはクラスタ構成では大きな利点があります。これはストレージプールを同期する必要なしに、すべてのクラスタメンバーが同じ内容を持つ同じストレージプールにアクセスできるからです。

Incus は OSD ストレージプールに対して完全制御できることを想定します。 このため、 Incus OSD ストレージプール内に Incus が所有しないファイルシステムエンティティは Incus が消してしまうかもしれないので決して置くべきではありません。

Incus の cephfs ドライバーはサーバー側でスナップショットが有効な場合はスナップショットをサポートします。

設定オプション

cephfs ドライバーを使うストレージプールとこれらのプール内のストレージボリュームには以下の設定オプションが利用できます。

ストレージプール設定

cephfs.cluster_name

CephFSファイルシステムを含むCephクラスタの名前

Key: cephfs.cluster_name
Type:

string

Default:

ceph

Scope:

global

cephfs.create_missing

データとメタデータOSDプールが存在しない場合は作成しつつファイルシステムを作成

Key: cephfs.create_missing
Type:

bool

Default:

false

Scope:

global

cephfs.data_pool

ファイルシステム用に作成するデータOSDプール名

Key: cephfs.data_pool
Type:

string

Default:
Scope:

global

cephfs.fscache

カーネルのfscachecachefilesdを使用するか

Key: cephfs.fscache
Type:

bool

Default:

false

Scope:

global

cephfs.meta_pool

ファイルシステム用に作成するメタデータOSDプール名

Key: cephfs.meta_pool
Type:

string

Default:
Scope:

global

cephfs.osd_pg_num

存在しないOSDプールを作成する際に使用するOSDプールのpg_num

Key: cephfs.osd_pg_num
Type:

string

Default:
Scope:

global

cephfs.path

CephFSをマウントするベースのパス

Key: cephfs.path
Type:

string

Default:

/

Scope:

global

cephfs.user.name

使用するCephのユーザー

Key: cephfs.user.name
Type:

string

Default:

admin

Scope:

global

source

使用する既存のCephFSファイルシステムかファイルシステムパス

Key: source
Type:

string

Default:
Scope:

local

volatile.pool.pristine

作成時にCephFSファイルシステムが空だったか

Key: volatile.pool.pristine
Type:

string

Default:

true

Scope:

global

Tip

これらの設定に加えて、ストレージボリューム設定のデフォルト値を設定できます。 ストレージボリュームのデフォルト値を変更する を参照してください。

initial.gid

インスタンス内のボリュームの所有者のGID

Key: initial.gid
Type:

int

Default:

volume.initial.gidと同じか0

Condition:

コンテントタイプfilesystemのカスタムボリューム

initial.mode

インスタンス内のボリュームのモード

Key: initial.mode
Type:

int

Default:

volume.initial.modeと同じか711

Condition:

コンテントタイプfilesystemのカスタムボリューム

initial.uid

インスタンス内のボリュームの所有者のUID

Key: initial.uid
Type:

int

Default:

volume.initial.uidと同じか0

Condition:

コンテントタイプfilesystemのカスタムボリューム

security.shared

複数のインスタンスでのボリュームの共有を有効にする

Key: security.shared
Type:

bool

Default:

volume.security.sharedと同じかfalse

Condition:

カスタムブロックボリューム

security.shifted

ID シフトオーバーレイを有効にする (複数の分離されたインスタンスによるアタッチを許可する)

Key: security.shifted
Type:

bool

Default:

volume.security.shiftedと同じかfalse

Condition:

カスタムボリューム

security.unmapped

ボリュームへのIDマッピングを無効にする

Key: security.unmapped
Type:

bool

Default:

volume.security.unmappedと同じかfalse

Condition:

カスタムボリューム

size

ストレージボリュームのサイズ/クォータ

Key: size
Type:

string

Default:

volume.sizeと同じ

Condition:

適切なドライバー

snapshots.expiry

新しく作ったスナップショットをいつ削除するかを制御(1M 2H 3d 4w 5m 6y のような式を期待)

Key: snapshots.expiry
Type:

string

Default:

volume.snapshots.expiryと同じ

Condition:

カスタムボリューム

この値は新しく作ったスナップショットの有効期限を算出するのに使います。 スナップショットが作られた日時にこの値が加算され、結果のタイムスタンプがスナップショットの個別の有効期限として保管されます。 この値を変更しても、変更後に作られたスナップショットのみに影響します。既存のスナップショットの有効期限は変更されません。

サポートされる単位はS(秒)、M(分)、H(時)、d(日)、w(週)、m(月) and y(年)です。 Mが分を意味し、mが月であることに注意してください。 それぞれの単位は1度だけ指定でき、月と年は固定の日数ではなくカレンダーの月として計算されます。

snapshots.expiry.manual

新しく作ったスナップショットをいつ削除するかを制御(1M 2H 3d 4w 5m 6y のような式を期待)

Key: snapshots.expiry.manual
Type:

string

Default:

volume.snapshots.expiry.manualと同じ

Condition:

カスタムボリューム

この値は新しく作ったスナップショットの有効期限を算出するのに使います。 スナップショットが作られた日時にこの値が加算され、結果のタイムスタンプがスナップショットの個別の有効期限として保管されます。 この値を変更しても、変更後に作られたスナップショットのみに影響します。既存のスナップショットの有効期限は変更されません。

サポートされる単位はS(秒)、M(分)、H(時)、d(日)、w(週)、m(月) and y(年)です。 Mが分を意味し、mが月であることに注意してください。 それぞれの単位は1度だけ指定でき、月と年は固定の日数ではなくカレンダーの月として計算されます。

snapshots.pattern

スナップショットの名前を表す Pongo2 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用) [1]

Key: snapshots.pattern
Type:

string

Default:

volume.snapshots.patternと同じかsnap%d

Condition:

カスタムボリューム

snapshots.schedule

Cron 表記 (<minute> <hour> <dom> <month> <dow>)、またはスケジュールエイリアスのカンマ区切りリスト(@hourly, @daily, @midnight, @weekly, @monthly, @annually, @yearly)、または自動スナップショットを無効にする場合は空文字(デフォルト)

Key: snapshots.schedule
Type:

string

Default:

volume.snapshots.scheduleと同じ

Condition:

カスタムボリューム