Back to the news overview

LXD 3.8 リリースのお知らせ

12th of December 2018

はじめに

LXD チームは LXD 3.8 のリリースをお知らせすることにとてもワクワクしています!

このリリースは 2018 年の最後のリリースで、かなりの新機能を導入し、以前に導入した多数の機能を改良しています。

Enjoy!

新機能

コンテナの自動スナップショット

自動スナップショットや、スナップショットの名前をどのように決めるかを設定する設定キーを新たに 3 つ追加しました。

  • snapshots.schedule はスナップショット取得をいつ実行するかを指定する CRON パターン文字列です
  • snapshots.schedule.stopped は、停止中のコンテナのスナップショットも取得するかどうかを決める真偽値です
  • snapshots.pattern は、スナップショット名を指定していないときにスナップショット名を設定するために使う pongo2 テンプレートをサポートするフォーマット文字列です。これは自動スナップショットと名前を指定していない手動スナップショットの両方に適用されます

プロジェクト間の copy/move のサポート

lxc copylxc move--target-project オプションを追加しました。これにより、プロジェクト間でコンテナをコピーしたり移動したりできるようになります。

stgraber@castiana:~$ lxc move test1 test1 --target-project blah
stgraber@castiana:~$ lxc list --project blah
+-------+---------+------+------+------------+-----------+
| NAME  |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+-------+---------+------+------+------------+-----------+
| test1 | STOPPED |      |      | PERSISTENT |           |
+-------+---------+------+------+------------+-----------+

cluster.https_address サーバーオプション

これまでクラスタ環境の LXD サーバーは、クラスターの内部通信と通常のクライアントからの通信のすべてに同じアドレスを使うよう、単一の IPv4 もしくは IPv6 アドレスで待ち受けるように設定する必要がありました。

LXD 3.8 では、新たに cluster.https_address オプションを追加しました。
この設定キーは一度のみ設定でき、クラスター通信に使うアドレスを保持します。この値は現在、クラスターからノードを削除しないで変更することはできません。

この設定キーを使うことで、クラスターノードの通常の core.https_address を、:8443 のようなワイルドカードパターンを含む任意のアドレスに変更できます。

この設定キーにより、クラスター内部通信が完全に別のネットワークを使えるようになり、クラスタートラフィックの優先度設定とフィルタリングが容易になります。

クラスター環境でのイメージの複製

クラスターユーザー向けのもうひとつの改良は、自動でイメージを複製する機能の追加です。
LXD 3.8 より前のバージョンでは、システム上のコンテナがイメージを要求したときに、イメージを他のクラスターメンバーにコピーするだけでした。

この動きは、パフォーマンス、帯域、ディスク使用量の点では良かったのですが、イメージが単一のシステムにのみ存在し、そのシステムがオフラインになると、システムが復帰するまでそのイメージを使う方法がないという明らかな問題がありました。

LXD 3.8 は、手動で作成したりインポートしたイメージすべてを、少なくとも 3 システムで複製するように変更しました。キャッシュエントリーとしてのみイメージストアに格納されたイメージは複製されません。

この動作は cluster.images_minimal_replica で設定できます。3 に設定するとデフォルトの動作となり、1は以前の動きに、-1` はすべてのクラスターメンバーに複製するのに使えます。

security.protection.shift コンテナオプション

shiftfs が Linux ディストリビューションでサポートされ、LXD でもそのような機能がサポートされるまでは、LXD はコンテナの idmap が変更された場合は、ファイルシステム上のすべての uid/gid を書き換える遅い方法に頼る必要があります。

このような操作を、突然電源が喪失したりシャットダウンすることがあるようなシステム上で実行するのは危険な操作となる可能性があります。これは、操作が途中で中断した場合に、その操作を安全に復旧させられないためです。

新しい security,protection.shift 設定オプションを設定すると、このような再マッピングを防げます。キーが設定されなくなるまでこのような動作は失敗します。

すべての USB デバイスを渡す機能

フィルタを設定せずに、すべての GPU をコンテナに割り当てる方法と同様に、一切 vendorid や productid フィルターを設定せずに USB デバイスに対して同様のことができるようになりました。

このような場合には、事後にホットプラグされたデバイスを含めて、すべてのデバイスがコンテナに表示されます。

CLI でのデフォルトプロジェクトのオーバーライド

複数のプロジェクトを操作するような場合に、プロジェクト間でクライアントを切り替えるために、何度も lxc project switch を使う必要があり面倒であると、多数のユーザが報告しました。これは、特定のプロジェクトで行いたいことが、コンテナの起動などの単純な操作である場合に、特に当てはまります。

LXD 3.8 では、コマンドラインクライアント全体で使える、--project オプションが追加されました。これにより、特定の操作でプロジェクトをオーバーライドできます。

stgraber@castiana:~$ lxc project list
+-------------------+--------+----------+---------+
|       NAME        | IMAGES | PROFILES | USED BY |
+-------------------+--------+----------+---------+
| blah              | NO     | NO       | 2       |
+-------------------+--------+----------+---------+
| default (current) | YES    | YES      | 14      |
+-------------------+--------+----------+---------+

stgraber@castiana:~$ lxc list test
+-------+---------+------+------+------------+-----------+
| NAME  |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+-------+---------+------+------+------------+-----------+
| test1 | STOPPED |      |      | PERSISTENT | 0         |
+-------+---------+------+------+------------+-----------+

stgraber@castiana:~$ lxc list test --project blah
+-------+---------+------+------+------------+-----------+
| NAME  |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+-------+---------+------+------+------------+-----------+
| test2 | STOPPED |      |      | PERSISTENT | 0         |
+-------+---------+------+------+------------+-----------+

双方向 rsync ネゴシエーション

最近の LXD では、rsync のネゴシエーションが導入されました。コピー元はサーバーにどの rsync の機能を使っているかを伝え、サーバーが受信側でそれを照合できます。

LXD 3.8 ではその逆の機能が追加されました。LXD サーバーがマイグレーションプロトコルの一部としてサポートしている機能を示し、コピー元がそれを使って機能を制限できます。

rsync 機能のミスマッチを起こすことなく、新しい LXD がコンテナを古い LXD にマイグレーションでき、将来的にも堅牢なマイグレーションが提供できます。

ZFS 圧縮サポート

マイグレーションプロトコルのもうひとつの改良点は、ZFS 圧縮が使える場合に検出と使用をすることです。

zpool 圧縮と組み合わせると、マイグレーションストリームのサイズを大幅に削減できます。

Bugs fixed

  • client: convert EventListener to use api.Event
  • client: Fix crash on missing ProgressTracker
  • doc: Add kernel.keys.maxkeys to production-setup
  • doc: Add project documentation
  • doc: Updated documentation of /cluster/members/ to have correct keys
  • i18n: Update translations from weblate
  • i18n: Update translation templates
  • lxc/image: Fix rootfs file handling on snap
  • lxc/import: gzip is the default
  • lxc/project: Check existence on switch
  • lxd: Finish converting events to api.Event
  • lxd: Fix AppArmor cache policy version check
  • lxd: Handle AppArmor policy cache directory
  • lxd/cluster: Tweak error messages
  • lxd/containers: Drop needless function
  • lxd/containers: Fix snapshot URLs in projects
  • lxd/containers: Hide duplicate log entries
  • lxd/containers: Improve hwaddr retry logic
  • lxd/containers: Properly clear static leases
  • lxd/containers: Respect optional=true for disks
  • lxd/db: Avoid un-needed query on container move
  • lxd/db: Fix typo in existing docstring
  • lxd/db: Fix unit test not actually checking error
  • lxd/db: Make ContainerSetState use single query
  • lxd/images: Fix bad project handling
  • lxd/init: Better handle disk sizes
  • lxd/init: Checks if a zfs storage pool or dataset exists
  • lxd/init: Fix typo
  • lxd/migration: Cleanup feature negotiation
  • lxd/migration: Fix CRIU rsync option negotiation
  • lxd/migration: Fix rsync project prefix
  • lxd/migration: Fix shutdown race
  • lxd/migration: Remove leftover debugging
  • lxd/migration: Re-spawn proxy devices
  • lxd/migration: Simplify MigrationSink
  • lxd/migration: Simplify MigrationSource
  • lxd/migration: Simplify StorageMigrationSink
  • lxd/networks: Fix projects in dnsmasq.hosts
  • lxd/projects: Add config validation
  • lxd/projects: Fix copy of snapshots
  • lxd/proxy: Improve shutdown code
  • lxd/storage: Fix broken error handling
  • lxd/storage: Fix check for custom volume restore
  • lxd/storage: Fix custom volume copies
  • lxd/storage: Fix more project copy issues
  • lxd/storage: Fix snapshot migration with projects
  • lxd/storage: Freeze containers during rsync
  • lxd/storage: user_subvol_rm_allowed for btrfs
  • lxd/storage/btrfs: Fix project migrations
  • lxd/storage/btrfs: Tweak errors
  • lxd/storage/ceph: Fix copies within project
  • lxd/storage/ceph: Fix project migration
  • lxd/storage/dir: Don't fail when quota are set
  • lxd/storage/dir: Fix project snapshot symlink
  • lxd/storage/lvm: Fix project handling
  • lxd/storage/lvm: Run pvremove on VG deletion
  • lxd/storage/zfs: Add zfsPoolVolumeExists
  • lxd/storage/zfs: Detect tool version on Ubuntu
  • lxd/storage/zfs: Fix missing dir on copy
  • lxd/storage/zfs: Fix project copies
  • lxd/storage/zfs: Fix project migrations
  • lxd/storage/zfs: Fix setting quotas on project
  • shared: Fix import order
  • shared: Fix windows cert handling
  • shared/idmap: Workaround Go tip change
  • shared/termios: Add shim for non-cgo builds
  • storage/zfs: Fix arguments in function call
  • tests: Always pass -w to iptables
  • tests: Bump size to 120MB for btrfs
  • tests: Fix leftover file
  • tests: Improve live-migration tests
  • tests: Test migration in projects
  • test: Support AppArmor policy cache directory

試用環境

この新しい LXD リリースは私たちの デモサービス で利用できます。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。