TrueNAS - truenas

Incus内のtruenasストレージドライバー

truenasストレージドライバーはIncusのノードでリモートのTrueNASストレージドライバーを使って1つ以上のIncusストレージプールを持てるようにします。 ノードがクラスターの一部である場合、すべてのクラスターメンバーはストレージプールに同時にアクセスすることができ、ノード間で仮想マシン(VM)をライブマイグレーションする用途に最適になります。

ドライバーはブロックベースの方式で動作し、これはすべてのIncusのボリュームはリモートのTrueNASサーバー上のZFSのボリュームブロックとして作成されることを意味します。これらのZFSボリュームブロックデバイスはiSCSIを介してローカルのIncusノード上でアクセスされます。

既存のZFSドライバーをモデルにして、truenasドライバーは標準のZFSの機能のほとんどをサポートしますが、リモートのTrueNASサーバー上で動作します。例えば、ローカルのVMのスナップショットを作成したり複製する場合は、ローカルファイルシステムを同期したあとリモートサーバー上でスナップショットと複製の操作が実行されます。複製は必要に応じてiSCSI経由で実行されます。

各ストレージプールはリモートのTrueNASホスト上のZFSデータセットに対応します。 データセットは存在しなければ自動的に作成されます。 ドライバーはリモートホスト上で利用可能なZFSの機能を使って効率的なイメージの処理、コピー操作、スナップショットの管理をネストしたZFS(ZFS-on-ZFS)を必要とせずに実行できます。

リモートのデータセットを参照するには、sourceプロパティを下記の形式で指定できます: [<remote host>:]<remote pool>[[/<remote dataset>]...][/]

パスの最後が/で終わる場合、データセット名はIncusのストレージプール名から派生されます(例、tank/pool1)。

要件

このドライバーはTrueNAS APIを使ってリモートサーバー上でアクションを実行するためにtruenas_incus_ctlツールに依存しています。 このツールはさらにopen-iscsiを経由してリモートのZFSボリュームのアクティベーションとデアクティベーションを管理もしています。 truenas_incus_ctlがインストールされていないかシステムのPATHに存在しない場合、ドライバーは無効化されます。

必要なツールをインストールするには、truenas\_incus\_ctl GitHub pageから最新版(v0.7.2+が必要)をダウンロードしてください。 さらにopen-iscsiを以下のコマンドでインストールしてください:

sudo apt install open-iscsi

TrueNASホストへのログイン

APIキーを手動で作成しtruenas.api_keyプロパティでそれを指定する代わりに、truenas_incus_ctlツールでリモートサーバーにログインすることもできます。

sudo truenas_incus_ctl config login

するとTrueNASサーバーへ接続する詳細情報(認証の詳細を含む)がプロンプトで表示されます。そして設定をローカルファイルに保存します。ログインした後、iSCSIのセットアップを以下のコマンドで確認できます:

sudo truenas_incus_ctl share iscsi setup --test

ツールが設定されたら、これを使ってリモートのデータセットを使ってストレージプールを作成できます:

incus storage create <poolname> truenas source=[host:]<pool>[/<dataset>]/[remote-poolname]

上記のコマンドでは:

  • sourceはリモートのTrueNASホスト上でストレージプールを作成する場所を指定します。

  • hostはオプションで、truenas.hostプロパティで指定することもでき、truenas.configで設定することもできます。

  • remote-poolnameが指定されない場合はデフォルトとしてローカルプールの名前が使われます。

設定オプション

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

ストレージプール設定

source

リモートのTrueNASホスト上で使用するZFSデータセット。形式: [<host>:]<pool>[/<dataset>][/]。ここでhostを省略すると、truenas.hostで設定する必要あり。

Key: source
Type:

string

Default:
Scope:

local

truenas.allow_insecure

trueに設定すると、TrueNAS APIへの安全でない(非TLS)接続を許可します。

Key: truenas.allow_insecure
Type:

bool

Default:

false

Scope:

global

truenas.api_key

TrueNASホストへの認証に使うAPIキー。

Key: truenas.api_key
Type:

string

Default:
Scope:

global

truenas.clone_copy

フルのdatasetコピーではなくライトウェイトなクローンを使うかどうか。

Key: truenas.clone_copy
Type:

bool

Default:

true

Scope:

global

truenas.config

TrueNASクライアントツールの設定ファイルのパス。

Key: truenas.config
Type:

string

Default:
Scope:

global

truenas.dataset

リモートデータセット名。通常はsourceから推測されるが、上書きも可能。

Key: truenas.dataset
Type:

string

Default:
Scope:

global

truenas.force_reuse

既存の空でないプールを使うのを許可する。

Key: truenas.force_reuse
Type:

bool

Default:

false

Scope:

global

truenas.host

TrueNASシステムのホスト名またはIPアドレス。source内に含まれるか、設定が使われる場合は設定不要。

Key: truenas.host
Type:

string

Default:
Scope:

global

truenas.initiator

ブロックボリュームのアタッチの際に使われるiSCSIイニシエーター名。

Key: truenas.initiator
Type:

string

Default:
Scope:

global

truenas.portal

ブロックボリュームの接続の際に使われるiSCSIポータルアドレス。

Key: truenas.portal
Type:

string

Default:
Scope:

global

Tip

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

ストレージボリューム設定

block.create_options

ボリュームをフォーマットする際にファイルシステム作成ツールに渡す追加のオプション

Key: block.create_options
Type:

string

Default:

volume.block.create_optionsと同じ

Condition:
block.filesystem

ストレージボリュームのファイルシステム: btrfs, ext4 または xfs (未指定の場合 ext4)

Key: block.filesystem
Type:

string

Default:

volume.block.filesystemと同じ

Condition:
block.mount_options

ブロックベースのファイルシステムボリュームのマウントオプション

Key: block.mount_options
Type:

string

Default:

volume.block.mount_optionsと同じ

Condition:
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 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用)

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:

カスタムボリューム

truenas.blocksize

ZFSブロックのサイズを512バイトから16MiBの間で(2のべき乗で)指定。ブロックボリュームではより大きな値を設定しても最大値の128KiBが使われます

Key: truenas.blocksize
Type:

string

Default:

volume.truenas.blocksizeと同じ

Condition:
truenas.remove_snapshots

必要に応じてスナップショットを削除する

Key: truenas.remove_snapshots
Type:

bool

Default:

volume.truenas.remove_snapshotsと同じかfalse

Condition:
truenas.use_refquota

スペースのquotaの代わりにrefquotaを使う

Key: truenas.use_refquota
Type:

bool

Default:

volume.truenas.use_refquotaと同じかfalse

Condition: