ニュース¶
Incus 6.8 リリースのお知らせ¶
2024/12/13
はじめに ¶
Incus チームは、Incus 6.8 のリリースのアナウンスができてうれしいです!
このリリースは 2024 年の最後のリリースです。実行中の VM をストレージプール間で移動する機能、新しい認証バックエンド、アプリケーションコンテナのボリューム処理の改善など、VM に関係する多くの改善が加えられています。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Happy holidays!
新機能 ¶
VM ストレージのライブマイグレーション ¶
VM の実行中に、ストレージプール間で VM を移動できるようになりました。
しかし、これを動作させるには、VM はクラスター内の別のサーバーに移動する必要があることに注意が必要です。これは、マイグレーション中に、同じ VM の 2 つの QEMU インスタンスが、1 つのサーバー上で実行されることを防ぐために必要です。
あるプールから別のプールへの移動は次のように実行できます:
incus move NAME --storage NEW-POOL --target ANOTHER-SERVER
認可スクリプトレット ¶
新たな認可制御方法が、認可スクリプトレットの形で導入されました。これにより、TLS または OIDC 認証を組み合わせることができる、カスタムのビルトイン認証制御が可能になります。
ドキュメント : https://linuxcontainers.org/incus/docs/main/authorization/#scriptlet-authorization
VM コンソールのスクリーンショット¶
Incus 用の GUI や WebUI クライアントの開発を簡単にするために、VM の VGA コンソールの 1 回限りのスクリーンショットを簡単に取得できるようになりました。
これは非常に軽量で、ユーザーが VGA コンソールに接続しているときでも実行できるという利点があります。
VM の PNG スクリーンショットを取得するためには、GET /1.0/instances/NAME/console?type=vga
でアクセスするだけです。
カスタムストレージボリュームの初期オーナーとモード¶
OCI コンテナのデータに使われるストレージボリュームの作成を簡単にするために、カスタムストレージボリュームの設定オプションがいくつか追加されました:
- initial.uid
- initial.gid
- initial.mode
これらはボリューム作成時に与えることができます。名前が示すように、そのボリューム内のルート ディレクトリの uid、gid、モードの初期値を設定します。
例 :
incus storage volume create default my-volume size=5GiB initial.uid=1000 initial.gid=1000 initial.mode=0700
OpenFGA モデルの小規模なアップデート ¶
このリリースで、OpenFGA アクセスモデルが少し調整されました。
user:* viewer server:incus
の初期パーミッションは、認証されたユーザーに対してグローバルリソースへの読み取り専用アクセスを許可していました。これが同等の user:*authenticated server:incus
に置き換えられました。
さらに viewer
パーミッションがユーザーに直接与えられるようになり、(グローバルリソースだけでなく)サーバー全体の完全な読み取り専用アクセスが許可されます。
権限は更新時に自動的に更新されます。
さらに、新しい can_view_sensitive
資格が追加され、サーバー設定などの機密設定を読み取れるユーザーを制御できるようになりました。
インポート時のイメージエイリアス再利用 ¶
incus publish
で行われていたのと同様に、incus image import --reuse --alias ALIAS image.tar.xz
を実行してイメージをインポートし、ALIAS
というエイリアスで識別されるイメージを置き換えられるようになりました。
新しい incus-simplestreams prune
コマンド ¶
simplestream サーバーをクリーンに保つため、新たに incus-simplestreams prune
コマンドが追加されました。実行すると、次のものが認識され、クリーンアップされます:
- インデックス内のどのイメージにも属さないイメージファイル
- イメージファイルが存在しないインデックスエントリー
- 古いインデックスエントリー(デフォルトでは前の 2 つのイメージが保持される)
コンソールアクセスのロック¶
コンソールへのアクセスは、常に 1 人のユーザーに限定されてきました。
以前は、最後に接続したユーザーが既存のセッションを引き継ぎました。
これはよく驚きや問題の原因になるため、コンソールアクセスはロックされるようになりました。セッションがすでにアクティブなときに接続するとエラーになります。このエラーは強制フラグでオーバーライドできます。
例:
incus console remote-server:windows-2022 --force
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- Consume websocket pings for stderr
- incus-simplestreams: Add prune command
- internal/instance: Fix validation of volatile.cpu.nodes
- shared/util: Add a function to clone maps
- Use
util.CloneMap
where appropriate - cgo/process_utils: fix 32bit builds
- golangci: Enable goimports
- global: Initial goimports run
- incusd: Fix duplicate imports
- incusd: Fix import ordering
- instance/config: Mark user keys as live updatable
- doc: Update configs
- Fix incorrect Vars file mapping in edk2 driver
- incusd/storage/zfs: Fix deletion of unavailable pools
- zfs: load keys for encrypted datasets during pool import
- tests: zfs: add native zfs encryption tests
- incusd/instance: Lock image access
- incus/image: Make use of server-side alias handling
- client: Fix image aliases in push mode
- client: Fix image aliases in relay mode
- incusd/cluster: Validate address on join too
- incusd/network: Remove duplicated logic
- incusd/util: Cover DNS and wildcard coverage
- incusd/storage: Add initial.* config options for storage volume
- incusd/storage/drivers: Add ability to set the initial owner of a custom volume
- tests: Add test for setting initial owner of a cutom volume
- api: Add storage_initial_owner extension
- doc/reference: Add initial.* config keys
- shared/cliconfig: Improve configuration loading
- incus: Simplify configuration loading
- incus: Add aliases completion
- i18n: Update translation templates
- incusd/storage/drivers/lvm: Remove metadata info from space usage calculation
- incus/migration: Add StoragePool to VolumeTargetArgs and StorageMove to VolumeSourceArgs
- incus/instance: Add StoragePool to MigrateArgs
- incus/drivers: Add support for local live-migration between storage pools
- incusd: Add support for local live-migration between storage pools
- api: Add storage_live_migration extension
- golangci: Add local prefixes for goimports
- client: invalidate simple streams cache
- incusd/instances_post: Fix cluster internal migrations
- incusd/instances_post: Only update pool in DB if pool is expected to change
- incusd/instances_post: Account for profiles when overriding pool in DB
- incusd/main_forknet: Don't attach DHCP client to the container PID namespace
- incusd/instance/lxc: Cleanup DHCP client
- incusd/main_forknet: Tweak process title
- incus/image: Add reuse flag
- incus/publish: Use common helper function deleteImagesByAliases
- i18n: Update translation templates
- tests: Add a reuse flag test for the 'incus image import'
- incusd/instance/qemu: Set instance path ownership on startup
- api: instance_console_screenshot
- incusd/instance/qmp: Add Screendump command
- incusd/response: Allow overrriding Content-Type in FileResponse
- incusd/instance: Add ConsoleScreenshot to VM interface
- incusd/instance/qemu: Implement ConsoleScreenshot
- incusd/instance_console: Add screenshot support to console API
- doc/rest-api: Refresh swagger YAML
- incusd/task: Fix wait group logic (more entries than running tasks)
- incusd/instance: Add ETag function
- incusd/instance/qemu: Fix random ordering in ETag
- incusd/instance/lxc: Fix random ordering in ETag
- incusd: Use new ETag instance function
- api: image_import_alias
- client: Set X-Incus-aliases on image imports
- incusd/image: Allow passing alias list through X-Incus-aliases
- doc/rest-api: Refresh swagger YAML
- incusd/image: Fix context for alias add
- incusd/image: Handle all alias cases
- Makefile: Use fga for model conversion
- incusd/auth: Introduce EntitlementCanViewSensitive
- incusd/api_10: Use EntitlementCanViewSensitive
- incusd/auth/openfga: Introduce server-wide read-only access
- incusd/auth/openfga: Rebuild model
- incusd/auth/openfga: Migrate public permissions
- incusd/auth: Implement ApplyPatch
- incusd/auth/fga: Change model refresh logic to rely on patches
- incusd/patches: Add auth patch logic
- incusd/patches: Skip patches until their assigned stage
- doc/authorization: Remove outdated OpenFGA model description
- tests: Tweak openfga test
- incusd/migrate: Set CreationDate during custom volume snapshot copy with refresh
- incusd/storage: Add CreatedAt during custom volume copy with refresh
- tests: Update copy with refresh test
- doc/instance/properties: Add missing instance properties
- incusd/daemon_storage: Ensure corect symlinks for images/backups
- incusd/storage/lvm: Handle newer LVM
- doc/sphinx: Upgrade MyST
- doc/manpage: Tweak manpage synopsis rendering
- incusd/storage/lvm: Require 512-bytes physical block size for VM images
- incus: Improve instance and remote names completion
- incusd: Fill ExpiryDate and remove LastUsedDate in volumeSnapshotToProtobuf
- incusd/device/tpm: Wait for swtpm to be ready
- incus: Improve completion for
file push
andfile pull
- incusd/auth/tls: Restrict config access to non-admin
- incusd/storage: Handle default disk size in GetInstanceUsage
- incus: Improve completion for
file create
- incus: Improve completion for
file delete
- incus: Improve completion for
file edit
- incus: Improve completion for
file mount
- incus: Fix completion for
profile copy
- doc/installing: Update Fedora instructions
- incus: Add a function to complete image fingerprints
- incus: Add completion for
image alias
subcommands - incusd/daemon: Skip non-PKI issued trusted certificates when in PKI mode
- incusd/cluster: Update tests for change to trustedCerts
- tests: Validate all non-PKI certs are blocked in PKI mode
- incus: Fix completion for
image alias create
- doc/network_forwards: Split configuration into own table
- util: Improve readability with early return
- incusd/db: Improve readability with eraly return
- incus/top: Ignore CPU idle time
- incus: Display the alias expansion when execution of an alias fails
- i18n: Update translation templates
- util: code structure error handling
- incusd/db: do not shadow Go builtin function
- lint: disallow restricted licenses in go-licenses
- incus: Fix alias arguments handling
- incus/file: Expand setOwnerMode
- incus/file/push Use SFTP client instead of file API
- incusd/instance/qemu: Set CLOEXEC for TPM sockets
- incusd/patches: Run auth patches on all servers
- incusd/auth/openfga: Get rid of applyPatches
- incusd/auth/openfga: Force OpenFGA update on initial config and patching
- incus: Clarify device override syntax
- i18n: Update translation templates
- incusd/auth/openfga: refresh model before applying patches
- internal/scriptlet: Fix typo
- incusd/scriptlet: refactor marshal
- incusd/scriptlet: Refactor log
- incusd/scriptlet: Add authorization scriptlet
- incusd/auth: Refactor drivers
- incusd/config: Add scriptlet authorization key
- incusd/auth: Add authorization scriptlet driver
- incusd/daemon: Handle authorization scriptlet reset
- incusd/auth: Comment exported methods and types
- incusd/scriptlet: Add project and instance authorization getters
- doc: Update configs
- api: authorization_scriptlet
- doc/authorization: Add authorization scriptlet
- tests: Authorization scriptlet
- doc: add openSUSE installation instructions
- incusd/scriptlet: Rename prefixAuthorization to nameAuthorization
- incusd/scriptlet: Add function checks in scriptlet validation
- client/oci: Add debug logging for subprocess commands
- incusd/daemon_images: Fix error string typo for OCI connect errors
- incusd/scriptlet: Add function args checks in scriptlet validation
- incus/project: Fix get-current for default (unset) project
- Translated using Weblate (Japanese)
- incusd: Add support for '--force' flag
- cmd/console: Add '--force' flag
- shared/api: Add Force field to InstanceConsolePost
- client: Check 'console_force' API extenstion
- api: Add console_force extension
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- internal/cmd: Have RenderTable take in an io.Writer
- incus: Update for RenderTable
- incus-simplestreams: Update for RenderTable
- incusd: Update for RenderTable
- incusd: Cleanup in cmdClusterListDatabase
- doc/reference/network_bridge: Add missing backsticks for variable escaping
- incusd/instance/lxc: Skip instances without idmap allocation yet
- incusd/cluster: Skip project restrictions during join
- shared/ask: Add AskPassword/AskPasswordOnce to Asker
- shared/ask: Fix redefinition of the built-in types
- cmd/incus: Use AskPasswordOnce from asker
- incusd/storage/drivers/common: Truncate/Discard ahead of sparse write
- inucsd: Add additional check to Cancel method for ConsoleShow operation
- incusd/instance_console: Remove redundant (and unsafe) write
- incus/console: Make sure we leave the console in a clean state
- incusd/instance_console: Don't fail on failure to write reset sequence
- client: Improve SFTP performance
- incusd/main_forkfile: Improve SFTP performance
- incusd/network/ovn: Return ErrTooMany when getting multiple records
- incusd/network/ovn: Clear all existing records
- gomod: Update dependencies
- incusd/instance_post: Expand profiles in scriptlet context
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
HomeBrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.8.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.7 リリースのお知らせ¶
2024/11/15
はじめに ¶
Incus チームは、Incus 6.7 のリリースのアナウンスができてうれしいです!
このリリースは、スタンドアロンユーザーから、小規模なホームラボを実行するユーザー、大規模のクラスターユーザーまで、すべてのユーザー向けの機能と改良を加えた、非常にバランスの取れたリリースです。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能¶
Incus の Web インターフェースへの簡単なアクセス ¶
ユーザーが Incus の Web UI にアクセスする方法についての不満が頻繁に発生していました。
これは、Incus が初期状態ではネットワークをまったくリッスンせず、ネットワークをリッスンするように設定したあとは、HTTPS 経由でのみリッスンし、中央の OpenID Connect 認証サーバーがある環境で実行していない限りは、TLS クライアントを通してのみ認証されるからです。
確かに動作させることはできますが、通常は次のような手順になります:
1) Incus がネットワークをリッスンするようにする
2) Web ブラウザーから Incus へアクセスする
3) 証明書の警告を無視する
4) ブラウザー内からクライアント証明書を生成する
5) Incus CLI を通して公開鍵を信頼する
6) 公開鍵+秘密鍵のペアをユーザー証明書としてブラウザーにインポートする
7) ブラウザーをリロードし、そのユーザー証明書で正しく認証されることを期待する
今では、同じセキュリティをほぼ確保しながら、これらすべてを大幅に簡素化した代替手段があります。それは、incus webui
を実行するだけです。
このコマンドを実行すると、Incus クライアントツールは小さな HTTP ウェブサーバーを、ループバックデバイスのランダムなポートで実行します。このwebサーバーは、システム上の他のユーザーやソフトウェアが許可なく Incus とやりとりをするのを防ぐためのユニークなトークンにアクセスが制限されています。正しいトークンが提示されると、クライアントツールと同じ資格情報を使用して、Incus サーバーにプロキシーされます。
クラスターの自動リバランシング ¶
Incus クラスターは VM のライブマイグレーションをサポートし、非常に柔軟なスケジューリング・配置ロジックと、サーバーがダウンしたときの自動修復を備えているため、次のロジックのピースは、クラスターの自動リバランシングの機能を追加することでした。
これが可能になりました。次のいくつかの構成キーで設定できます:
cluster.rebalance.batch controls
は、1 ラウンドで再配置するインスタンス数cluster.rebalance.cooldown
は、インスタンスを再度移動できるようになるまでの待機時間を制御しますcluster.rebalance.interval
は、インスタンスの再配置を検討する頻度を制御しますcluster.rebalance.threshold
は、2 つのサーバー間のリバランスをトリガーするのに必要な負荷の見積もり量の差(パーセント単位)を制御します
Incus はクラスター内のそれぞれのサーバーのスコアを効果的に計算し、スコアがもっとも高いサーバーと低いサーバーを比較します。差がしきい値を超えると、2 つのサーバー間でインスタンス数を調整します。
スコアは現時点では、システム上の CPU 数に合わせて調整された 1 分間のロードアベレージと使用可能なメモリー量に基づいています。
ライブマイグレーションでは仮想マシンのみが移動され、プロジェクト内で適用される設定と制約の両方ですべてのマイグレーション要件を満たしているときだけ移動されます。
ドキュメント: https://linuxcontainers.org/incus/docs/main/howto/cluster_manage/#cluster-re-balancing
OCI コンテナの DHCP 更新¶
Incus で OCI コンテナを実行する場合のよくある問題は、ネットワーク構成に関係した問題です。OCI コンテナは一般的に、自身でネットワーク設定を行わず、起動時に完全に設定されたネットワークスタック(アドレス、ルート、DNS)を見つけることを期待します。
これを実現するために、Incus はインスタンスの初期化段階で、小さな DHCP クライアントを実行し、ネットワークを設定しています。しかし、これは 1 回限りのプロセスであり、DHCP リースが更新されないときに、DNS レコードが期限切れになるなどの問題が発生していました。
Incus 6.7 以降は、DHCP クライアントがバックグラウンドでコンテナに参加し、これらの問題を防ぐために、リースの更新を行えるようになりました。
部分的なインスタンスとボリュームの更新 ¶
Incus インスタンスのバックアップでよく使われる機能は、copy --refresh
を使うことです。これにより、Incus はソースとターゲットのインスタンスを効果的に比較し、現在の状態を同期する前に、欠けているスナップショットをターゲットに転送します。
これは非常にうまく機能しますが、バックアップサーバーでクリーンアップを実行してから、これらのスナップショットの一部を削除する方が適切な場合もあります。残念ながら次の更新で、保持する意味がない古いスナップショットであっても、削除したものが戻ってきてしまいます。
解決策の 1 つは、もちろんソースのスナップショットを削除することです。しかし、ソースがそれらのスナップショットを保持し、実質的にバックアップサーバーよりもたくさんの履歴を保持し続けている場合があります。
これに対応するため、新しい --refresh-exclude-older
フラグが追加されました。このフラグを --refresh
と一緒に与えると、最新の共有スナップショットが検索され、それ以降に作成されたスナップショットのみが転送され、実質的にターゲット上で欠落している古いスナップショットは無視されます。
カラムの設定とフォーマット、更新頻度が設定できるようになった incus top
¶
incus top
は --format
と --columns
をサポートするたくさんのコマンドの仲間に加わり、レンダリング方法とレンダリング対象をカスタマイズできるようになりました。
さらに、表示を更新する頻度を設定する --refresh
も使えるようになりました。
OVN ネットワーク上での DHCP アドレスの範囲のサポート ¶
ipv4.dhcp.ranges
設定オプションが OVN ネットワークにも適用されるようになりました。
これにより、ネットワークサブネットの一部のみを動的 IP 割当に使い、残りを固定 IP 割当や、他の用途に予約できるようになります。
物理ネットワークの親デバイスの変更¶
physical
タイプの管理ネットワーク上の親プロパティの値を変更できるようになりました。これにより、物理ネットワークが再構成されたり、物理ネットワークインターフェースが交換されたりしたときに必要になる可能性がある、OVN アップリンクネットワークの別のデバイスへの移動ができるようになりました。
QEMU スクリプトレットの追加の QMP ヘルパー ¶
QEMU スクリプトレットで、いくつかの追加関数が利用できるようになりました。
これには、run_qmp
の便利なラッパーである新しい run_command
が含まれており、簡単なコマンドを簡単に実行できます。
同様に、次のコマンドの簡単なラッパーがあります:
blockdev_add
blockdev_del
chardev_add
chardev_change
chardev_remove
device_add
device_del
netdev_add
netdev_del
object_add
object_del
qom_get
qom_list
qom_set
QEMU QMP コマンドの新しいログファイル ¶
仮想マシン上で、新しいログファイルである qemu.qmp.log
が利用できるようになりました。Incus と QEMU 間のほとんどのやりとりのログを保存します。
root@castiana:~# incus list v1 +------+---------+-----------------------+-------------------------------------------------+-----------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+---------+-----------------------+-------------------------------------------------+-----------------+-----------+ | v1 | RUNNING | 10.178.240.4 (enp5s0) | fd42:8384:a6f8:63a0:216:3eff:fe4d:5cad (enp5s0) | VIRTUAL-MACHINE | 0 | +------+---------+-----------------------+-------------------------------------------------+-----------------+-----------+ root@castiana:~# cat /var/log/incus/v1/qemu.qmp.log [2024-11-15T13:11:52-05:00] QUERY: {"execute":"query-cpus-fast"} [2024-11-15T13:11:52-05:00] REPLY: {"return": [{"thread-id": 443303, "props": {"core-id": 0, "thread-id": 0, "node-id": 0, "socket-id": 0}, "qom-path": "/machine/unattached/device[0]", "cpu-index": 0, "target": "x86_64"}]} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"netdev_add","arguments":{"fds":"/dev/net/tun.0:/dev/net/tun.1","id":"incus_eth0","type":"tap","vhost":true,"vhostfds":"/dev/vhost-net.0:/dev/vhost-net.1"}} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"device_add","arguments":{"addr":"00.0","bootindex":"1","bus":"qemu_pcie4","driver":"virtio-net-pci","id":"dev-incus_eth0","mac":"00:16:3e:4d:5c:ad","mq":"on","netdev":"incus_eth0","vectors":"6"}} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"blockdev-add","arguments":{"aio":"native","cache":{"direct":true,"no-flush":false},"discard":"unmap","driver":"host_device","filename":"/dev/fdset/0","locking":"off","node-name":"incus_root","read-only":false}} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"device_add","arguments":{"bootindex":"0","bus":"qemu_scsi.0","channel":"0","drive":"incus_root","driver":"scsi-hd","id":"dev-incus_root","lun":"1","serial":"incus_root"}} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"system_reset"} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"set-action","arguments":{"panic":"pause","reboot":"shutdown","shutdown":"poweroff"}} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"cont"} [2024-11-15T13:11:52-05:00] REPLY: {"return": {}} [2024-11-15T13:11:52-05:00] QUERY: {"execute":"query-status"} [2024-11-15T13:11:52-05:00] REPLY: {"return": {"status": "running", "running": true}}
配置スクリプトレットの get_instances_count
コマンド ¶
配置スクリプトレットに、新たに get_instances_count
関数を追加しました。
これを使用して、プロジェクト・ロケーションの組み合わせ内でのインスタンスの合計数や、トータルのインスタンスの合計数を簡単にカウントできます。また、完全に作成が完了しているインスタンスだけでなく、現在作成中のインスタンスを含めることもできます。
この追加の一部として、スクリプトレットに対して提供される候補リストにも小さな変更が加えられました。候補リストは、保持しているインスタンスの合計数に基づいて(もっとも使用頻度が低いものから高いものまで)ソートされるようになりました。
incus admin sql
内で --format
オプションのサポート ¶
incus admin sql
コマンドで、通常使える --format
オプションがサポートされるようになりました。
これで、単一の SQL カラムをクエリしたとき、--format=csv
を使うと、スクリプトで使える形式で生の値を取得できるので特に便利です。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- doc: Correct name of macvlan modes
- incusd/device/nic: Correct name of macvlan modes
- fix: fix slice init length
- internal/instance: fix live update VM's limits.memory configuration when use a percentage value
- incusd/instance/lxc: Remove restrictions on /run
- Translated using Weblate (German)
- Translated using Weblate (German)
- Translated using Weblate (Dutch)
- incus-simplestreams list -f json: output field names. fixes lxc#1308
- incus-agent: Add timeout for DNS query
- incusd/db/profiles: Support config caching
- incusd: Update calls to profile ToAPI
- incusd/cluster/profiles: Fix import shadowing
- incusd/instance/qemu: Don't fail on console retrival issue
- incusd/network: Make IsUsed configurable
- incusd/network: Update for IsUsed argument
- incusd/network/physical: Fix typo
- incusd/network/physical: Handle changes in parent value
- incus: Fix display of current project in projects list
- incus/admin/sql: Add support for
--format
- i18n: Update translation templates
- incusd/instance/common: Cleanup volatile on device add failure
- incusd/internal/server/instance/drivers: Add support for Chimera Linux edk2 pkg file names
- shared: Move internal "revert" library into shared
- incusd/network/bgp: Only advertise networks with BGP configuration
- incusd/cluster: Fix resource data caching
- incusd/cluster: Actually use YAML for resources cache
- shared: Update import path for "revert" library
- incusd/instance/lxc: Simplify idmapSize
- incusd/instance/lxc: Simplify findIdmap
- incusd/isntance/lxc: Respect restrict.idmap.size on un-isolated containers
- incusd/instance/lxc: Refactor findIdmap
- incusd/instance/lxc: Fix off by one idmap check
- shared: Move internal "ask" library into shared
- shared: Update import path for "ask" library
- shared: Add godoc comment for NewAsker
- doc/network/resolved: Add disabling DNSSEC and DNSOverTLS
- incusd/device/nic/bridged: Handle invalid configuration
- doc/explenation/instances: Update for application containers
- doc/howto/instances_create: Add an example of application container
- doc: Add Kubernetes to wordlist
- incusd/storage_volumes_snapshots: Respect pattern on manual creation
- tests: Add test for custom storage volume snapshots pattern
- incusd/main_forknet: Port DHCP client to nclient4
- incusd/main_forknet: Attach to the container PID namespace
- incusd/main_forknet: Handle background renewals
- shared/cgo: Add setproctitle
- incusd/main_forknet: Set process title
- doc/installing: Update for Chimera Linux
- shared/cgo: Don't use strlcpy
- incus/top: Fix usage
- shared/util: Add OpenBrowser
- incus/remote/proxy: Add token authentication
- incusd/api: Only expose UI if index.html exists
- incus: Add webui command
- i18n: Update translation templates
- incusd/scriptlet: Make set_target fail with invalid members
- tests: Update for scriptlet placement error handling
- incusd/instance/qmp: Make Run public
- incusd/scriptlet: Add useful QMP functions
- doc/ref/instance_options: Mention QEMU raw QMP commands
- incusd/network/ovn: Add support to ipv4.dhcp.ranges
- api: instances_scriptlet_get_instances_count
- incusd/scriptlet/instances: Fix error messages
- incusd/db/instances: Add GetInstancesCount
- incusd/scriptlet/instances: Add get_instances_count
- doc/cluster/placement: Add get_instances_count
- incusd/db/node: Sort members in GetCandidateMembers
- incusd/instances: Rely on candidateMembers being sorted
- incusd/db/node: Remove unused GetNodeWithLeastInstances
- incusd/db/node: Update tests to use GetCandidateMembers
- internal/server: Log QMP interaction to a file
- incusd/instance/qemu: Log QEMU command line
- tests: Update instance placement tests for new ordering
- incusd/instance_logs: Update log file list
- incusd/network/ovn/sb: Only monitor required tables
- incusd/network/ovn: Implement OVN SB event handlers
- incusd/instance/qmp: Handle disabling log file
- incusd/instance/qemu: Don't use QMP log for feature checks
- incusd/instance/lxc: Fix LXCFS per-instance path
- doc/idmap: Clarify subuid/subgid configuration
- incusd/instance/qmp: Fix logging with no log file
- client: Add a GetOIDCTokens() method
- cmd/project: Add get-current to show current project
- tests: Add get-current to show current project
- i18n: Update translation templates
- incus/file/create: Use SFTP client instead of file API
- internal/instance: Allow 0 as value to limits.cpu.nodes
- Translated using Weblate (Indonesian)
- Translated using Weblate (Indonesian)
- Translated using Weblate (French)
- internal/linux: Add NetlinkInterfaces
- incus-agent: Use NetlinkInterfaces
- incus/top: Add additional flags
- i18n: Update translation templates
- gomod: Update dependencies
- incus/monitor: Include location in cluster logging
- incusd/instance: Add ResourceUsage
- incusd/scriptlet/instance: Use ResourceUsage
- api: cluster_rebalance
- incusd/cluster/config: Add cluster re-balance configuration keys
- incusd/instance/config: Add volatile re-balance configuration key
- doc: Update configs
- incusd: Add cluster rebalance task
- incusd/internal: Add rebalance endpoint
- doc/cluster: Add mention of re-balancing
- api: custom_volume_refresh_exclude_older_snapshots
- shared/api: Add RefreshExcludeOlder to InstanceSource and StorageVolumeSource
- client: Add RefreshExcludeOlder flag to StoragePoolVolumeCopyArgs and InstanceCopyArgs
- incus: Adding refresh-exclude-older flag to 'copy' and 'storage volume copy'
- incusd/migration: Add refresh-exclude-older flag
- internal: Adding refresh-exclude-older flag implementation
- i18n: Update translation templates
- doc/rest-api: Refresh swagger YAML
- incus/top: Fix gofmt
- incusd/instance/drivers: Make Export return a pointer to metadata
- incusd/images: Update for changes to Export
- incusd/instances/publish: Fix base metadata
- incusd/bgp: Don't add duplicates
- incusd/network/bgp: Only skip BGP if unconfigured and not on OVN
- incusd/network: Move loadBalancerBGPSetupPrefixes to OVN driver
- incusd/network/ovn/sb: Add CheckLoadBalancerOnline
- incusd/network/ovn/nb: Add GetLoadBalancer and GetLoadBalancersByStatusUpdate
- incusd/network/ovn: Add load-balancer health event handler
- incusd/network/ovn: Don't advertise offline load-balancers on startup
- shared/subprocess: Allow overriding Cwd
- incusd/device/tpm: Fix handling of long instance names
- incusd/instance/qemu: Don't take over operations on console retrieval
- incusd/instance_post: Provide target project to relocation scriptlet
- incusd/cluster/request: Add new internal user-agent
- incusd/instances_post: Don't re-run placement on internal requests
- incusd/api: Handle new user agent
- incusd/instance_post: Pass in internal user agent during relocation
- incusd/instance/qemu: Don't overtake operations on console retrieval
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
HomeBrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.7.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.6 リリースのお知らせ¶
2024/10/03
はじめに ¶
Incus チームは、Incus 6.6 のリリースのアナウンスができてうれしいです!
Linux Plumbers Conference と、関連するイベントに出張したことで、リリースはそれほど忙しくありませんでした。
しかし、退屈なリリースからはほど遠いリリースです。通常のバグフィックスとパフォーマンスの改善に加え、多数の仮想マシンに対するすばらしい機能追加、クラスター化 LVM のサポートの改良、incus-migrate の改良、多数のネットワーク機能が追加されています。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
仮想マシンの OS 情報 ¶
Incus VM エージェントが拡張され、仮想マシンについての詳細を追加で取得できるようになりました。
stgraber@dakara:~$ incus info v1 Name: v1 Status: RUNNING Type: virtual-machine Architecture: x86_64 PID: 3753543 Created: 2024/09/24 10:02 EDT Last Used: 2024/10/03 11:29 EDT Started: 2024/10/03 11:29 EDT Operating System: OS: Ubuntu OS Version: 24.04.1 LTS (Noble Numbat) Kernel Version: 6.10.11-zabbly+ Hostname: v1 FQDN: v1 Resources: Processes: 35 Disk usage: root: 1.02GiB CPU usage: CPU usage (in seconds): 4 Memory usage: Memory (current): 374.78MiB Network usage: enp5s0: Type: broadcast State: UP Host interface: tap84ebf5ff MAC address: 00:16:3e:75:89:6e MTU: 1500 Bytes received: 3.13kB Bytes sent: 1.30kB Packets received: 27 Packets sent: 12 IP addresses: inet: 172.17.250.94/24 (global) inet6: 2602:fc62:c:250:216:3eff:fe75:896e/64 (global) inet6: fe80::216:3eff:fe75:896e/64 (link) lo: Type: loopback State: UP MTU: 65536 Bytes received: 5.92kB Bytes sent: 5.92kB Packets received: 80 Packets sent: 80 IP addresses: inet: 127.0.0.1/8 (local) inet6: ::1/128 (local)
コンテナではエージェントは実行しておらず、コンテナのファイルシステムから直接情報を取得するのは安全ではない可能性があるため、この情報は、現時点では仮想マシンでのみ利用可能です。
仮想マシンのコンソールヒストリー ¶
コンテナのコンソールアクセスは、対話的なアクセス(incus console
)と、非対話的なテキストログ(incus console --show-log
)の両方が利用でき、常に非常に柔軟に使えます。
しかし仮想マシンでは、QEMU がコンソールを対話的デバイスに送信すると同時にリングバッファーに記録できなかったため、少し制限された状況でした。
しかし、誰がコンソールに接続しているかどうかによって、QEMU が対話的バックエンドとリングバッファーを切り替えることで、機能させる方法を見つけました。
その結果、incus console --show-log
が仮想マシンでも動作するようになりました。
stgraber@dakara:~$ incus console --show-log v1 BdsDxe: loading Boot0006 "Ubuntu" from HD(1,GPT,B7DD04C0-15CE-482C-A6AC-7278FDA10CF6,0x800,0x32000)/\EFI\ubuntu\shimx64.efi BdsDxe: starting Boot0006 "Ubuntu" from HD(1,GPT,B7DD04C0-15CE-482C-A6AC-7278FDA10CF6,0x800,0x32000)/\EFI\ubuntu\shimx64.efi rootfs: clean, 58918/6393600 files, 1074908/13081339 blocks Ubuntu 24.04.1 LTS v1 ttyS0 v1 login:
クラスター化された LVM ボリュームグループの作成機能 ¶
Incus は、ここ数回のリリースでクラスター化された LVM をサポートしてきました。しかしこれまでは、共有ボリュームグループをユーザーが前もって作っておく必要がありました。
このリリースで、Incus から共有ブロックデバイスを直接指定し、ボリュームグループを作成できるようになりました。
root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server01 Storage pool demo-lvm pending on member server01 root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server02 Storage pool demo-lvm pending on member server02 root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server03 Storage pool demo-lvm pending on member server03 root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server04 Storage pool demo-lvm pending on member server04 root@server01:~# incus storage create demo-lvm lvmcluster Storage pool demo-lvm created
incus-migrate
の QCOW2 と VMDK サポート ¶
スタンドアローンの incus-migrate
ツールが、既存の QCOW2 と VMDK ベースの仮想マシンをインポートできるようになりました。これは、変換を処理するシステム上で、qemu-img
が利用可能であることに依存します。
root@dakara:~# incus-migrate The local Incus server is the target [default=yes]: Would you like to create a container (1) or virtual-machine (2)?: 2 Project to create the instance in [default=default]: Name of the new instance: foo Please provide the path to a disk, partition, or qcow2/raw/vmdk image file: /home/stgraber/demo/rhel9.qcow2 Does the VM support UEFI booting? [default=yes]: Does the VM support UEFI Secure Boot? [default=yes]: Instance to be created: Name: foo Project: default Type: virtual-machine Source: /home/stgraber/demo/rhel9.qcow2 Source format: qcow2 Additional overrides can be applied at this stage: 1) Begin the migration with the above configuration 2) Override profile list 3) Set additional configuration options 4) Change instance storage pool or volume size 5) Change instance network Please pick one of the options above [default=1]: Converting image "/home/stgraber/demo/rhel9.qcow2" to raw format before importing Instance foo successfully created
設定可能な macvlan モード ¶
これまで macvlan のモードは、常に bridged
に固定されていました。
これをカスタマイズできるようになり、vepa
、passthru
、private
など他のモードも使えるようになりました。
stgraber@dakara:~$ incus create images:ubuntu/24.04 c1 Creating c1 stgraber@dakara:~$ incus config device add c1 eth0 nic nictype=macvlan parent=enp35s0 mode=private name=eth0 Device eth0 added to c1 stgraber@dakara:~$ incus start c1
ロードバランサーのヘルス情報 ¶
最近、OVN ロードバランサーにヘルスモニタリングが追加されたため、API をさらに拡張してヘルス情報も公開することが理にかなっています。
root@server01:~# incus network load-balancer show default 172.31.254.50 description: "" config: healthcheck: "true" backends: - name: c1 description: "" target_port: "" target_address: 10.104.61.10 - name: c2 description: "" target_port: "" target_address: 10.104.61.11 ports: - description: "" protocol: tcp listen_port: "80" target_backend: - c1 - c2 - description: "" protocol: tcp listen_port: "22" target_backend: - c1 - c2 listen_address: 172.31.254.50 location: "" root@server01:~# incus network load-balancer info default 172.31.254.50 Backend health: c1 (10.104.61.10): - tcp/80: online - tcp/22: offline c2 (10.104.61.11): - tcp/80: offline - tcp/22: online
OVN ネットワークの外部インターフェース ¶
特定のサーバー上の外部物理インターフェースを、仮想 OVN ネットワークに接続できるようになりました。これにより、物理ネットワークと仮想ネットワーク間のギャップを埋められます。
root@server01:~# incus network set bar bridge.external_interfaces=foo --target server02 root@server01:~# incus network info bar Name: bar MAC address: 00:16:3e:e6:b6:10 MTU: 1422 State: up Type: broadcast IP addresses: inet 10.179.82.1/24 (link) inet6 fd42:3f01:28ef:4257::1/64 (link) Network usage: Bytes received: 0B Bytes sent: 0B Packets received: 0 Packets sent: 0 OVN: Chassis: server01 Logical router: incus-net25-lr root@server01:~# ovn-nbctl lsp-list incus-net25-ls-int e7070089-c979-4bc1-b6f2-1f63008af44b (incus-net25-external-n2-foo) 65eba7f1-e150-4dce-b054-180e389e4d58 (incus-net25-ls-int-lsp-router)
クラスターの退避・リストアの並列化 ¶
クラスターの退避とリストアは、特に多数のインスタンスを実行しているクラスターでは、かなり長いプロセスになる可能性があります。
これを改善するために、このプロセスを自動的に並列化するようになりました。
影響を限定的にするために、これはかなり慎重に行われます。16 CPU スレッドごとに追加の並列の移行が追加されるだけです。そのため、512 スレッドを備えた強力なサーバーでも、同時に移動するのは 32 インスタンスだけです。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incus/network: Fix capitalization in network list
- i18n: Update translation templates
- incusd/storage/drivers/lvm: Cache VG extent size
- incusd/instance/qemu: Always re-generate the nvram symlink
- incusd/network/ovn: LSP dynamic allocation can't be done per protocol
- incusd/instance/qemu: Set O_DIRECT when passing in FDs
- Translated using Weblate (French)
- incusd/apparmor: Only initialize with the daemon
- incusd/instance/qemu: Make O_DIRECT conditional on directCache
- incusd/instance/qemu: Force threads I/O mode for unsafe/writeback
- incusd/instance/qemu: Move away from deprecated fd: syntax
- doc: Fix network load-balancer typo
- incusd/network/ovn: Fix group of load-balancer config keys
- doc: Update metadata
- incusd/apparmor: Add sys_rawio for QEMU 9.1
- doc: Fix limits.memory default value unit
- incusd/storage/zfs: Make sure the zvol is a block device
- incusd/apparmor: Don't attempt unloading profiles when apparmor is disabled
- internal/instance: Fix unit for limits.memory
- doc: Update metadata
- Added translation using Weblate (Norwegian Bokmål)
- Translated using Weblate (Norwegian Bokmål)
- shared/archive: Add VMDK images to list of supported formats
- doc/installing: Add Rocky Linux 9
- cmd/incus-migrate: Report detected source format when importing VM image
- incus/storage_volume: Fix snapshot listing
- i18n: Update translation templates
- Added translation using Weblate (Indonesian)
- internal/server/instance/drivers: Disable 9p and vsock for Windows VMs
- cmd/incus-migrate: Convert qcow2 and vmdk images to raw format before importing
- doc: List image formats supported by incus-migrate
- scripts: fix empty-incus.sh instances delete
- incusd/network/ovn: Properly handle lack of a protocol on LB checker
- doc/installing: Add link to Arch Wiki for Incus
- internal/server/instance/drivers: Cleanup spice socket when VM stops
- internal/server/instance/drivers: Switch default backend for QEMU console to ringbuf
- incus/console: Add completion
- internal/server/instance/drivers/qmp: Add commands for reading a ringbuf and swaping backends for chardevs
- internal/server/instance/drivers: Implement ConsoleLog() for qemu driver
- internal/server/instance/drivers: Add functions to switch console's backend
- cmd/incusd: Allow VMs to pull console history similar to containers
- cmd: Properly handle
--project
in error messages - i18n: Update translation templates
- incusd/project: Don't fail project deletion on authorizer
- incusd/project: Don't fail project rename on authorizer
- incus-user: Handle existing network
- incusd/networks: Return HTTP Conflict on existing network
- incusd/networks: Apply project restrictions to list of network names
- incusd/auth/tls: Allow access to inherited resources
- instance/config: Add @startup to documentation
- doc: Update metadata
- shared/validate: Better validate simple CPU limits
- incusd/operations: Fix operation cancelation
- incusd/storage_volumes: Handle rename of volumes with sub-paths
- incusd/storage/utils: Only show actual errors in growFileSystem
- internal/server/instance/drivers: Don't return an error if console log file doesn't exist
- incusd/instance/qemu: Properly plumb I/O limits
- incusd/apparmor: Allow all mounts in unprivileged containers
- cleanup: Replace use of os.IsNotExist(err) with errors.Is(err, fs.ErrNotExist)
- incusd/network: Allow to use
dns.search
when only IPv4 is enabled - incusd/apparmor: Remove nosymfollow check (unused)
- doc: add notes for Nvidia gpu usage when installing in OpenSUSE
- api: instances_state_os_info
- shared/api: Add OSInfo to InstanceState
- doc/rest-api: Refresh swagger YAML
- cmd/incus-agent: Populate OS information when returning instance state
- cmd/incus: Print OS info from state, if available
- i18n: Update translation templates
- tests: Don't over-provision test volume
- Translated using Weblate (German)
- cmd/incus-migrate: Don't copy converted VM image
- incusd/instance_console: Check result of type assertion
- incusd/images: Fix image access through secret
- doc: add prerequisites section for building documentation
- Translated using Weblate (German)
- api: network_load_balancer_state
- shared/api: Add NetworkLoadBalancerState
- incusd/network/ovn/sb: Add GetServiceHealth
- incusd/network: Add LoadBalancerState
- incusd/network/load-balancer: Add API for state
- doc/rest-api: Refresh swagger YAML
- client: Add GetNetworkLoadBalancerState
- incus/network_load_balancer: Add info command
- i18n: Update translation templates
- incusd: Only emit image-created if an image was actually created
- incusd/instances: Call placement scriptlet when target specified
- internal/server/instance/drivers/qmp: Ensure that the device passed to RingbufRead() is a ring buffer
- internal/server/instance/drivers: Don't return an error if VM's console device isn't a ringbuf
- internal/server/instance/drivers: Don't conflict with live migration operation
- incus/alias: Handle quoted values
- incus/alias: Stable sorting of alias names
- incusd/instance/qemu: Fix issues with old NVRAM
- incusd/device/nic: Add configuration for macvlan mode
- doc/devices/nic: Add mode for macvlan devices
- api: instance_nic_macvlan_mode
- alpine linux enable edge repositories
- cmd/incusd: gateway parameter wasn't actually used anywhere
- cmd/incusd: Run cluster evacuate and restore in parallel
- formatting: Move goroutines to their own functions
- Translated using Weblate (German)
- internal/instance: Allows the VM's limits.memory configuration to be set to a percentage value
- incusd/network/ovn: Fix CIDR size check
- incusd/instance/lxc: Mount /run if the path exists
- doc: Add uncomment to the word list
- incus/file/delete: Use SFTP client instead of file API
- incus/file/delete: Add --force flag
- i18n: Update translation templates
- doc/network/resolved: Fix systemd unit
- internal/instance: Fix doc for boot.host_shutdown_action
- doc: Update metadata
- client: Capture original OCI image identifier
- incus/file/delete: Cache the SFTP client
- shared/subprocess: Add TryRunCommandAttemptsDuration() which allows the caller to specify the number of attempts and duration between each attempt
- internal/server/storage/drivers: Add support for creating shared VGs
- doc: Incus can now create a shared VG directly
- api: storage_lvm_cluster_create
- Translated using Weblate (Indonesian)
- incusd/network/ovn: Allow adding external interfaces to an OVN network
- doc/network/ovn: Add description for bridge.external_interfaces parameter
- api: network_ovn_external_interfaces
- incusd/network: De-duplicate external interfaces validation
- gomod: Update dependencies
- incusd/instance/qemu: Simplify console switching
- incusd/instance/qemu: Handle existing console connections
- incusd/instance/qemu: Fix shutdown race
- doc/devices/proxy: Fix incorrect bind= example
- incusd/network/bridge: Bring up external interfaces
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
HomeBrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.6.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.5 リリースのお知らせ¶
2024/09/06
はじめに ¶
Incus チームは、Incus 6.5 のリリースのアナウンスができてうれしいです!
このリリースでは、パフォーマンスに重点が置かれました。多数のプロファイルやデバイスを解決するようなコストの掛かる内部呼び出しが大幅に最適化され、パフォーマンスが最大 20 〜 30 倍向上しました。同様に、サーバーごとに数千のインスタンスを持つシステムの処理が大幅に改善され、起動チェックが数十分から数十秒に短縮されました。
Incus 6.5 は、単なるバグフィックスのリリースではなく、多くの新機能やその他の改善も導入しています。CLI エクスペリエンスをより一貫性のあるものにし、仮想マシン上で低レベルのアクションをより簡単に実行できるようにし、アプリケーションコンテナユーザの生活を改善し、OVN ユーザのために多くの素晴らしい新機能を提供するなど、このリリースはすべての人に何かを提供します!
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
インスタンスの自動再起動 ¶
Incus でのアプリケーションコンテナのサポートを初めて公表して以来良く寄せられる要望に、インスタンスが終了したときに、自動的に再起動する機能があります。これにより、アプリケーションのクラッシュやリロードの処理が容易になります。
この機能は、新たに追加された boot.autorestart
設定キーで設定します。true
に設定すると、Incus は 1 分間に最大 10 回まで、特定のインスタンスの再起動を試行します。
ユーザーがインスタンスのシャットダウンや停止をリクエストしたとしても、この自動再起動ロジックはトリガーされません。
stgraber@castiana:~$ incus launch docker:nginx nginx -c boot.autorestart=true Launching nginx stgraber@castiana:~$ incus info nginx | grep PID PID: 178789 stgraber@castiana:~$ sudo kill -9 178789 stgraber@castiana:~$ incus list nginx +-------+---------+----------------------+-----------------------------------------------+-----------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------+---------+----------------------+-----------------------------------------------+-----------------+-----------+ | nginx | RUNNING | 10.178.240.76 (eth0) | fd42:8384:a6f8:63a0:216:3eff:fef4:5a27 (eth0) | CONTAINER (APP) | 0 | +-------+---------+----------------------+-----------------------------------------------+-----------------+-----------+ stgraber@castiana:~$
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/instance_options/#boot-related-options
すべての list コマンドでカラム選択が可能に ¶
ここ数回のリリースで、incus
CLI コマンドの一貫性の向上に取り組んできました。これは、すべての list
コマンドで --format
オプションをサポートすることから始まりました。そして、今回のリリースでは、すべての list
コマンドが --columns
もサポートするようになりました。
これにより、簡単に出力をカスタマイズできるだけでなく、--format=csv
と --column=
の両方を組み合わせて、必要な列だけを選択することで、incus
コマンドを使ったスクリプト作成がはるかに簡単になります。
stgraber@castiana:~$ incus snapshot list v1 --columns=nT --format=csv snap0,2024/09/06 15:04 EDT snap1,2024/09/06 15:04 EDT
QMP コマンドフックとスクリプトレット ¶
Incus は、現時点では仮想マシンの実行は QEMU に依存しています。
Incus が QEMU とやりとりする方法は、実際には次の 3 つの異なるメカニズムを通して行うため、ときどき少し複雑になる可能性があります:
- QEMU コマンドライン
- QEMU 設定ファイル
- QEMU マシンプロトコル(QMP)
通常は、コマンドラインの汚染を可能な限り防ぐため、使用は最小限に抑えられていますが、raw.qemu
を通して、ユーザーが追加の引数を渡すことができるようになっています。
ライブアップデートが不要なデバイスや、ホットプラグやホットリムーブが不要なデバイスでは、QEMU 設定ファイルの使用をおすすめします。これは簡単にテンプレート化でき、テストが非常に簡単です。Incus には、設定ファイルの内容を拡張したり、上書きするために使える raw.qemu.conf
設定オプションがあります。
そして、ホットプラグ可能なもの、つまり実質、ディスク、ネットワークインターフェース、USB デバイスや、その他の PCI デバイスすべてに使える QMP があります。QEMU チームは、徐々に設定ファイルを廃止しようとしていますので、VM 設定の多くを徐々に QMP に移行していくつもりです。
これまでのところ、QMP の主な問題は、QEMU のコマンド ラインや構成ファイルとは異なり、非常に不透明であることです。構成された内容を簡単に確認することはできず、これらのオブジェクトはすべて QEMU の起動後に構成されるため、既存のメカニズムを使用してそれらを上書きしたり再構成したりすることはできませんでした。
しかし、いくつかの新しい構成オプションのおかげで、状況が変わりました:
raw.qemu.qmp.early
raw.qemu.qmp.pre-start
raw.qemu.qmp.post-start
raw.qemu.scriptlet
最初の 3 つは、QMP コマンドの JSON リストを受け取ります。通常、QMP コマンドはすべて JSON でエンコードされているため、インスタンス構成に多数のカスタム コマンドを簡単に追加できます。コマンドは、指定された時間のいずれかで順番に実行されます。
early
は Incus が QMP を通じて何かを追加する前に実行され、pre-start
は Incus が QMP を通じてすべてのデバイスを追加した後に実行され、post-start
は QEMU が VM を起動するように指示した直後に実行されます。
raw.qemu.scriptlet
はさらに柔軟なオプションで、qemu_hook
という関数を定義し、stage
を引数として渡すスクリプトレット(Python のような構文)を受け取ります。そのステージは early
、pre-start
、または post-start
のいずれかです。これと raw.qemu.qmp
オプションの違いは、スクリプトレットがコマンド応答を処理でき、それに反応するロジックを持つことができることです。
つまり、この QEMU スクリプトレットは run_qmp
コマンドを呼び出し、カスタム QMP コマンドを渡し、その戻り値を読み取り、必要に応じてさらにコマンドを発行して、VM を動的に再構成できます。
これは非常に低レベルのメカニズムであり、非常に特殊なケースで熟練したユーザーのみが使用することを想定していることに注意してください。他の raw
構成キーと同様に、その使用は Incus チームによって事実上サポートされておらず、信頼できないプロジェクトでは無効にしておく必要があります。
仮想マシンでの動的なディスクのリサイズ ¶
VM ルート ディスクまたは接続されたディスクのサイズを変更し、その変更を VM に通知できるようになりました。これにより、オペレーティング システムによってディスクのサイズが更新され、ユーザーは VM を再起動することなく、追加スペースをすぐに利用できるようになります。
stgraber@castiana:~$ incus exec v1 bash root@v1:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 10G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi └─sda2 8:2 0 9.9G 0 part / root@v1:~# exit stgraber@castiana:~$ incus config device override v1 root size=20GiB Device root overridden for v1 stgraber@castiana:~$ incus exec v1 bash root@v1:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 20G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi └─sda2 8:2 0 9.9G 0 part / root@v1:~#
PCI デバイスのホットプラグ ¶
VM 上の PCI デバイスの追加と削除が動的に行えるようになりました。
これは、NIC、GPU、ディスクデバイスで見られる動作と一致するようになりました。
OVN ロードバランサーヘルスチェック ¶
Incus の OVN ロードバランサーサポートは、これまでのところかなり基本的なサポートです。基本的には、バックエンドのモニタリングなしで、ターゲットのトラフィックを必要最低限にロードバランシングすることだけに限定されています。
しかし、OVN のロードバランサーヘルスチェックの初期サポートで、この状況は変わりつつあります。
この機能は、ロードバランサーに対する複数の設定キーを通して設定されます:
healthcheck
=> ヘルスチェックの有効化healthcheck.failure_count
=> バックエンドが機能していないとみなす失敗した回数healthcheck.interval
=> バックエンドをチェックする間隔(秒)healthcheck.success_count
=> バックエンドがオンラインであるとみなす成功した回数healthcheck.timeout
=> バックエンドが機能していないとみなすまでどれくらい待つか
healthcheck
のみが必須の設定で、他のすべての設定には適切なデフォルト値が設定されています。
root@server01:~# incus launch images:ubuntu/24.04 c1 Launching c1 root@server01:~# incus exec c1 -- apt-get install --yes nginx Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: nginx-common Suggested packages: fcgiwrap nginx-doc ssl-cert The following NEW packages will be installed: nginx nginx-common 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 552 kB of archives. After this operation, 1596 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 nginx-common all 1.24.0-2ubuntu7 [31.2 kB] Get:2 http://archive.ubuntu.com/ubuntu noble/main amd64 nginx amd64 1.24.0-2ubuntu7 [521 kB] Fetched 552 kB in 1s (619 kB/s) Preconfiguring packages ... Selecting previously unselected package nginx-common. (Reading database ... 16176 files and directories currently installed.) Preparing to unpack .../nginx-common_1.24.0-2ubuntu7_all.deb ... Unpacking nginx-common (1.24.0-2ubuntu7) ... Selecting previously unselected package nginx. Preparing to unpack .../nginx_1.24.0-2ubuntu7_amd64.deb ... Unpacking nginx (1.24.0-2ubuntu7) ... Setting up nginx (1.24.0-2ubuntu7) ... Setting up nginx-common (1.24.0-2ubuntu7) ... Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service. root@server01:~# incus launch images:ubuntu/24.04 c2 Launching c2 root@server01:~# incus list +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | LOCATION | +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | c1 | RUNNING | 10.104.61.2 (eth0) | fd42:73ae:9013:c530:216:3eff:feff:ddf2 (eth0) | CONTAINER | 0 | server01 | +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | c2 | RUNNING | 10.104.61.3 (eth0) | fd42:73ae:9013:c530:216:3eff:fec4:611 (eth0) | CONTAINER | 0 | server02 | +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ root@server01:~# incus network load-balancer create default 172.31.254.50 Network load balancer 172.31.254.50 created root@server01:~# incus network load-balancer backend add default 172.31.254.50 c1 10.104.61.2 root@server01:~# incus network load-balancer backend add default 172.31.254.50 c2 10.104.61.3 root@server01:~# incus network load-balancer port add default 172.31.254.50 tcp 80 c1,c2 root@server01:~# incus launch images:ubuntu/24.04 t1 Launching t1 root@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 nc: connect to 172.31.254.50 port 80 (tcp) failed: Connection refused root@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 nc: connect to 172.31.254.50 port 80 (tcp) failed: Connection refused root@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded! root@server01:~# incus network load-balancer set default 172.31.254.50 healthcheck=true root@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded! ^Croot@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded! ^Croot@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded! ^Croot@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded! ^Croot@server01:~# incus exec t1 -- nc -v 172.31.254.50 80 Connection to 172.31.254.50 80 port [tcp/http] succeeded!
ドキュメント: https://linuxcontainers.org/incus/docs/main/howto/network_load_balancers/
OVN インターコネクトでの ECMP サポート ¶
OVN インターコネクトのネットワーク統合サポートがいくつかの点で拡張されました:
ovn.transit.pattern
設定オプションが、新たにpeerName
変数をサポートするようになりました- 同じネットワーク統合をターゲットとするネットワーク上に、複数のピアを持てるようになりました
- トランジットスイッチ上の IP 割り当てが、ランダムなサブネットに依存せず、OVN データベースに直接記録されるようになりました
この結果、デフォルトの core.transit.pattern
を変更してテンプレートに peerName
を含め、同じインターコネクションを指す複数のピアをネットワークに追加できるようになりました。
これにより、内部的には複数のトランジット スイッチが作成され、参加しているすべてのシステムでピア名が一致している限り、トラフィックは ECMP を通じてそれらのスイッチ間で分散されます。
これにより、インターコネクトトラフィックの非常に効果的な負荷分散が可能になります。
root@chulak:~# incus list ic +---------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | LOCATION | +---------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | ic-test | RUNNING | 10.47.238.2 (eth0) | fd42:4a11:5600:6807:216:3eff:feb5:2c79 (eth0) | CONTAINER | 0 | chulak | +---------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ root@chulak:~# incus exec ic-test bash root@ic-test:~# ping 10.170.69.2 PING 10.170.69.2 (10.170.69.2) 56(84) bytes of data. From 45.45.148.162 icmp_seq=1 Destination Net Unreachable --- 10.170.69.2 ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms root@ic-test:~# root@chulak:~# incus network peer create ovn-ic-test peer1 dcmtl --type=remote Network peer peer1 created root@chulak:~# incus network peer create ovn-ic-test peer2 dcmtl --type=remote Network peer peer2 created root@chulak:~# incus network peer create ovn-ic-test peer3 dcmtl --type=remote Network peer peer3 created root@chulak:~# incus network peer create ovn-ic-test peer4 dcmtl --type=remote Network peer peer4 created root@chulak:~# incus exec ic-test bash root@ic-test:~# ping 10.170.69.2 PING 10.170.69.2 (10.170.69.2) 56(84) bytes of data. 64 bytes from 10.170.69.2: icmp_seq=1 ttl=62 time=11.8 ms 64 bytes from 10.170.69.2: icmp_seq=2 ttl=62 time=6.01 ms --- 10.170.69.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 6.012/8.930/11.848/2.918 ms
ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/network_integrations/
OVN NICでのプロミスキャスモード ¶
OVN NIC で新しい security.promiscuous
構成キーが利用できるようになりました。
これを有効にすると、宛先が不明な MAC アドレスである OVN トラフィックはすべて OVN NIC に送信されるようになります。
これの主な用途は、ネストされたコンテナまたは VM を、独自の専用ポートを持たずに親 OVN ネットワーク上に直接配置するネストされた環境です。
無差別モードでは大量の不要なネットワーク トラフィックが NIC に到達するため、これは通常、開発/テストのユースケースです。
root@server01:~# incus launch images:ubuntu/24.04 t1 Launching t1 root@server01:~# incus exec t1 bash root@t1:~# ip l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 48: eth0@if49: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1422 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:f3:d4:3e brd ff:ff:ff:ff:ff:ff link-netnsid 0 root@t1:~# ip link set eth0 address 00:16:3e:f3:d4:30 root@t1:~# ip -4 a add dev eth0 10.104.61.100/24 root@t1:~# ping 10.104.61.1 PING 10.104.61.1 (10.104.61.1) 56(84) bytes of data. ^C --- 10.104.61.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1009ms root@t1:~# exit root@server01:~# incus config device override t1 eth0 security.promiscuous=true Device eth0 overridden for t1 root@server01:~# incus exec t1 bash root@t1:~# ip link set eth0 address 00:16:3e:f3:d4:30 root@t1:~# ip -4 a add dev eth0 10.104.61.100/24 root@t1:~# ping 10.104.61.1 PING 10.104.61.1 (10.104.61.1) 56(84) bytes of data. 64 bytes from 10.104.61.1: icmp_seq=1 ttl=254 time=1.20 ms ^C --- 10.104.61.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.197/1.197/1.197/0.000 ms root@t1:~#
ドキュメント: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-ovn
OVN NIC で IP 割り当てをオフにする機能 ¶
OVN NIC のもう 1 つの新しいオプションは、IP 割り当てを完全にオフにする機能です。
これは、プロミスキャス NIC は通常、自身の IPv4 と IPv6 アドレスを持つ必要がないという、前述のケースに関連しています。これを処理するために、ipv4.address
と ipv6.address
を none
に設定して、割り当てを無効にできるようになりました。
OVN では、1 つのプロトコルだけを無効化できないので、これを機能させるには、現在両方のキーを none
に設定しなければなりません。
root@server01:~# incus config device set t1 eth0 ipv4.address=none ipv6.address=none root@server01:~# incus start t1 root@server01:~# incus exec t1 bash root@t1:~# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever root@t1:~#
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-ovn
OIDC スコープリクエストのカスタマイズ ¶
リクエストされる OpenID Connect スコープのリストを設定できるようになりました。
サーバー設定で oidc.scopes
を設定すると、デフォルトの openid, offline_access
のデフォルトが上書きされ、profile
のようなスコープを通して追加情報を取得するのに役立ちます。
ドキュメント: https://linuxcontainers.org/incus/docs/main/server_config/#openid-connect-configuration
設定可能な LVM PV のメタデータサイズ ¶
数千の論理ボリュームを含む、非常に非常に大きな LVM ボリュームグループは、予約されたメタデータサイズを超過する可能性があります。
これは、LVM シンプロビジョニングプール(デフォルト)では、すでに設定可能でしたが、シック(thick)プロビジョニングでは、相当する設定がありませんでした。
lvm.metadata_size
設定キーを設定し、LVM のデフォルトを上書きできるようになりました。
これは作成時のみ実行できることに注意してください。
stgraber@castiana:~$ incus storage create demo lvm lvm.use_thinpool=false Storage pool demo created stgraber@castiana:~$ sudo vgs -o name,mda_size VG VMdaSize demo 1020.00k stgraber@castiana:~$ incus storage delete demo Storage pool demo deleted stgraber@castiana:~$ incus storage create demo lvm lvm.use_thinpool=false lvm.metadata_size=100MiB Storage pool demo created stgraber@castiana:~$ sudo vgs -o name,mda_size VG VMdaSize demo <101.00m stgraber@castiana:~$ incus storage delete demo Storage pool demo deleted
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/storage_lvm/#configuration-options
設定可能な OVS ソケットパス ¶
OpenVSwitch が通常のアドレスで動作しないケースがいくつか存在します。
もっとも一般的なケースは、OpenVSwitch ソケットが /var/snap/microovn/common/...
に保存されている MicroOVN ユーザーです。
これまで、このようなユーザーは、Incus が適切にソケットに接続できるように、/run
内の OVS ソケットを取得するために、いくつかの手順を踏む必要がありました。
この変更により、network.ovs.connection
設定キーを有効な OVSDB 接続文字列に設定し、それを介して Incus が OpenVSwitch にアクセスできるようになりました。デフォルト値は unix:/run/openvswitch/db.sock
です。
ドキュメント : https://linuxcontainers.org/incus/docs/main/server_config/#server-options-misc
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incus/remote/list: Add support for column selection
- i18n: Update translation templates
- incus/cluster/group/list: Add support for column selection
- i18n: Update translation templates
- Translated using Weblate (Chinese (Simplified))
- Translated using Weblate (Chinese (Simplified))
- client: import examples for docs
- client: name var for docs
- client: alias & server/procotol default for docs
- incusd/storage: Fix UsedBy values for sub-directory volumes
- incusd/instance: Fix backup file locking issue
- incusd/projects: Don't fail project creation on missing pools
- incusd/device/pci: Allow hotplug
- incusd/instance/qmp: Add CheckPCIDevice
- incusd/instance/qemu: Use monitor.CheckPCIDevice
- incusd/instance/qemu: Tweak comments on deviceStart
- incusd/instance/qemu: Add hotplug support for generic PCI
- client: fix typo in example
- Translated using Weblate (Chinese (Simplified))
- incus/operation/list: Add support for column selection
- i18n: Update translation templates
- doc/firewalld: Update Docker link
- incus/network/zone/list: Add support for column selection
- i18n: Update translation templates
- incusd/instance/drivers/qmp: Export RunJSON
- api: qemu_raw_qmp
- incusd/instance: Add raw QMP config options
- doc: Add QMP to wordlist
- doc: Update configs
- incusd/instance/qemu: Add QMP hooks
- incusd/project: Update low-level properties
- incus/network/forward/list: Add support for column selection
- i18n: Update translation templates
- Translated using Weblate (Chinese (Simplified))
- cmd/incusd: Add hostname to dhcp request
- incus/network/list-leases: Add support for column selection
- i18n: Update translation templates
- Translated using Weblate (Chinese (Simplified))
- doc: Update incus_alias.md
- incus/network/list-allocations: Add support for column selection
- i18n: Update translation templates
- api: network_load_balancer_health_check
- incusd/network/ovn: Simplify CreateLoadBalancer
- incusd/network: Update for CreateLoadBalancer changes
- incusd/network/ovn: Add healthcheck support in LoadBalancer
- incusd/network: Add healthcheck config options
- incusd/network/ovn: Add healthcheck options
- incusd/network/ovn: Reserve the last IPv4 address
- doc/network/load_balancer: Add configuration options
- doc: Update configs
- incus/admin/init: Prompt for dir storage location
- tests: Update for extra step in init
- i18n: Update translation templates
- incus/network/integration/list: Add support for column selection
- i18n: Update translation templates
- incus/storage/bucket/list: Add support for column selection
- i18n: Update translation templates
- api: oidc_scopes
- incusd/config: Add oidc.scopes
- incusd/oidc: Add custom scopes support
- doc: Update configs
- incus/storage/bucket: Add support for column selection in key list
- i18n: Update translation templates
- incus/snapshot/list: Add support for column selection
- i18n: Update translation templates
- incusd/storage/lvm: Fix resize logic to conserve LV state
- incusd/network/ovn: Set missing send_periodic field
- incusd/profiles: Improve listing performance
- incusd/server/db: Increase transaction deadline to 30s
- incusd/db/profiles: Support device cache in ToAPI
- incusd: Pass profile device cache to ToAPI calls when possible
- incusd/db/instances: Support device cache to ToAPI
- incusd: Pass instance device cache to ToAPI calls when possible
- incusd/db/instances: Allow passing profile devices to instance ToAPI
- incusd: Pass profile device cache to instance ToAPI calls when possible
- incusd/instances: Remove old retry logic
- incusd/network_integration: Fix typo in doc string
- doc: Update configs
- incusd/main_forknet: Tweak DHCP client to apply DNS first
- incusd/network/ovn: Use stable random for IC gateway chassis priority
- api: network_integrations_peer_name
- incusd/network_integrations: Add peerName to ovn.transit.pattern
- incusd/network/ovn: Expose peerName to ovn.transit.pattern
- doc: Update configs
- incus/cluster/list-tokens: Add support for column selection
- i18n: Update translation templates
- incusd/storage_volumes_state: Handle unsupported response from drivers
- incusd/db/cluster: Remove network integration/peer unique index
- incusd/db/cluster: Update schema
- lxd-to-incus: Handle Incus socket in /run/incus/
- incusd/network/ovn: Record transit subnets
- incusd/network/ovn: Add transit switch addresss allocation functions
- incusd/network/ovn: Setup transit switch allocations
- incusd/auth/openfga: Avoid deprecated ApiSchema and ApiHost
- incusd/auth: Re-organize entitlement list
- incusd/auth/openfga: Sort entries in openfga model
- incusd/auth/openfga: Add missing network integration permission
- incusd/auth/openfga: Require admin level to create projects
- incusd/auth/openfga: Rebuild model
- incusd/auth: Fix network integration object
- incus/config/trust/list-tokens: Add support for column selection
- i18n: Update translation templates
- incus/network/peer/list: Add support for column selection
- i18n: Update translation templates
- incus/network/load-balancer/list: Add support for column selection
- i18n: Update translation templates
- Translated using Weblate (Chinese (Simplified))
- Change Cloud Init "user" to "users"
- shared/api: Fix incorrect struct naming for volume backups
- client: Update for fixed volume backup structs
- incus: Update for fixed volume backup structs
- incusd: Update for fixed volume backup structs
- incusd/storage_volume_backup: Fix swagger references
- incusd/storage_bucket_backup: Fix swagger references
- doc/rest-api: Refresh swagger YAML
- incusd/device/nic: Make burst rate dynamic for ingress traffic
- incusd/storage/lvm: Allow live resize
- incusd/storage/zfs: Allow online resize of ZFS block volumes
- incusd/device/disk: Add callback on resize
- incusd/instance/drivers/qmp: Add resize handling
- incusd/instance/qemu: Add disk resize handling
- incusd/node/config: Add network.ovs.connection
- doc: Switch /var/run to just /run
- incusd/cluster/config: Switch from /var/run to /run
- incusd/instance/agent-loader: Don't hardcode path
- incusd/syslog: Update OVS path
- doc: Update configs
- incusd/network/ovs: Make OVS database configurable
- incusd/state: Add OVS function
- incusd: Set OVS function on State
- incusd: Port to state.OVS
- incusd: Reset OVS as needed
- incusd/network/ovn: Limit MAC_Binding explosion
- incusd/network/ovn: Add ARP limits to updated routers
- incusd/network/ovn: Wait a bit longer for northd to allocate addresses
- incusd/apparmor: Don't constantly query the version and cache
- incusd/storage/driver/dir: Don't needlessly re-apply project id on quota changes
- incusd/storage/quota: Don't fail on missing paths
- incusd/storage/lvm: Retry setactivation skip for busy environments
- api: qemu_scriptlet
- incusd/instance: Add qemu scriptlet config options
- incusd: Move QEMU default values to a subpackage
- incusd/scriptlet: Move the logger definition
- incusd/scriptlet: Add helper functions
- incusd/scriptlet: Add Unmarshal function
- incusd/scriptlet: Add qemu scriptlet
- incusd/project: Update low-level properties
- doc: Update metadata
- incusd/scriptlet: Remove deprecated starlark.SourceProgram
- Makefile: Switch minimum Go to 1.22
- gomod: Update dependencies
- doc: Update requirements
- incusd/instance/drivers/qemu: Fix node name overflow logic
- incusd/instance/drivers/qemu: Add missing node name handling
- incusd/api_internal: Add API to notify volume resizes
- incusd/cluster: Fix redirect loop with shared volumes across multiple servers
- incusd/storage/backend: Notify instances following block custom volume resize
- api: instance_auto_restart
- incusd/instance: Add boot.autorestart
- doc: Update metadata
- incusd/instance/drivers: Implement shouldAutoRestart
- incusd/instance/drivers/lxc: Implement boot.autorestart
- incusd/instance/drivers/qemu: Implement boot.autorestart
- tests: Validate autorestart logic
- client: Fix error handling in push mode copy
- incusd/network/ovn: Fix send_periodic syntax
- incusd/project: Validate group names
- incusd/db: Confirm cluster group validity during placement
- doc/cluster_group: Mention renaming groups
- api: storage_lvm_metadatasize
- doc/storage_lvm: Add lvm.metadata_size
- incusd/storage/lvm: Add lvm.metadata_size
- incusd/storage/zfs: Only attempt to load the module if the tools exist
- incusd/instance/edk2: Add Void Linux x86_64 paths
- incusd/profiles: Empty default profile on forced deletion
- Revert "incusd/instance/agent-loader: Don't hardcode path"
- incusd/device: Add new Register function
- incusd/instance/drivers: Use Register function
- incusd/device: Don't make Register depend on validate
- incusd/storage/drivers: Add isDeleted flag
- incusd/storage/drivers/ceph: Rework parseClone
- incusd/storage/drivers/ceph: Rework parseParent
- incusd/storage/drivers/ceph: Make use of isDeleted flag
- incusd/instance/qemu: Allow setCPUs to re-use QMP
- incusd/instance/qmp: Handle QMP occasionally returning multiple responses
- incusd/seccomp: Update syscall numbers
- incusd/instance/drivers/qemu: Double number of hotplug slots
- incusd/instance/qemu: Rework PCI hotplug
- incusd/instance/drivers/edk2: Limit calls to GetenvEdk2Path
- incusd/instance/drivers/edk2: Actually check that the files exist
- incusd/device/config: Fix comment
- api: ovn_nic_promiscuous
- doc/devices/nic_ovn: Add security.promiscuous
- incusd/network/ovn: Only set DHCP options on LSP when not setting up a router interface
- incusd/network/ovn: Add support for promiscuous Logical Switch Port
- incusd/network/ovn: Wire in security.promiscuous
- incusd/device/nic: Add security.promiscuous
- api: ovn_nic_ip_address_none
- doc/devices/nic_ovn: Add none for ipv4.address/ipv6.address
- incusd/device/nic_ovn: Allow 'none' as value for ipv4.address/ipv6.address
- incusd/network/ovn: Add support for disabling allocation on LSP
- incusd/network/ovn: Wire in support for ipvX.address=none
- incusd/network/ovn: Fix BGP advertisement of load balancers
- incus-user: Handle deleted projects
- Makefile: Set minimum Go to 1.22.0
- Makefile: Remove deprecated flag
- gomod: Update dependencies
- incusd/auth: Update for openfga-go-sdk API breakage
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
HomeBrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.5.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.4 リリースのお知らせ¶
2024/08/09
はじめに ¶
Incus チームは、Incus 6.4 のリリースのアナウンスができてうれしいです!
これは、誰にとっても新しい何かを備えた、非常にバランスのとれたリリースです。
このリリースは、多数のバグフィックスと、前のリリースで追加された OCI サポートを支援するための新機能が搭載されています。また、より複雑な共有環境・クラスター環境のための多数の新機能も導入されています。また、ストレージ、クラスタリング、OpenID 認証、監査まわりの厄介な問題などの修正が満載です。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
クラスターグループの設定 ¶
クラスターグループは、他のほとんどの Incus オブジェクトと同様の、標準の設定テーブルを持つようになりました。
これは、コマンドと API の通常のセットを意味します:
incus cluster group edit
incus cluster group get
incus cluster group set
incus cluster group show
incus cluster group unset
クラスターグループごとの CPU ベースラインと VM に対するフラグ ¶
クラスターグループの設定サポートをベースに、クラスターグループごとに VM の CPU ベースラインを定義するためのサポートが追加されました。
これにより、CPU モデル・世代ごとに 1 つのクラスターグループを持ち、Incus がそれらのサーバーに共通の CPU フラグのセットを計算できるようになります。
例えば、incus cluster group set foo instances.vm.cpu.x86_64.baseline=kvm64 instances.vm.cpu.x86_64.flags=auto
とすると、Incus は自動的に foo クラスターグループ内のサーバーを自動的に調べ、共通の CPU フラグのセットを flag
設定キーに入力します。
ただし、これにより、完全にカスタムの CPU 定義を設定することもできます。例えば、incus cluster group set foo instances.vm.cpu.x86_64.baseline=EPYCv2
instances.vm.cpu.x86_64.flags=-svm
とすると、仮想化拡張機能(svm)を無効にした、基本的な第 2 世代の AMD EPYC CPU が公開されます。
ディスクとしてボリュームのサブパスの使用 ¶
既存のカスタムボリューム内のパスを、ディスクエントリーのソースとして使えるようになりました。
stgraber@castiana:~$ incus launch images:ubuntu/24.04 demo Launching demo stgraber@castiana:~$ incus launch images:ubuntu/24.04 demo-sub Launching demo-sub stgraber@castiana:~$ incus storage volume create default demovol Storage volume demovol created stgraber@castiana:~$ incus config device add demo demovol disk pool=default source=demovol path=/mnt/demovol Device demovol added to demo stgraber@castiana:~$ incus exec demo bash root@demo:~# mkdir -p /mnt/demovol/sub/path/ root@demo:~# echo world > /mnt/demovol/sub/path/hello root@demo:~#· exit stgraber@castiana:~$ incus config device add demo-sub demovol disk pool=default source=demovol/sub/path path=/mnt/demovol Device demovol added to demo-sub stgraber@castiana:~$ incus exec demo-sub bash root@demo-sub:~# cat /mnt/demovol/hello· world
この例では、demovol
カスタムボリュームが作られ、demo
コンテナにアタッチされ、そのボリューム内にサブディレクトリーが作成され、そのサブディレクトリーが別のコンテナ demo-sub
にアタッチされます。
ストレージプールごとのプロジェクト制限 ¶
Incus プロジェクトはリソース制限を持つことができます。これは、プロジェクトへのアクセスを第三者に提供する場合に理想的です。これまでは、プロジェクト内のトータルのディスク使用量を制限できました。しかし、これは全ストレージプールに適用されていました。
異なるストレージの特性(ローカル vs リモート)やクラス(ssd vs hdd)を表す、異なるストレージプールを持つことは一般的ですので、ストレージプールごとに制限を提供する方法があると便利です。
これを行うために、新しい設定キーである、limits.disk.pool.POOLNAME
がプロジェクト内で利用できるようになりました。制限を 0
に設定すると、そのストレージプールは完全に無効になり、そのプロジェクトにリストされているストレージプールから消えます。
stgraber@dakara:~$ incus project info test-limits +------------------+-----------+-------+ | RESOURCE | LIMIT | USAGE | +------------------+-----------+-------+ | CONTAINERS | UNLIMITED | 0 | +------------------+-----------+-------+ | CPU | UNLIMITED | 0 | +------------------+-----------+-------+ | DISK | UNLIMITED | 0B | +------------------+-----------+-------+ | INSTANCES | UNLIMITED | 0 | +------------------+-----------+-------+ | MEMORY | UNLIMITED | 0B | +------------------+-----------+-------+ | NETWORKS | UNLIMITED | 0 | +------------------+-----------+-------+ | PROCESSES | UNLIMITED | 0 | +------------------+-----------+-------+ | VIRTUAL-MACHINES | UNLIMITED | 0 | +------------------+-----------+-------+ stgraber@dakara:~$ incus storage list +---------+--------+-------------+---------+---------+ | NAME | DRIVER | DESCRIPTION | USED BY | STATE | +---------+--------+-------------+---------+---------+ | default | zfs | | 45 | CREATED | +---------+--------+-------------+---------+---------+ | foo | dir | | 0 | CREATED | +---------+--------+-------------+---------+---------+ stgraber@dakara:~$ incus project set test-limits limits.disk.pool.foo=0 limits.disk.pool.default=5GiB limits.disk=10GiB stgraber@dakara:~$ incus project info test-limits +------------------+-----------+-------+ | RESOURCE | LIMIT | USAGE | +------------------+-----------+-------+ | CONTAINERS | UNLIMITED | 0 | +------------------+-----------+-------+ | CPU | UNLIMITED | 0 | +------------------+-----------+-------+ | DISK | 10.00GiB | 0B | +------------------+-----------+-------+ | DISK (DEFAULT) | 5.00GiB | 0B | +------------------+-----------+-------+ | INSTANCES | UNLIMITED | 0 | +------------------+-----------+-------+ | MEMORY | UNLIMITED | 0B | +------------------+-----------+-------+ | NETWORKS | UNLIMITED | 0 | +------------------+-----------+-------+ | PROCESSES | UNLIMITED | 0 | +------------------+-----------+-------+ | VIRTUAL-MACHINES | UNLIMITED | 0 | +------------------+-----------+-------+ stgraber@dakara:~$ incus storage list +---------+--------+-------------+---------+---------+ | NAME | DRIVER | DESCRIPTION | USED BY | STATE | +---------+--------+-------------+---------+---------+ | default | zfs | | 45 | CREATED | +---------+--------+-------------+---------+---------+ stgraber@dakara:~$ incus create images:ubuntu/24.04 c1 --storage default -d root,size=5GiB Creating c1 The instance you are starting doesn't have any network attached to it. To create a new network, use: incus network create To attach a network to an instance, use: incus network attach stgraber@dakara:~$ incus create images:ubuntu/24.04 c2 --storage default -d root,size=5GiB Creating c2 Error: Failed instance creation: Failed checking if instance creation allowed: Reached maximum aggregate value "5GiB" for "limits.disk.pool.default" in project "test-limits" stgraber@dakara:~$ incus project set test-limits limits.disk.pool.foo=5GiB stgraber@dakara:~$ incus create images:ubuntu/24.04 c2 --storage foo -d root,size=5GiB Creating c2 The instance you are starting doesn't have any network attached to it. To create a new network, use: incus network create To attach a network to an instance, use: incus network attach stgraber@dakara:~$ incus project info test-limits +------------------+-----------+----------+ | RESOURCE | LIMIT | USAGE | +------------------+-----------+----------+ | CONTAINERS | UNLIMITED | 2 | +------------------+-----------+----------+ | CPU | UNLIMITED | 0 | +------------------+-----------+----------+ | DISK | 10.00GiB | 10.00GiB | +------------------+-----------+----------+ | DISK (DEFAULT) | 5.00GiB | 5.00GiB | +------------------+-----------+----------+ | DISK (FOO) | 5.00GiB | 5.00GiB | +------------------+-----------+----------+ | INSTANCES | UNLIMITED | 2 | +------------------+-----------+----------+ | MEMORY | UNLIMITED | 0B | +------------------+-----------+----------+ | NETWORKS | UNLIMITED | 0 | +------------------+-----------+----------+ | PROCESSES | UNLIMITED | 0 | +------------------+-----------+----------+ | VIRTUAL-MACHINES | UNLIMITED | 0 | +------------------+-----------+----------+ stgraber@dakara:~$
ここでは、プロジェクトがディスク制限付きでセットアップされ、最初にプールの 1 つを非表示にし、それから前に非表示にしたプールに制限を設定する前に、他のプールを埋める様子を見ることができます。
隔離された OVN ネットワーク(アップリンクなし)¶
これまで、すべての OVN ネットワークは、アップリンクのネットワークのセット(network
プロパティ)を持っていました。
これは、外部に面したルーターのポートが配置され、OVN ネットワークへの入出力がすべてこのネットワーク経由で行われるネットワークです。
Incus は、そのアップリンクネットワーク上の IPv4(および・もしくは IPv6)アドレスを選択し、それを使用して、仮想ネットワークから物理ネットワークへのすべてのトラフィックをルーティングします。
このネットワークプロパティの特別な値である none
は、Incus に対して、いかなるアップリンクとも接続されない、完全に分離したネットワークを作成するように指示をします。
root@server01:~# incus network create ovn-isolated network=none --type=ovn Network ovn-isolated created root@server01:~# incus launch images:ubuntu/24.04 c1 --network ovn-isolated Launching c1 root@server01:~# incus list +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | LOCATION | +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ | c1 | RUNNING | 10.248.34.2 (eth0) | fd42:669c:8431:b3cc:216:3eff:fef3:fdb2 (eth0) | CONTAINER | 0 | server01 | +------+---------+--------------------+-----------------------------------------------+-----------+-----------+----------+ root@server01:~# incus exec c1 bash root@c1:~# ping 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. ^C --- 1.1.1.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1031ms
ここでは、完全に分離されたネットワークが作成され、コンテナがそこに配置されていることがわかります。
通常どおり、ネットワークは IPv6 と IPv6 アドレスを提供しますが、トラフィックは送信されません。
インスタンスごとの LXCFS ¶
新しいサーバー設定キーである instances.lxcfs.per_instance
が利用できるようになりました。これにより、Incus が、コンテナごとに専用の LXCFS インスタンスを起動します。
これは、システム全体で 1 つの LXCFS インスタンスを起動するというデフォルトとは対照的です。
これを有効にすると、コンテナあたりのリソース消費はわずかに増加します。しかし、特定のコンテナが共通の LXCFS インスタンスを使用できなくなるリスクを減らし、LXCFS のクラッシュは 1 つのコンテナにのみ影響するようになります。
stgraber@castiana:~$ pgrep -a lxcfs 1101 /opt/incus/bin/lxcfs /var/lib/incus-lxcfs stgraber@castiana:~$ incus config set instances.lxcfs.per_instance=true stgraber@castiana:~$ incus restart demo stgraber@castiana:~$ pgrep -a lxcfs 1101 /opt/incus/bin/lxcfs /var/lib/incus-lxcfs 962122 lxcfs -f -p /run/incus/demo/lxcfs.pid --runtime-dir /run/incus/demo/lxcfs /var/lib/incus/devices/demo/lxcfs
create/launch実行時の環境変数ファイルのサポート ¶
OCI コンテナを簡単に実行できるようにするために、環境変数ファイル経由で環境変数を指定できるようになりました。このファイルは、起動時に読み込まれ、Incus の設定オプションに変換されます。
stgraber@castiana:~$ cat mysql.env MYSQL_DATABASE=wordpress MYSQL_USER=wordpress MYSQL_PASSWORD=wordpress MYSQL_RANDOM_ROOT_PASSWORD=1 stgraber@castiana:~$ incus launch docker:mysql mysql --environment-file mysql.env Launching mysql stgraber@castiana:~$ incus config show mysql architecture: x86_64 config: environment.GOSU_VERSION: "1.17" environment.HOME: /root environment.MYSQL_DATABASE: wordpress environment.MYSQL_MAJOR: innovation environment.MYSQL_PASSWORD: wordpress environment.MYSQL_RANDOM_ROOT_PASSWORD: "1" environment.MYSQL_SHELL_VERSION: 9.0.1-1.el9 environment.MYSQL_USER: wordpress environment.MYSQL_VERSION: 9.0.1-1.el9 environment.PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin environment.TERM: xterm image.architecture: x86_64 image.description: docker.io/library/mysql (OCI) image.type: oci volatile.base_image: d8df069848906979fd7511db00dc22efeb0a33a990d87c3c6d3fcdafd6fc6123 volatile.cloud-init.instance-id: f12e3ddb-ac93-4942-b3e1-dcd560893140 volatile.container.oci: "true" volatile.eth0.host_name: vethac8631aa volatile.eth0.hwaddr: 00:16:3e:20:32:87 volatile.idmap.base: "0" volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.last_state.idmap: '[]' volatile.last_state.power: RUNNING volatile.uuid: 5ed7f63b-5b6c-4c89-9dfa-117c2b785370 volatile.uuid.generation: 5ed7f63b-5b6c-4c89-9dfa-117c2b785370 devices: {} ephemeral: false profiles: - default stateful: false description: ""
これは、OCI イメージから作成され、mysql.env
ファイルで定義された環境変数を使う、mysql
コンテナの例です。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incus-simplestreams: Fix split images
- [lxd-import] github: stop purging core20
- [lxd-import] github: purge disabled/superseded snaps
- [lxd-import] github: move snap removal to "Reclaim some space" step
- [lxd-import] github: put docker removal its own step
- [lxd-import] github: mask lxc{,-net}.service in a singe command
- [lxd-import] lxd/instance/drivers/driver/qemu: Don't leak file descriptor when probing for Direct I/O support
- [lxd-import] lxd/network/acl: Change protocol field for ovn logs
- [lxd-import] lxd/instance: Reject limits.kernel config for VMs
- [lxd-import] doc:
limits.kernel
only applies to containers (see #12874) - [lxd-import] lxd/storage: Fix resize for pools with custom zfs.pool_name
- [lxd-import] lxd/storage/drivers/driver_zfs_utils: fix typos
- [lxd-import] lxd/storage/drivers/driver_zfs_utils: make it explicit that blocksize is in bytes
- [lxd-import] lxd/task/group: Make cancel type of context.CancelFunc for clarity
- [lxd-import] doc: Add paragraph on how to delete images
- [lxd-import] test: Add exec exit code test
- [lxd-import] lxd/apparmor: allow confined services to receive required signals
- [lxd-import] lxd/rsync: Consistently compare files on nanosecond basis
- [lxd-import] test/suites/migration: Check for file contents after refresh
- [lxd-import] test/suites/migration: Check local and remote instance refreshes based on nanoseconds
- [lxd-import] doc: add paragraph on how to delete images
- [lxd-import] doc: enable multiprocessing for pyspelling
- [lxd-import] Makefile: have run-parts report which script it runs
- [lxd-import] lxd/storage/drivers/ceph: Disable filesystem config keys on block volumes
- [lxd-import] lxd/storage/drivers/lvm: Disable filesystem config keys on block volumes
- [lxd-import] test: Add check to restore custom volumes of type block
- [lxd-import] lxd/storage/drivers/ceph: Update UnmountVolumeSnapshot docstring
- [lxd-import] lxd: Improve error check for existing certificates
- [lxd-import] shared/api: Updates swagger description for certificate field.
- [lxd-import] shared/api: Fix lint errors (receiver-naming).
- [lxd-import] lxd/db/cluster: Fix lint error (revive: var-naming).
- [lxd-import] lxd-migrate: Ignore lint error (revive: deep-exit).
- [lxd-import] lxc/remote: Fix lint errors (revive: exported).
- [lxd-import] lxd/storage/backend: Don't validate custom storage volumes twice
- [lxd-import] lxd-generate: Return helpful error instead of panicking.
- [lxd-import] lxd/storage/backend: Use quotes consistently for error messages
- [lxd-import] lxd/project: Don't panic on StorageVolumeParts
- [lxd-import] github: don't abort on remount failures
- [lxd-import] test/main: add log grouping (GHA)
- [lxd-import] test/main: show dmesg on failure
- [lxd-import] lxd/api/internal: Use correct quoting for error in internalImportFromBackup
- [lxd-import] lxd/db/cluster/devices: Use correct string quoting of device type for error in NewDeviceType
- [lxd-import] lxd/instances/post: Improve error in createFromBackup
- [lxd-import] lxd/storage/backend/lxd: Update backup.yaml after instance and volume DB records have been generated in CreateInstanceFromBackup
- [lxd-import] test/main: don't wrap tests logs in log groups
- [lxd-import] lxd/device/disk: Remove config.iso file when the cloud-init:config disk device is removed
- [lxd-import] lxd/images: Add project to error in autoSyncImages
- [lxd-import] lxd/project/project: Remove optimisation from StorageVolumeProject
- [lxd-import] lxd/storage/volumes: Remove unnecessary 2 line variable definition in doCustomVolumeRefresh
- [lxd-import] lxd/storage/volumes: Remove unnecessary 2 line variable definition in doVolumeCreateOrCopy
- [lxd-import] lxd/storage/volumes: Validate source project in doCustomVolumeRefresh
- [lxd-import] [lxd-import] lxd/storage/volumes: Validate source project in doVolumeCreateOrCopy
- [lxd-import] lxd/db/cluster: Remove redunant parentheses.
- [lxd-import] lxd/db/cluster: Rename "node" to "cluster member".
- [lxd-import] lxd/migrate/storage/volumes: Use volume name from DB in migrationSourceWs.DoStorage
- [lxd-import] lxd/network/network/utils: Fix incorrect conversion from int64 to int in inRoutingTable
- [lxd-import] lxd/network/network/utils: Remove unnecessary call to fmt.Sprintf by passing base to ParseInt
- [lxd-import] lxd/response: Use SmartError if SyncResponse success=false
- [lxd-import] lxd/storage/drivers/driver/zfs/volumes: Fix error scoping in CreateVolumeFromCopy
- [lxd-import] lxd/storage/drivers/driver/zfs/volumes: Define send/receive channels together in CreateVolumeFromCopy
- [lxd-import] lxd/storage/drivers/driver/zfs/volumes: Kill sender if receiver fails in CreateVolumeFromCopy
- [lxd-import] lxd/storage/drivers/driver/zfs/volumes: Handle multi-line errors in CreateVolumeFromCopy
- [lxd-import] lxd/storage/drivers/driver/btrfs/volumes: Fix hang when btrfs receive fails in RefreshVolume
- [lxd-import] lxd/storage/drivers/driver/btrfs/volumes: Handle multi-line errors in RefreshVolume
- [lxd-import] lxd/storage/drivers/driver/zfs/volumes: Aligns RefreshVolume with BTRFS driver
- [lxd-import] lxd/response: Fallback to error response after setting headers
- [lxd-import] lxd/storage/backend/lxd: Use volume name from VolumeDBGet in BackupCustomVolume
- [lxd-import] lxd/storage/drivers/btrfs: Clarify fallback in case UUID discovery times out
- incusd/db/cluster: Fix import shadowing
- doc/rest-api: Refresh swagger YAML
- [lxd-import] lxd/db/cluster: Update error messages in unit tests.
- [lxd-import] lxd/storage/drivers: Add volume param to roundVolumeBlockSizeBytes
- [lxd-import] lxd/storage/drivers/zfs: Round to zfs.blocksize or 16KiB
- [lxd-import] test/storage: Add non-power-of-two sized storage check
- [lxd-import] test/storage: Remove zfs rounding test
- [lxd-import] lxd/storage/drivers: Refactor volume size rounding logic
- [lxd-import] lxd/storage/drivers/zfs: Wait for device to appear when activating a volume
- [lxd-import] lxd/storage/drivers/zfs: Check for non /dev/zvol/* paths
- incusd/storage/zfs: Fix import shadowing
- doc/storage_backup: Fix command example
- doc/requirements: Add OCI requirements
- doc/images: Mention OCI images
- incusd/instance/edk2: Support OVMF filenames on arm64
- incusd/instance/drivers/qemu: Limit CPU flag calculation to x86_64
- incus/s3: Fix mcli minio client executable name check
- incusd/instance/qemu: Fix architecture check being backward
- incusd/instance: Fix initial configuration handling for OCI
- client/oci: Add errors for missing skopeo
- client/oci: Add errors for missing umoci
- Change RunDir file mode to 0711
- incusd/instance/lxc: Handle OCI containers using real PID1
- incusd/apparmor/qemu: Relax apparmor rules a bit
- incus-simplestreams: Handle removal of combined images
- incusd/instance/lxc: Add basic Mounts handling for OCI
- incusd/apparmor/qemu: Fix typo in rule
- incusd/apparmor/dnsmasq: Relax rules a bit
- incusd/db/node: Fix version check in GetAPI
- incusd/db: Allow cluster startup with differing API extensions
- incusd: Extend heartbeat data for minimum API extension count
- incusd/storage: Use writeback mode for qemu-img convert
- incusd/storage: Improve unpacking message
- incusd/operations: Handle percentage only updates
- incusd/storage: Pass through tracker to qemu-img
- incusd/db/cluster: Update tests for relaxed API extensions checks
- incusd/apparmor: Implement progress tracker for qemu-img
- incusd/cgroup: Handle unknown devices in io.stat
- incusd/instance_post: Always set the target project
- incusd/storage/drivers: Consistently set VolumeMultiNode
- incusd/storage/lvm: Require an exclusive lock during snapshot
- incusd/storage/lvm: Properly handle activation during resize
- incusd/storage: Properly detect filesystem on remote block
- incusd/cluster: Always attempt to forward custom volume requests
- client: Always set GetBody
- client: Report OIDC refresh failure
- incus/remote: Forward OIDC auth failures
- Make run-parts running compatible with different versions
- client: Retry when told to by the proxy
- Use qemu-img convert output to update progress
- incusd/cluster: Add flagFormat
- internal/cmd: Add support for format options
- incusd/isntance/edk2: Move seabios to /usr/share/qemu
- incusd/isntance/edk2: Add ArchLinux x86_64 paths
- tests: Use future values in property test
- incusd/db/cluster: Cleanup indentation
- incusd/db/cluster: Update schema
- incusd/db/generate: Add exception for cluster tables
- api: clustering_groups_config
- incusd/db/cluster: Add cluster_groups_config
- incusd/db/cluster: Update schema
- shared/api: Add Config to ClusterGroupPut
- doc/rest-api: Refresh swagger YAML
- incusd/db/cluster: Update functions for new cluster group config table
- incusd/cluster: Add cluster group config logic
- doc: Update configs
- incus/completion: Add cmpClusterGroupConfigs
- incus/cluster/group: Add get/set/unset
- i18n: Update translation templates
- doc: Add cluster group config
- tests: Add cluster group config test
- incusd/resources: Add sortedMapKeys
- incusd/resources/cpu: Sort sockets, cores and threads
- incusd/auth: Fill missing local volume location
- incusd/cluster: Correctly record volatile.cluster.group on move
- incusd/migration: Show source errors first
- incusd/instance/qemu: Clarify live migration error
- incusd/cluster: Attempt to ping the server prior to healing
- incusd/instance/qemu: Fix bad timeout errors
- api: instances_lxcfs_per_instance
- incusd/instance/qemu: Send two ACPI events on shutdown
- incusd/instance: Add progress tracking to export
- incusd/server/config: Add instances.lxcfs.per_instance
- incusd/instance/lxc: Add support for per-instance LXCFS
- doc: Update configs
- client: Remove GetBody when can't seek back
- client: Add Seek call to GetBody
- Translated using Weblate (Chinese (Simplified))
- incusd: Simplify image replication
- incusd/images: Only remove from authorizer once
- incusd/images: Correctly record new aliases
- incusd/images: Correctly remove aliases
- incusd/images: Set authorizer entries at the correct time
- incusd/images: Don't alter image info on cluster copy
- incusd/storage_pools: Set authorizer for pending pools
- incusd/networks: Set authorizer for pending networks
- incusd/network: Handle long interface names
- incus/cluster: Cleanup certificate update message
- i18n: Update translation templates
- incus/top: Properly filter disk usage
- incusd/state: Add Cluster gateway
- incusd/daemon: Sort state fields
- incusd/daemon: Add cluster gateway to state
- incusd/acme: Update for state change
- incusd/images: Update for state change
- incusd/operations: Update for state change
- incusd/instances: Update for state change
- incusd/patches: Update for state change
- incusd/cluster: Update for state change
- incusd/instances: Use targetGroupPrefix
- incusd/cluster: Split files
- incusd/cluster: Fix import shadowing
- incusd/cluster: Re-factor healing logic
- incusd/cluster: Improve logging
- incusd/cluster: Reduce dqlite logging
- incusd/cluster: Extend HasConnectivity to do API checking
- incusd/cluster: Add HasConnectivity check to event handling
- incusd: Don't block on startup for cluster queries
- incusd/cluster: Rework offline server detection
- incusd/cluster/evacuation: Add separate healing mode
- incusd/cluster/healing: Try up to 5 times
- incusd/cluster/healing: Add logging
- incusd/device/disk: Fix bad CanMigrate logic
- incusd/storage/lvm: Properly activate/deactivate ISOs
- incusd/images: Expose image type as header
- client: Skip image hash if OCI
- incusd/instance/lxc: Add /init to OCI init paths
- incusd/device: Don't fail on LXCFS device entry
- client: Report source errors too on copy
- incusd/storage: Have roundVolumeBlockSizeBytes return an error
- incusd/instance_post: Fix cross-server live-migration
- incus/image: Correct image copy logic
- incusd/storage/lvm: Hardden common functions
- incusd/api: Don't panic on missing config
- incusd/storage: Add Deactivate flag
- incusd/storage/lvm: Add deactivation step for clusters
- incusd/cluster: Return clear status for servers currently starting up
- incusd/instance/lxc: Reduce logging level
- incusd/instance/qemu: Reduce logging level
- incusd/migrate: Reduce logging
- incusd/storage: Reduce logging
- incusd/instance/qemu: Remove double lifecycle event
- tests/clustering: Use correct target project argument
- incusd/isntance/edk2: Fix CSM handling
- incusd/storage/zfs: Always call tryGetVolumeDiskPathFromDataset
- incusd/network/ovn: Require functional uplink
- doc: add colima instructions
- doc: Update incus_alias.md
- incus/network/load_balancer: Fix example
- i18n: Update translation templates
- incusd/network/ovn: Fix crash on uninitialized external IDs
- doc/instances: Add VM agent install instructions
- shared/api: Add Config to ServerUntrusted
- doc/rest-api: Refresh swagger YAML
- incusd/api_1.0: Expose user.ui config keys to all clients
- doc/server: Mention user.ui config keys
- incusd/auth/oidc: Better handle logout
- incusd/networks: Emit lifecycle event and authz entries for OVN networks
- incusd/network/ovn: Fix indent
- doc/storage_volume: Fix snapshot command
- shared/api: Add EventLifecycleInstanceMigrated
- shared/api: Sort lifecycle events
- incusd/lifecycle: Add InstanceMigrated
- incusd/lifecycle: Sort lifecycle events
- incusd/isntance/operationlock: Add ActionMigrate
- incusd/instance/common: Add support for migration operation
- incusd/instance/qemu: Add support for migration operation and lifecycle
- incusd/instance/lxc: Add support for migration operation and lifecycle
- shared/api: Add lifecycle events for cluster evacuation and healing
- incusd/lifecycle: Add lifecycle events for cluster evacuation and healing
- incusd/cluster: Add lifecycle events for evacuation
- incusd/request: Strip port from event address
- incusd/instance: Properly link instance and operation
- incusd/operations: Add CopyRequestor for nested operations
- incusd/instance: Track operation during exec/console
- doc/clustering: Better document healing
- incusd/instance: Track operation during creation
- incusd/instance: Track operation during deletion
- incusd/instance: Keep track of API operations
- incusd/instance: Set operations on snapshot
- incus-migrate: Properly handle projects
- incusd/apparmor: Allow mounting zfs when delegation is supported
- doc/clustering: Add howto on cluster access
- cmd/incusd: Set keep-alive timeout
- incusd/auth/oidc: Handle cases where we can't set cookies
- incusd/instance/qemu: Deref ceph config path
- incusd/apparmor/qemu: Guess ceph config paths
- Translated using Weblate (Chinese (Simplified))
- Translated using Weblate (Chinese (Simplified))
- Translated using Weblate (Chinese (Simplified))
- incusd/instance/lxc: Respect LXCFS_OPTS
- api: clustering_groups_vm_cpu_definition
- incusd/cluster_groups: Add CPU definition keys
- doc: Update configs
- incusd/instance/qemu: Use cluster group config
- incusd/instance/drivers: Extract GetClusterCPUFlags
- incusd/cluster/group: Support for auto CPU flags
- incusd: Switch OVN to a getter function
- incusd/network: Port to new OVN state function
- incus: Add support for environment file (.env)
- i18n: Update translation templates
- incusd/storage/lvm: Re-try activation/deactivation
- incusd/storage/lvm: Don't activate volumes during cold migration
- Translated using Weblate (Chinese (Simplified))
- Translated using Weblate (Chinese (Simplified))
- shared/cliconfig: Add CacheDir
- incus: Configure a cache directory
- api: disk_volume_subpath
- incusd/device/disk: Allow relative paths within custom volumes
- doc/devices_disk: Mention sub-paths
- tests: Test volume subpaths
- api: projects_limits_disk_pool
- incusd/projects: Add new limits.disk.pool config key
- doc: Update configs
- incus/project: Handle pool disk limits
- incusd/project: Add per-pool disk limits
- incusd/project: Add HiddenStoragePools
- incusd/storage: Hide pools with a zero limit
- tests: Add test for per pool limits
- incus/image/alias: Add support for column selection
- i18n: Update translation templates
- incusd/main_forknet: Make it so our DHCP client never fails
- Translated using Weblate (Chinese (Simplified))
- api: network_ovn_isolated
- incusd/network/ovn: Harden deletion logic
- doc/network/ovn: Cover isolated networks
- incusd/networks: Reserve "none" for uplinks
- incusd/network/ovn: Allow creating isolated OVN networks (no uplink)
- incusd/device/nic_ovn: Handle networks without uplinks
- gomod: Update dependencies
- Release Incus 6.4
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
HomeBrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.4.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues