プロジェクト#
LXD は LXD サーバを分割する方法としてプロジェクトをサポートしています。 それぞれのプロジェクトは独自のインスタンスのセットを保持し、さらに独自のイメージとプロファイルも持ちます。
プロジェクトに何を含めるかは features
設定キーによって決められます。
機能が無効の場合はプロジェクトは default
プロジェクトから継承します。
デフォルトでは全ての新規プロジェクトは全体のフィーチャーセットを取得し、 アップグレード時には既存のプロジェクトは新規のフィーチャーが有効には なりません。
key/value 設定は現在サポートされている以下のネームスペースによって 名前空間が分けられています。
features
プロジェクトのフィーチャーセットのどの部分が使用中かlimits
プロジェクトに属するコンテナと VM に適用されるリソース制限user
ユーザーメタデータに対する自由形式の key/value
キー |
型 |
条件 |
デフォルト値 |
説明 |
---|---|---|---|---|
|
string |
- |
- |
プロジェクト内のバックアップに使う圧縮アルゴリズム( |
|
bool |
- |
|
プロジェクト用のイメージとイメージエイリアスのセットを分離する |
|
bool |
- |
|
プロジェクトごとに個別のネットワークのセットを使うかどうか |
|
bool |
- |
|
プロジェクトの個別のネットワークゾーンのセット |
|
bool |
- |
|
プロジェクト用のプロファイルを分離する |
|
bool |
- |
|
プロジェクトに個別のストレージバケットのセットを使うかどうか |
|
bool |
- |
|
プロジェクトごとに個別のストレージボリュームのセットを使うかどうか |
|
bool |
- |
- |
LXD がキャッシュするイメージを自動更新するかどうか |
|
integer |
- |
- |
キャッシュしたイメージの更新を確認する間隔(単位は時間、0 を指定すると無効) |
|
string |
- |
- |
プロジェクト内のイメージに使う圧縮アルゴリズム ( |
|
string |
- |
- |
アーキテクチャーが混在するクラスタ内で使用するデフォルトのアーキテクチャー |
|
integer |
- |
- |
プロジェクト内の使用されないリモートイメージのキャッシュが削除されるまでの日数 |
|
integer |
- |
- |
プロジェクト内に作成可能なコンテナの最大数 |
|
integer |
- |
- |
プロジェクトのインスタンスに設定する個々の |
|
string |
- |
- |
プロジェクトの全てのインスタンスボリューム、カスタムボリューム、イメージで使用するディスクスペースの合計の最大値 |
|
integer |
- |
- |
プロジェクト内に作成できるインスタンスの合計数の最大値 |
|
string |
- |
- |
プロジェクトのインスタンスに設定する個々の |
|
integer |
- |
- |
このプロジェクトが持てるネットワークの最大数 |
|
integer |
- |
- |
プロジェクトのインスタンスに設定する個々の |
|
integer |
- |
- |
プロジェクト内に作成可能な VM の最大数 |
|
bool |
- |
|
セキュリティセンシティブな機能へのアクセスをブロックするかどうか( |
|
string |
- |
|
インスタンスやボリュームのバックアップの作成を禁止するかどうか |
|
string |
- |
- |
指定したグループ以外のクラスタグループにターゲットするのを防ぐ |
|
string |
- |
|
インスタンスを作成・移動する際にクラスタメンバーを直接指定するのを防ぐかどうか |
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
システムコールのインターセプションオプションの使用を防ぐ。 |
|
string |
- |
|
|
|
string |
- |
- |
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
|
|
|
string |
- |
- |
インスタンスの |
|
string |
- |
- |
インスタンスの |
|
string |
- |
- |
このプロジェクト内で使用が許可されるネットワーク名のカンマ区切りリスト。未設定の場合は全てのネットワークがアクセス可能 ( |
|
string |
- |
|
このプロジェクトで使用するために割り当てられるアップリンクネットワークのネットワークサブネット( |
|
string |
- |
|
このプロジェクト内のネットワークでアップリンクとして使用可能なネットワークのカンマ区切りリスト |
|
string |
- |
|
このプロジェクト内の使用可能なネットワークゾーン(またはそれらの下のサブゾーン) のカンマ区切りリスト |
|
string |
- |
|
インスタンスやボリュームのスナップショット作成を禁止するかどうか |
|
string |
- |
|
|
これらのキーは lxc
ツールを使って以下のように設定できます。
lxc project set <project> <key> <value>
プロジェクトの制限#
注意: limits.*
設定キーの 1 つを設定する際はプロジェクト内の 全ての インスタンスに直接あるいはプロファイル経由で同じ設定キーを設定 する必要があります。
それに加えて
limits.cpu
設定キーを使うにはさらに CPU ピンニングが使用されて いない 必要があります。limits.memory
設定キーはパーセント ではなく 絶対値で設定する必要があります。
プロジェクトに設定された limits.*
設定キーは直接あるいはプロファイル経由でプロジェクト内のインスタンスに設定した個々の limits.*
設定キーの値の 合計値 に対しての hard な上限として振る舞います。
例えば、プロジェクトの limits.memory
設定キーを 50GB
に設定すると、プロジェクト内のインスタンスに設定された全ての limits.memory
設定キーの個々の値の合計が 50GB
以下に維持されることを意味します。
インスタンスの作成あるいは変更時に limits.memory
の値を全体の合計が 50GB
を超えるように設定しようとするとエラーになります。
同様にプロジェクトの limits.cpu
設定キーを 100
に設定すると、個々の limits.cpu
の値の 合計 が 100
以下に維持されることを意味します。
プロジェクトのセキュリティ規制#
restricted
設定キーが true
に設定されると、プロジェクトのインスタンスはコンテナネスティングや生の LXC 設定といったセキュリティセンシティブな機能にアクセスできなくなります。
restricted
設定キーがブロックする機能の正確な組み合わせは LXD の今後のリリースに伴って、より多くの機能がセキュリティセンシテイブであると判断されて増えていく可能性があります。
さまざまな restricted.*
サブキーを使うことで通常なら restricted
でブロックされるはずの個々の機能を選んで許可し、プロジェクトのインスタンスで使えるようにできます。
例えば
lxc project set <project> restricted=true
lxc project set <project> restricted.containers.nesting=allow
はコンテナネスティング 以外の 全てのセキュリティセンシティブな機能をブロックします。
それぞれのセキュリティセンシティブな機能は対応する restricted.*
プロジェクト設定サブキーを持ち、その機能を許可しプロジェクトで使えるようにするにはデフォルト値から変更する必要があります。
個々の restricted.*
設定キーの値の変更が有効になるのはトップレベルの restricted
キーが true
に設定されているときのみであることに注意してください。
restricted
が false
に設定されている場合、 restricted.*
サブキーを変更しても実質的には変更していないのと同じです。
ほとんどの restricted.*
設定キーは block
(デフォルト値)か allow
のいずれかの値を設定可能なバイナリースイッチです。
しかし一部の restricted.*
設定キーはより細かい制御のために他の値をサポートします。
全ての restricted.*
キーを allow
に設定すると restricted
自体を false
に設定するのと実質同じことになります。