ニュースのトップページに戻る

Incus 0.6 リリースのお知らせ

2024/02/23

はじめに

Incus チームは、Incus 0.6 のリリースのアナウンスができてうれしいです!

このリリースは、2024 年の 2 回目のリリースで、大小さまざまな多数の改善が加えられています。

クラスターユーザー向けの新しいストレージドライバー、ストレージバケットのインポート・エクスポートのサポート、OVN ユーザー向けの多数の改善、新しいカーネルのコンテナ機能のサポート、移行ツールのかなりの改善などが含まれます。

image|690x459

いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/

Enjoy!

新機能

クラスター LVM ストレージドライバー

lvmcluster という名前の新しいストレージドライバーを追加しました。

名前のとおり、このドライバーは LVM ストレージドライバーをクラスター化して使うためのドライバーです。
llvmlockdsanlock のようなロックマネージャーを使って、クラスター全体への共有ストレージデバイスへの同時アクセスを提供します。

これは、Incus クラスターを実行し、ファイバーチャンネル SAN、iSCSI エクスポート、NVMEoF/NVMEoTCP ディスクといった共有ストレージデバイスを使いたい人を対象にしています。

すべてのサーバーで同じストレージを使えるので、より高速なライブマイグレーション、サーバーの退避、サーバーが突然停止した場合の自動回復機能のようなことがサポートできます。

image|622x500

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/storage_lvm/#lvmcluster-driver-in-incus

ストレージバケットのバックアップとインポート

ストレージバケット全体をバックアップし、あとで Incus に再度インポートできるようになりました。

stgraber@dakara:~$ incus storage bucket create default foo
Storage bucket foo created
Admin access key: HD2GWC1KX693MFVT3P30
Admin secret key: tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv

stgraber@dakara:~$ dd if=/dev/random of=out.img bs=4M count=10
10+0 records in
10+0 records out
41943040 bytes (42 MB, 40 MiB) copied, 0.0975758 s, 430 MB/s
stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv put out.img s3://foo
upload: 'out.img' -> 's3://foo/out.img'  [part 1 of 3, 15MB] [1 of 1]
 15728640 of 15728640   100% in    0s   262.42 MB/s  done
upload: 'out.img' -> 's3://foo/out.img'  [part 2 of 3, 15MB] [1 of 1]
 15728640 of 15728640   100% in    0s   241.54 MB/s  done
upload: 'out.img' -> 's3://foo/out.img'  [part 3 of 3, 10MB] [1 of 1]
 10485760 of 10485760   100% in    0s   241.99 MB/s  done
stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv ls s3://foo
2024-02-23 03:26     41943040  s3://foo/out.img

stgraber@dakara:~$ incus storage bucket export default foo
Backup exported successfully!
stgraber@dakara:~$ incus storage bucket delete default foo
Storage bucket foo deleted

stgraber@dakara:~$ incus storage bucket import default backup.tar.gz
stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv ls s3://foo
2024-02-23 03:27     41943040  s3://foo/out.img

API: https://linuxcontainers.org/incus/docs/main/rest-api-spec/#/storage/storage_pool_buckets_backups_post

すべてのプロジェクトをまたいだイメージのリスト表示

--all-projects を使って、すべてのプロジェクトをまたいでインスタンスのリスト表示ができるようになったのと同じように、イメージについても同じようなリスト表示ができるようになりました。

stgraber@dakara:~$ incus image list --all-projects
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| PROJECT | ALIAS | FINGERPRINT  | PUBLIC |               DESCRIPTION                | ARCHITECTURE |      TYPE       |   SIZE    |          UPLOAD DATE          |
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| default |       | 256f59a72af5 | no     | Ubuntu jammy amd64 (20240222_07:42)      | x86_64       | VIRTUAL-MACHINE | 267.19MiB | Feb 23, 2024 at 12:27am (UTC) |
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| default |       | 0941e441dbb9 | no     | Alpine edge amd64 (20240222_13:00)       | x86_64       | CONTAINER       | 2.93MiB   | Feb 23, 2024 at 12:27am (UTC) |
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| default |       | d5fc6024f0fa | no     | Openwrt snapshot amd64 (20240222_11:57)  | x86_64       | CONTAINER       | 3.50MiB   | Feb 23, 2024 at 2:55am (UTC)  |
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
| demo    |       | f44a6b4e56f4 | no     | Archlinux current amd64 (20240222_04:18) | x86_64       | CONTAINER       | 188.86MiB | Feb 23, 2024 at 3:32am (UTC)  |
+---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+

API では、?all-projects=true を与えることで行います。

非特権コンテナ内の binfmt_misc

Linux 6.7 で、非特権コンテナ内部での binfmt_misc のマウントサポートが追加されました。

Incus 0.6 では、この機能をサポートするカーネルを検出し、使える場合には、ホストシステムから binfmt_misc でのバインドマウントを行わないようになり、代わりにコンテナ内から binfmt_misc でのマウントを行えるようになります。

stgraber@castiana:~$ incus launch images:ubuntu/22.04 foo
Launching foo
stgraber@castiana:~$ incus exec foo bash
root@foo:~# uname -a
Linux foo 6.7.4-zabbly+ #debian12 SMP PREEMPT_DYNAMIC Mon Feb  5 23:37:46 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
root@foo:~# mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc/
root@foo:~# ls -lh /proc/sys/fs/binfmt_misc/
total 0
--w------- 1 root root 0 Feb 23 03:46 register
-rw-r--r-- 1 root root 0 Feb 23 03:46 status

binfmt_misc ファイルシステムは、エミューレーションのためのカスタムバイナリーフォーマットを定義するために使います。
これは、他のアーキテクチャーのバイナリーを実行するための方法として、qemu-user-static が特によく使われます。

共有ブロックストレージボリュームの制御

カスタムブロックボリュームを複数のインスタンスから使えるようにするかどうかを制御するために、新たに security.shared というボリュームストレージオプションを導入しました。

カスタムブロックボリュームをプロファイルに追加する前、もしくは複数の仮想マシンに直接追加する前に、設定を行う必要があります。

stgraber@castiana:~$ incus config device add lvm01 shared disk pool=default source=shared-lvm io.bus=nvme
Device shared added to lvm01

stgraber@castiana:~$ incus config device add lvm02 shared disk pool=default source=shared-lvm io.bus=nvme
Error: Failed add validation for device "shared": Cannot add un-shared custom storage block volume to more than one instance

stgraber@castiana:~$ incus storage volume set default shared-lvm security.shared=true

stgraber@castiana:~$ incus config device add lvm02 shared disk pool=default source=shared-lvm io.bus=nvme
Device shared added to lvm02
stgraber@castiana:~$ incus config device add lvm03 shared disk pool=default source=shared-lvm io.bus=nvme
Device shared added to lvm03
stgraber@castiana:~$ incus start lvm01 lvm02 lvm03

ネットワーク情報で OVN 論理ルーター名を表示

OVN 内で何が起こっているかが簡単に確認できるように、incus network info コマンドで、個別のネットワークに対する論理ルーター名が表示されるようになりました。

root@abydos:~# incus network info default
Name: default
MAC address: 00:16:3e:38:dd:28
MTU: 1500
State: up
Type: broadcast

IP addresses:
  inet  10.180.103.1/24 (link)
  inet6 2602:fc62:a:1004::1/64 (link)

Network usage:
  Bytes received: 0B
  Bytes sent: 0B
  Packets received: 0
  Packets sent: 0

OVN:
  Chassis: abydos
  Logical router: incus-net6-lr

イメージテンプレートのファイルの所有者とパーミッション

テンプレートファイルに uidgidmode を設定できるようになりました。
これは、テンプレートが実行可能なシェルスクリプトであることを意図している場合に特に便利です。

stgraber@castiana:~$ incus config metadata show foo
architecture: amd64
creation_date: 1708588077
expiry_date: 1711180077
properties:
  architecture: amd64
  description: Ubuntu jammy amd64 (20240222_07:42)
  name: ubuntu-jammy-amd64-default-20240222_07:42
  os: ubuntu
  release: jammy
  serial: "20240222_07:42"
  variant: default
templates:
  /etc/hostname:
    when:
    - create
    - copy
    create_only: false
    template: hostname.tpl
    properties: {}
  /etc/hosts:
    when:
    - create
    - copy
    create_only: false
    template: hosts.tpl
    properties: {}
  /root/hello.sh:
    when:
    - start
    create_only: false
    template: hello.tpl
    properties: {}
    uid: "1000"
    gid: "2000"
    mode: "0755"

stgraber@castiana:~$ incus config template show foo hello.tpl
#!/bin/sh
echo "Hello world!"

stgraber@castiana:~$ incus start foo
stgraber@castiana:~$ incus exec foo bash
root@foo:~# ls -lh /root/hello.sh
-rwxr-xr-x 1 ubuntu 2000 30 Feb 23 04:07 /root/hello.sh
root@foo:~# /root/hello.sh
Hello world!

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/image_format/#template-rules

暗号化された EC クライアント証明書の鍵

リモートの Incus サーバーとやりとりしている方は、Incus の秘密鍵をパスワードで保護できることを知らないかもしれません。

これまで、RSA キーでのみ可能でしたが、Incus 0.6 では、EC キーのサポートが追加されました。ここしばらくで、EC キーがデフォルトになっているので、これは特に重要です。

Documentation: https://linuxcontainers.org/incus/docs/main/authentication/#encrypting-local-keys

この機能を使う場合、Incus の使用中にパスワードプロンプトが表示される回数を大幅に減らすために、最近導入された「キープアライブモード」(keepalive mode)も使いたいと思うでしょう。

lxd-to-incus の改良

最後に、lxd-to-incus が大きく改良されました:

  • Void Linux サポート
  • 設定 boot.debug_edk2 の検出
  • OVN SSL データベース接続の扱い
  • マイグレーション中の simplestream キャッシュの自動クリーニング

すべての変更点

このリリースのすべての変更のリストは次の通りです(翻訳なし):

すべてのChangeLogを見る
  • incusd/instance/qemu/qmp: Don't risk blocking QMP on eject
  • github: Switch to minio deb and pin working version
  • github: Use stable MicroCeph
  • incusd/db: Fix error handling in CreateNetworkPeer
  • incusd/apparmor: Allow more mounts in unprivileged containers
  • Translated using Weblate (Portuguese (Brazil))
  • incusd/instance/qemu/agent-loader: Handle legacy lxd-agent-loader
  • incusd/device/disk: Use genisoimage when mkisofs can't be found
  • shared/api: Add example of Chassis in NetworkStateOVN
  • doc/rest-api: Refresh swagger YAML
  • api: network_state_ovn_lr
  • shared/api: Add LogicalRouter field to NetworkStateOVN
  • incusd/network/ovn: Expose LogicalRouter name
  • incus: Add OVN logical router name
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • scripts/bash: Don't follow aliases
  • Translated using Weblate (Japanese)
  • test: Adapt test_database_no_disk_space() to newer libraft versions
  • incus/launch: Fix --console
  • api: image_template_permissions
  • doc: Add uid/gid/mode to image template metadata
  • shared/api: Add owner/permission fields to ImageMetadataTemplate
  • doc/rest-api: Refresh swagger YAML
  • incusd/instance/lxc: Add support for template ownership/mode
  • incus-agent: Add support for template ownership/mode
  • lxd-to-incus: Add comment
  • lxd-to-incus: Add cache cleanup logic
  • .github: Bump minimum Go version to 1.21
  • Makefile: Bump minimum Go version to 1.21
  • gomod: Update dependencies
  • doc: Bump minimum Go version to 1.21
  • Translated using Weblate (French)
  • incusd/daemon: Fix log format
  • incusd/sys: Sort kernel features
  • incusd/sys: Add doc strings
  • incusd/checkfeature: Add unprivileged binfmt detection
  • incusd/sys: Add UnprivBinfmt
  • incusd/daemon: Detect unprivileged binfmt_misc
  • incusd/api_1.0: Add unpriv_binfmt kernel feature
  • incusd/instance/lxc: Support unpriv binfmt_misc
  • incusd/apparmor: Support unpriv binfmt_misc
  • Translated using Weblate (Italian)
  • completion: support returning non-incus remotes
  • incus/image: add dynamic command line completions
  • shared/cliconfig: Support SSH encrypted keys
  • tests: Add crypto/ssh
  • doc/remotes: Add mention of keepalive
  • doc: Add Ansible to wordlist
  • doc/authentication: Hints on encrypting client key
  • api: images_all_projects
  • lxd-to-incus: Indicate what existing configuration was found
  • shared/api: Add project property to Image
  • client: Add GetImagesAllProjects
  • incusd/images: Add support for all_projects
  • doc/rest-api: Refresh swagger YAML
  • incus/image: Add --all-projects flag to list
  • i18n: Update translation templates
  • shared/cliconfig: Fix static analysis
  • gomod: Update dependencies
  • Makefile: Pin rpc2 version due to OVN issue
  • incusd/instance/qemu: Re-shuffle agent NIC handling
  • incusd/instance/qemu/agent-loader: Handle SELinux
  • incus/config: add completions
  • incus-agent: Load virtio_net before configuring NICs
  • incus: Run gofmt
  • doc/storage/lvm: Cleanup tables
  • incusd/patches: Move lvm.vg.force_reuse to be server-specific
  • incusd/db: Mark lvm.vg.force_reuse as server-specific
  • doc/faq: Add mention of the -mtu network interfaces
  • incusd/device: Bump base VM filesystem volume to 500MiB
  • incusd/storage: Create rootfs dir on empty instances
  • incusd/storage/quota: Don't fail on missing project
  • incusd/instances: Use correct project on cross-project copy
  • incusd/patches: Fix bad SQL query
  • incusd/instances: Don't bypass instance limit check
  • Added translation using Weblate (Portuguese)
  • incus-agent: Re-order imports
  • api: Add storage_bucket_backup extension
  • shared/api: Add storage bucket backup
  • incusd/db: Add storage bucket backup functions
  • incusd/db/operation: Add storage volume backup types
  • incusd/lifecycle: Add storage bucket backup events
  • incusd/project: Add StorageBucket function
  • incusd/storage/s3: Add transfer manager
  • incusd: Add storage bucket backup
  • client: Add storage bucket backup
  • incus: Add storage bucket import/export
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • test: Add storage bucket backup
  • client: Remove ceph-specific logic
  • incusd/storage/s3: Fix typo
  • incus: Fix import shadowing
  • incus: Fix comments on exported functions
  • client: Fix comments on exported functions
  • incusd: Fix import shadowing
  • incusd: Fix comments on exported functions
  • incusd/cluster: Make remote storage volume logic generic
  • incusd/db: Don't hardcode remote storage drivers
  • incusd/storage_volumes: Don't hardcode ceph
  • incusd/instances: Update ceph-specific comment
  • incusd/cluster: Update ceph-specific comment
  • incusd/instances: Generalize Ceph logic
  • lxd-to-incus: Support SSL authentication in OVN
  • lxd-to-incus: Don't fail on missing OVN bridge mapping
  • lxd-to-incus: Ignore OVN chassis external_ids
  • lxd-to-incus: Add boot.debug_edk2 to deprecated keys
  • lxd-to-incus: Support Void Linux
  • cmd/incusd: Disable the architecture check on incus cp/mv
  • incusd/instance: Disable the architecture check on incus cp/mv
  • api: storage_lvm_cluster
  • incus/admin/init: Add LVM cluster logic
  • i18n: Update translation templates
  • lxd-to-incus: Add LVM cluster
  • doc: Add LVM cluster
  • shared/api: Add cephobject
  • shared/api: Add lvmcluster
  • doc/rest-api: Refresh swagger YAML
  • incusd/storage/lvm: Add clustered LVM
  • incusd/storage/lvm: Fix import shadowing
  • incusd/storage/lvm: Tweak locking in cluster
  • internal/server/device/config: Don't include empty values
  • internal/server/device/config: Fix return values of Update function
  • api: Add shared_custom_block_volumes API extension
  • doc/reference: Add security.shared config key
  • instance/server/device: Validate shared block devices
  • internal/server/storage: Handle security.shared update
  • internal/server/storage: Allow security.shared key for custom block volumes
  • internal/server/storage/drivers: Handle security.shared in fillVolumeConfig
  • incusd/instance/qemu: Cap hotplug CPU slots to 64
  • incusd/storage/lvm: Make gofmt happy
  • shared/subprocess: Improve error handling
  • incusd/instance/qemu: Improve error handling
  • incusd/network/ovs: Wait for bridge interface to appear
  • incusd/storage/zfs: Fix refresh of VM volumes
  • internal/instance: Fix volatile key definitions
  • doc: Update configs
  • incusd/network/ovn: Extend validateExternalSubnet to allow uplink subnets
  • incusd/network/ovn: Add static routes to load-balancer and forwards
  • gomod: Update dependencies

ドキュメント

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/0.6

Incus クライアントの Winget パッケージ

Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。

https://winstall.app/apps/LinuxContainers.Incus

サポート

現在は初期段階ですので、Incus の各リリースは、次のリリースが出るまでしかサポートされません。LXC と LXCFS のリリースと合わせて LTS リリースを計画していますので、この状況はここ数ヶ月で変わるでしょう。

コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues