LXD 3.12 リリースのお知らせ¶
5th of April 2019
はじめに ¶
LXD チームは LXD 3.12 のリリースをお知らせすることにとてもワクワクしています!
今回は機能満載のリリースです。そしてクラスターユーザーであれば、ハッピーになることがたくさんあるでしょう!
私たちはすべての LXD コマンドを調べ、それらがどのようにクラスターに対して動作するのかを調べました。そして不足している API を改良し、クラスターのオペレーターが使いやすくなるようにコマンドを調整しました。
しかし、このリリースではクラスターの改良よりもっとすごい改良がなされました。
我々はついに shiftfs
をサポートしました! この機能を持ったカーネルと組み合わせることで、1 年以上かけて計画したこの機能がついに使えるようになります。これにより、LXD コンテナでは、初期起動時に ID のシフトを行うという遅い処理をする必要がなくなり、ファイルシステムの差分が減少し、コンテナの作成がかなり速くなります。
最後に、リソースのレポートが API と CLI で大幅に改善されました。CPU トポロジのうち特にマルチソケットシステムの NUMA の詳細を確認できます。そして、GPU 構成も確認できます。
Enjoy!
新機能 ¶
クラスター: DHCP リース情報の集約 ¶
複数のクラスターメンバーにまたがった LXD 管理ネットワークは、DHCP リース情報を統一して表示します。それぞれのリースに対して、ホスト名、MAC アドレス、IP アドレス、クラスターメンバー名を表示します。
root@edfu:~# lxc network list-leases lxdfan0 +----------+-------------------+--------------+---------+----------+ | HOSTNAME | MAC ADDRESS | IP ADDRESS | TYPE | LOCATION | +----------+-------------------+--------------+---------+----------+ | a1 | 00:16:3e:2b:de:8c | 240.31.0.206 | DYNAMIC | edfu | +----------+-------------------+--------------+---------+----------+ | a2 | 00:16:3e:01:99:58 | 240.34.0.124 | DYNAMIC | djanet | +----------+-------------------+--------------+---------+----------+ | a3 | 00:16:3e:b4:8b:94 | 240.36.0.96 | DYNAMIC | nuturo | +----------+-------------------+--------------+---------+----------+ | a4 | 00:16:3e:52:13:2b | 240.31.0.212 | DYNAMIC | edfu | +----------+-------------------+--------------+---------+----------+ | a5 | 00:16:3e:45:54:80 | 240.34.0.68 | DYNAMIC | djanet | +----------+-------------------+--------------+---------+----------+ | a6 | 00:16:3e:d1:81:e3 | 240.36.0.90 | DYNAMIC | nuturo | +----------+-------------------+--------------+---------+----------+
クラスター: イベントがロケーションを表示 ¶
イベントメッセージはすべて、location として発信元のクラスターメンバーの名前でマークされます。
location: edfu metadata: class: task created_at: "2019-04-05T04:13:21.212580932Z" description: Creating container err: "" id: 0c8e4a7d-ef7b-41a0-b949-7030f9aa6827 location: edfu may_cancel: false metadata: null resources: containers: - /1.0/containers/a10 status: Running status_code: 103 updated_at: "2019-04-05T04:13:21.212580932Z" timestamp: "2019-04-05T04:13:21.223834434Z" type: operation
加えて、LXD は WARN 以上のログメッセージだけを他のクラスターメンバーに転送し、INFO と DEBUG メッセージはローカルだけに留め、ネットワークに流れる大量のログデータを減らします。この動きは LXD デーモンをデバッグモードで起動して変更できます。その時点で、すべてのログレベルが再度ブロードキャストされます。
クラスター: 操作がロケーションを表示 ¶
クラスターメンバーの明確な追跡の恩恵を受けるもうひとつの分野は、lxc operation list
で見られるような操作です:
root@edfu:~# lxc operation list +--------------------------------------+-----------+-------------------+---------+------------+----------------------+----------+ | ID | TYPE | DESCRIPTION | STATUS | CANCELABLE | CREATED | LOCATION | +--------------------------------------+-----------+-------------------+---------+------------+----------------------+----------+ | 36c11142-52d8-4c1e-a342-63657096cdec | WEBSOCKET | Executing command | RUNNING | NO | 2019/04/05 04:19 UTC | edfu | +--------------------------------------+-----------+-------------------+---------+------------+----------------------+----------+ | 701175cf-df82-4ef5-8078-a25d83b770b3 | WEBSOCKET | Executing command | RUNNING | NO | 2019/04/05 04:19 UTC | djanet | +--------------------------------------+-----------+-------------------+---------+------------+----------------------+----------+
これにより、どのクラスターメンバーが何を実行していて busy なのかを明確にでき、メンテナンスを実行する前にシステムがアクティブに使われていないことを容易に確認できるでしょう。
クラスター: より多くのコマンドで --target
オプションをサポート ¶
次のコマンドで --target
が使えるようになりました:
- lxc config edit/get/show/set/unset
- lxc info [--resources]
- lxc network info
- lxc storage info
これにより、メンバー固有のデーモン設定のオプションの設定、クラスターメンバーの実行時情報やシステムリソースの取得、詳細なネットワーク統計情報やストレージ使用状況の取得ができるようになります。
Shiftfs サポート ¶
これは、私たちが何年も楽しみにしていた機能です。そしてついに完成に至るのを見るのが本当にエキサイティングな機能です。shiftfs
は非特権コンテナの利用において、ファイルシステムの ID シフトを一切不要にできます。カーネルがオンザフライでシフトを行ってくれます。
これには shiftfs
ファイルシステムのカーネルでのサポートが必要です。現時点では Ubuntu 19.04 カーネルでカスタムなパッチセットが適用される予定です。
LXD は自動的に shiftfs
のサポートを検出し、可能であれば透過的にこの機能を使って起動します。
API 経由でカーネルの機能を取得可能 ¶
これまでの間、LXD は多数のカーネルのオプション機能を起動時に検出し、それを出力しています。同じ情報が API を通して取得できます。そして lxc info
で確認できます。
kernel_features: netnsid_getifaddrs: "true" shiftfs: "true" uevent_injection: "true" unpriv_fscaps: "true"
CPU レポートの改良 ¶
サーバーリソース API で、CPU ソケットと NUMA ノードの情報を取得できます。これにより、コンテナに対する CPU を簡単に固定(pinning)できるようになりました。
root@djanet:~# lxc info --resources --target edfu CPUs: Socket 0: Vendor: GenuineIntel Name: Intel(R) Xeon(R) CPU E5430 @ 2.66GHz Cores: 4 Threads: 4 Frequency: 1999Mhz (max: 2336Mhz) NUMA node: 0 Socket 1: Vendor: GenuineIntel Name: Intel(R) Xeon(R) CPU E5430 @ 2.66GHz Cores: 4 Threads: 4 Frequency: 1999Mhz (max: 2336Mhz) NUMA node: 1 Memory: Free: 18.37GB Used: 557.76MB Total: 18.93GB GPU: Vendor: ASPEED Technology, Inc. (1a03) Product: ASPEED Graphics Family (2000) PCI address: 0000:06:03.0 Driver: ast (4.15.0-47-generic) NUMA node: 0
lxc info --resources
の出力も、システムに存在するハードウェアに適合するように調整されました。
GPU レポート ¶
前のリスト表示でお気づきかもしれませんが、GPU がシステムリソースの出力に表示されます。NVIDIA カードの追加情報も表示されます:
root@vm10:~# lxc info --resources CPU: Vendor: GenuineIntel Name: Intel(R) Xeon(R) CPU E5-2695 v2 @ 2.40GHz Cores: 2 Threads: 4 Frequency: 2400Mhz NUMA node: 0 Memory: Free: 8.14GB Used: 225.81MB Total: 8.36GB GPUs: Card 0: Vendor: NVIDIA Corporation (10de) Product: GK208B [GeForce GT 730] (1287) PCI address: 0000:00:07.0 Driver: nvidia (418.56) NUMA node: 0 NVIDIA information: Architecture: 3.5 Brand: GeForce Model: GeForce GT 730 CUDA Version: 10.1 NVRM Version: 418.56 UUID: GPU-6ddadebd-dafe-2db9-f10f-125719770fd3 Card 1: Vendor: NVIDIA Corporation (10de) Product: GK208B [GeForce GT 730] (1287) PCI address: 0000:00:09.0 Driver: nvidia (418.56) NUMA node: 0 NVIDIA information: Architecture: 3.5 Brand: GeForce Model: GeForce GT 730 CUDA Version: 10.1 NVRM Version: 418.56 UUID: GPU-253db1df-f725-a174-99d4-a8933288c39e
lxc info
でスナップショットの有効期限が確認可能に ¶
スナップショットの取得時期に加えて、有効期限のあるスナップショットは、その有効期限もリスト表示されるようになりました。
root@djanet:~# lxc info a1 Name: a1 Location: edfu Remote: unix:// Architecture: x86_64 Created: 2019/04/05 04:07 UTC Status: Stopped Type: persistent Profiles: default Snapshots: snap0 (taken at 2019/04/05 04:20 UTC) (expires at 2019/04/05 05:20 UTC) (stateless) snap1 (taken at 2019/04/05 04:50 UTC) (expires at 2019/04/05 05:50 UTC) (stateless) snap2 (taken at 2019/04/05 04:55 UTC) (expires at 2019/04/05 05:55 UTC) (stateless) snap3 (taken at 2019/04/05 04:52 UTC) (stateless) snap4 (taken at 2019/04/05 05:00 UTC) (expires at 2019/04/05 06:00 UTC) (stateless)
バグ修正 ¶
- client: Optimize copies on same nodes
- client: Properly generate events URL
- doc: Fix typo in api-extensions.md
- doc: Inform about ZFS pool default compression
- doc: Introduce volatile.idmap.current
- doc: Fix typo in faq.md
- doc: Tweak markdown format in storage.md
- doc: Update documentation for snapshots.pattern
- i18n: Update translations from weblate
- i18n: Update translation templates
- lxc: Use shared.IsSnapshot
- lxc/action: skip containers with intended state
- lxc/config: Use shared.IsSnapshot
- lxc/launch: Show start progress
- lxd: Don't leak netlink fds
- lxd: Drop initialShiftRootfs and always shift on start
- lxd/backups: Attempt to delete storage on failure
- lxd/backups: Cleanup on failure
- lxd/backups: Re-order checks for backup.yaml
- lxd/cluster: Export Snapshot function
- lxd/cluster: Initialize candid on join
- lxd/cluster: Limit log message forwarding
- lxd/containers: Cleanup shifting
- lxd/containers: Cleanup template application
- lxd/containers: Export container location
- lxd/containers: Fix crash on refresh of non-existing
- lxd/containers: Fix owner/mode of container path
- lxd/containers: Handle mid-remap containers
- lxd/containers: Properly handle tar shifting
- lxd/containers: Stop proxy before storage
- lxd/containers: Use LXC hook version 1
- lxd/devices: Cleanup GPU structs
- lxd/devices: Track vendor/product names and driver
- lxd/images: Don't keep an in-memory simplestreams cache
- lxd/internal: Expose raft-snapshot
- lxd/internal: Have GC endpoint release memory
- lxd/main_forkproxy: Fix epoll
- lxd/migration: Shift CRIU files to current map
- lxd/migration: Fix handling of missing profiles
- lxd/networks: Bring mtu device up
- lxd/patches: Fix names of pool volume LVs
- lxd/resources: Fix bad CPU reporting
- lxd/response: Simplify SmartError
- lxd/storage: Make use of shared.IsSnapshot
- lxd/storage: Remove setUnprivUserACL
- lxd/storage: Rename ShiftIfNecessary to resetContainerDiskIdmap
- lxd/storage: Rename shiftRootfs to initialShiftRootfs
- lxd/storage: Add helper function to get volume snapshots
- lxd/storage: Fix copying and moving volume snapshots
- lxd/storage/btrfs: Fix volume copy with snapshots
- lxd/storage/ceph: Always unmap after use
- lxd/storage/ceph: Fix copying existing volume snap
- lxd/storage/ceph: Fix volume copy with snapshots
- lxd/storage/ceph: Only freeze if needed
- lxd/storage/dir: Fix volume copy with snapshots
- lxd/storage/lvm: Fix LV naming
- lxd/storage/lvm: Fix volume copy with snapshots
- lxd/storage/lvm: Pass nouuid for xfs backups
- lxd/storage/zfs: Fix volume copy with snapshots
- lxd/storage/zfs: Run rename in clean mntns
- lxd/tasks: Avoid races on startup
- lxd-p2c: Workaround for broken /proc/self/exe
- shared: Switch ParseNumberFromFile to simple read
- shared/api: Drop StoragePool from Resources struct
- shared/api: Sort ServerEnvironment struct
- shared/idmap: Use separate uid and gid entries
- shared/osarch: Add Plamo x86 arch
- shared/simplestreams: Align JSON struct for images.json
- shared/simplestreams: Align JSON struct for index.json
- shared/utils: Do not chown terminal master fd
- tests: Add volume copy tests
- tests: Allow up to 15s for container reboot
- tests: Fix race condition in proxy test
- tests: Make proxy tests work with shiftfs
- tests: Make security tests work with shiftfs
- tests: Remove dead code
- tests: Update resources test
試用環境 ¶
この新しい LXD リリースは私たちの デモサービス で利用できます。
ダウンロード ¶
このリリースの tarball は ダウンロードページ から取得できます。