News

LXD 5.2 リリースのお知らせ

26th of May 2022

はじめに

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

今回は移行やストレージに関する様々な問題の解決にフォーカスを当てているため、機能的にはそれほど多くのものがあるわけではありませんが、それでも歓迎すべき変更や改良がいくつか含まれています。

Enjoy!

新機能とハイライト

リソース API での VPD 情報

スマート NIC のような複雑な PCI デバイスの識別と追跡を簡単にするため、利用できる場合は LXD リソース API で PCI VPD(Vital Product Data)を公開するようになりました。

次はサーバーに内蔵されたネットワークカードのエントリーの例です:

{
        "driver": "ixgbe",
        "driver_version": "5.17.6+",
        "iommu_group": 54,      
        "numa_node": 0,
        "pci_address": "0000:01:00.1",
        "product": "Ethernet Controller 10-Gigabit X540-AT2",
        "product_id": "1528",   
        "vendor": "Intel Corporation",
        "vendor_id": "8086",    
        "vpd": {
                "entries": {
                        "PN": "AOC-UR-i4XT",
                        "SN": "OA14BS031362",
                        "V0": "0100",
                        "V1": "1.01",
                        "V2": "002590FB3BBD",
                        "V3": "002590FB3BBC",   
                        "V4": "",               
                        "V5": "",               
                        "VA": "2"               
                },
                "product_name": "Supermicro Network Adapter"
        }
}

プロジェクトをまたいだプロファイルのコピー

コマンドラインツールで、--target-project パラメーターを使ってあるプロジェクトから別のプロジェクトへのプロファイルのコピーができるようになりました。

stgraber@dakara:~$ lxc profile list --project default
+---------+---------------------+---------+
|  NAME   |     DESCRIPTION     | USED BY |
+---------+---------------------+---------+
| bar     |                     | 0       |
+---------+---------------------+---------+
| default | Default LXD profile | 13      |
+---------+---------------------+---------+
stgraber@dakara:~$ lxc profile list --project demo
+---------+--------------------------------------+---------+
|  NAME   |             DESCRIPTION              | USED BY |
+---------+--------------------------------------+---------+
| default | Default LXD profile for project demo | 0       |
+---------+--------------------------------------+---------+
stgraber@dakara:~$ lxc profile copy bar bar --project default --target-project demo
stgraber@dakara:~$ lxc profile list --project demo
+---------+--------------------------------------+---------+
|  NAME   |             DESCRIPTION              | USED BY |
+---------+--------------------------------------+---------+
| bar     |                                      | 0       |
+---------+--------------------------------------+---------+
| default | Default LXD profile for project demo | 0       |
+---------+--------------------------------------+---------+
stgraber@dakara:~$

/dev/lxd API での HTTP ストリーミングサポート

LXD インスタンス内の /dev/lxd/sock を通して公開される REST API は長らく /1.0/events エンドポイントを持ち、LXD から来るイベントをリスンしていました。

これまで、このエンドポイントでは websocket を使用する必要があり、安定した websocket サポートを持たない cloud-init やその他のツールでは問題となることがわかっていました。

このようなツールに対応するため、このエンドポイントは HTTP ストリーミングもサポートするようになり、HTTP エンドポイントを通して JSON 構造体のストリームを取得できるようになりました。

root@u1:~# curl --unix-socket /dev/lxd/sock -N lxd/1.0/events
{"type":"config","timestamp":"2022-05-26T23:33:03.481505039-04:00","metadata":{"key":"user.foo","old_value":"","value":"bar"}}

CLI でのサーバーサイドフィルタリングの使用

大きな lxc list の呼び出しでスピードが上がるのがわかる以外には、直接目に見える変化はありませんが、多数のフィルタリングがクライアントサイドのフィルタリングではなくサーバーサイドのフィルタリングを使うようになりました。

仮想マシンでの Ceph librbd

直接目につかない他の変更点に、Ceph 上に保存された仮想マシンの安定性と柔軟性をかなり向上させるものがあります。以前の LXD のリリースでは、LXD はカーネルの RBD ドライバーに依存し、VM のディスクをマッピングし、それを QEMU に公開していました。

このリリースから、LXD は直接 Ceph とやりとりするために QEMU に librbd の使用を指示するようになりました。カーネルドライバーを使わないようにするだけでなく、システムの ceph.conf を通して Ceph RBD キャッシュを調整できるようになりました。

すべての変更点

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • lxd/storage/drivers/btrfs: Modify received UUID
  • lxd/storage/drivers/btrfs: Set Received UUID
  • test: Extend migration refresh test
  • lxd/secommp: Fix sysinfo syscall interception on 32 bit platforms
  • client/util: Add timeouts to tlsHTTPClient
  • client/util: Add timeouts to unixHTTPClient
  • lxd/cluster/tls: Add timeouts to tlsTransport
  • lxd/main/shutdown: Increase default timeout in cmdShutdown
  • lxd/util/http: Adds timeouts in HTTPClient
  • lxd/vsock/vsock: Adds timeouts in HTTPClient
  • shared/cert: Adds timeouts in GetRemoteCertificate
  • lxd/certificates: Simplify non-admin check
  • lxd/certificates: Comment the logic a bit
  • lxd/certificates: Move duplicate cert detection
  • doc: Fix typos
  • server.crt referred to as lxd.crt in the prometheus config file
  • doc: headings and whitespace
  • doc: check for inclusive language
  • doc: change to "Machine in the middle"
  • doc: add exceptions for inclusive language
  • doc: update doc for OVN peer routing relationships
  • github: Re-organize workflows
  • github: Add DCO check
  • github: Split static builds from tests
  • github: Add branch target test
  • github: Run commit tests on target
  • github: Fix commit checks
  • doc: update firewall configuration documentation
  • doc: add a section about LXD and Docker
  • shared/network: Always return 0 on error
  • lxd/utils: Improve errors in instancesExist
  • lxd/device/disk: Improve error in validateConfig
  • lxd/utils: Check snapshots only once in instancesExist
  • i18n: Update translation templates
  • doc: Fix typo
  • lxd: Prevent use of instance/snapshot name in instance specific routes
  • doc: document how to handle SAN vs target name mismatch in Prometheus sample
  • lxc/list: Don't skip extra info when name filtering
  • doc: rework doc for setting up OVN
  • lxd/certificates: Fix token request validation
  • doc: add a Discourse link about simple streams
  • lxc/config_trust: revoke-token requires a name, not a token
  • i18n: Update translation templates
  • lxd/project: Fix bad error on invalid instance type
  • lxc/config_trust: update help when client should be singular
  • lxc/config_trust: clarify help for join token creation
  • i18n: Update translation templates
  • lxd/daemon: Fix LXD crash is failing to start due to already running LXD process
  • lxd/request: Export CtxKey type and use for all keys.
  • lxd/storage/drivers/driver/zfs/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/driver/lvm/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/driver/ceph/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/volumes: v.driver.MountVolumeSnapshot usage in MountTask
  • lxd/storage/drivers/interface: Removes ourMount indicator from MountVolumeSnapshot
  • lxd/storage/backend/lxd: b.driver.MountVolumeSnapshot usage
  • lxd/storage/drivers/driver/mock: Updates MountVolumeSnapshot
  • lxd/storage/driver/driver/btrfs/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/ceph/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/cephfs/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/dir/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/lvm/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/zfs/volumes: Adds ref counting to MountVolumeSnapshot
  • doc: add a JSON file that defines the doc versions
  • lxc/config: no name shown when editing the instance's config
  • i18n: Update translation templates
  • api: resources_pci_vpd
  • shared/api: Add VPD to PCI in resources
  • lxd/resources: Fix comment
  • lxd/resources: Add PCI VPD support
  • doc/rest-api: Refresh swagger YAML
  • lxd/response: Adds nolint directive for deadcode.
  • lxd: Removes unused test function (deadcode).
  • lxd/network/openvswitch/ovn: Pass --wait=sb when using ovn-nbctl
  • lxd/network/driver/ovn: Fix cleanup of bridge mappings of physical OVS parent
  • lxd/storage/backend/lxd: Restore instance snapshot volume config and description
  • test: Adds tests for restoration of instance volume snapshot config
  • test: Run snapshot naming tests for all storage pool types
  • shared/instance: Adds volatile.apply_nvram config key
  • lxd/instance/drivers/driver/qemu: Regenerate nvram on next start when security.secureboot profile config is changed
  • doc/instances: Documents VM volatile.apply_nvram setting
  • test/static_analysis: Adds golangci-lint and runs deadcode.
  • lxd/resources: Handle negative CPU indexes
  • lxc/config_device: Add extra example to device add
  • i18n: Update translation templates
  • lxc/profile: Add cross-project copy
  • lxd: Increase client header timeout from 30s to 1 hour
  • client: Increase header timeout from 30s to 1 hour
  • shared/cert: Increase header timeout from 30s to 1 hour
  • lxc/config_device: Fix small typo
  • i18n: Update translation templates
  • tests: Test project profile copy
  • lxd/storage/utils: Updates DB functions to take Pool interface argument
  • lxd/storage/utils: Updates VolumeDBSnapshotsGet to align with other DB function arguments
  • lxd/migrate/storage/volumes: storagePools.VolumeDBSnapshotsGet usage
  • lxd/storage/backend/lxd: Update DB function usage to pass Pool
  • lxd/storage/backend/lxd: Updates UpdateInstanceBackupFile to use VolumeDBGet
  • lxd/storage/backend/lxd: Preallocate snapshot slice in UpdateInstanceBackupFile
  • lxd/db/storage/volumes: Populate content type and config in GetLocalStoragePoolVolumeSnapshotsWithType
  • lxd/storage/backend: Populate instance storage volume snapshots in UpdateInstanceBackupFile
  • lxd/backup: Switch to storagePools.VolumeDBGet in volumeBackupCreate
  • lxd/backup: Updates volumeBackupWriteIndex to use storagePools.VolumeDBSnapshotsGet
  • lxd/db/storage/volumes/snapshots: Removes unused function GetStorageVolumeSnapshotsNames
  • lxd/storage/backend/lxd: Updates BackupCustomVolume to use VolumeDBSnapshotsGet
  • lxd/images: Remove references to cluster node in user facing error messages
  • lxd/db/query/transaction: Start errors with capital letter
  • lxd/backup: Whitespace
  • lxd/backup: Populate volume config in backupWriteIndex
  • test: Add tests for checking that storage volume records are exported and restored from backups
  • lxd/storage/utils: Adds removeUnknownKeys argument to VolumeDBCreate
  • lxd/storage/backend/lxd: VolumeDBCreate updated usage
  • lxd/storage/backend/lxd: Updates CreateInstanceFromMigration to strip unknown storage volume config keys
  • lxd/storage/backend/lxd: Don't strip unknown storage volume keys for same pool copies in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Updates CreateCustomVolumeFromMigration to strip unknown storage volume config keys
  • lxd/storage/backend/lxd: VolumeDBCreate updated usage when stripping unknown storage volume config keys
  • lxd/storage/backend/lxd: Updates CreateInstanceFromBackup to use storage volume config from backup
  • lxd/storage/backend: Copy snapshot config for same-pool copies in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Use snapshot volume config when restoring custom volume in CreateCustomVolumeFromBackup
  • test: Add tests to check snapshot volume config is restored from backup
  • lxc/config_trust: Fix single argument trust remove
  • i18n: Update translation templates
  • lxd/filter: Support case insensitive and regular expresions
  • client: Add support for server-side filtering for CLI list commands
  • lxc/list: Use server-side filtering for list command
  • lxc/image: Use server-side filtering for list command
  • lxc/storage_volume: Use server-side filtering for list command
  • lxc/utils: Add structHasField and getServerSupportedFilters
  • i18n: Update translation templates
  • Revert "lxc/config: no name shown when editing the instance's config"
  • shared/api: Mark ExpandedConfig and ExpandedDevices fields as omitempty
  • lxc/config: Exclude expanded config from edit screen
  • lxd/filter/value: Fix parsing of yaml tags in ValueOf
  • i18n: Update translation templates
  • test: Check instance name in edit screen
  • lxd/resources: Handle unreadable VPD
  • lxd/device: Add rbd format constants
  • lxd-agent/state: Handle cgroup v2 cpu usage
  • lxd-agent/state: Use /proc/meminfo
  • lxd/device: Add DiskGetRBDFormat
  • lxd/device: Add DiskParseRBDFormat
  • lxd/storage/drivers/ceph: Add cluster and user name constants
  • lxd/storage/drivers/ceph: Use constants
  • lxd/device/disk: Use ceph constants
  • lxd/instance/drivers/qmp: Add AddSecret
  • lxd/storage/drivers/ceph: Add CephGetRBDImageName
  • lxd/instance/drivers/qemu: Use QEMU rbd driver if possible
  • lxd/device/disk: Use rbd syntax for rbd volumes
  • lxd/storage/drivers/ceph: Fix typo
  • lxd/instance/drivers/qemu: Handle rbd root devices
  • lxd/instance: Fix auto-snapshot on restricted projects
  • lxd/instance/qemu: Fix ceph username key
  • lxd/instance/qemu: Fix ceph volname in projects
  • test: Add additional tests for checking volume snapshot config is copied
  • lxd/storage/volume: Use source snapshot volume config when copying to new volume in cmdStorageVolumeCopy
  • lxd/storage/volume: Fix move of snapshot in cmdStorageVolumeCopy
  • test: Adds check that source snapshot config is used when copying snapshot to new volume
  • lxd/cluster/heartbeat: Improve heartbeat logging
  • doc: add link to YouTube video for network ACLs
  • lxd-agent/devlxd: Don't expand format strings
  • lxd/instance/drivers/qemu: Set conf option in rbd driver
  • lxd/storage/pool/interface: Add GenerateInstanceBackupConfig definition
  • lxd/storage/backend/mock: Adds GenerateInstanceBackupConfig definition
  • lxd/storage/backend/lxd: Splits UpdateInstanceBackupFile into GenerateInstanceBackupConfig
  • lxd/backup: Updates backupWriteIndex to use pool.GenerateInstanceBackupConfig
  • lxd/storage/pool/interface: Adds GenerateCustomVolumeBackupConfig definition
  • lxd/storage/backend/mock: Adds GenerateCustomVolumeBackupConfig function
  • lxd/storage/backend/lxd: Adds GenerateCustomVolumeBackupConfig function
  • lxd/backup: Updates volumeBackupWriteIndex to use pool.GenerateCustomVolumeBackupConfig
  • lxd/backup: Move config struct into own package to use in non-cgo applications
  • lxd/api/internal: backup.ConfigToInstanceDBArgs usage
  • lxd/api/internal/recover: backupConfig usage
  • lxd/api/internal/recover: backup.ConfigToInstanceDBArgs usage
  • lxd/backup/backup/info: config.Config usage
  • lxd/instance/instance/utils: backup.ConfigToInstanceDBArgs usage
  • lxd/migrate/storage/volumes: Switch to using pool.GenerateCustomVolumeBackupConfig
  • lxd/storage/backend/lxd: backupConfig.Config usage
  • lxd/storage/backend/mock: backupConfig.Config usage
  • lxd/storage/pool/interface: backupConfig.Config usage
  • lxd/storage/backend/lxd: Fix incorrect revert in ImportCustomVolume
  • lxd/instance/drivers/qemu: Fix ceph conf filename
  • lxd/storage/drivers: Handle seek errors
  • lxd/storage/backend/lxd: Handle error from vol.MountTask in detectUnknownCustomVolume
  • lxd/storage/backend/lxd: Handle srcVol.MountTask errors
  • lxd-generate: Explictly ignore rows.Close error in defer.
  • lxd/db: Regenerate database methods.
  • tests: Test stateless migration
  • client: Checks or explicitly ignores errors.
  • fuidshift: Checks or explicitly ignores errors.
  • lxd/db/generate/db/stmt: Use join tag value instead of hardcoded 'name'
  • lxc: Checks or explicitly ignores errors.
  • lxc-to-lxd: Checks or explicitly ignores errors.
  • lxd-agent: Checks or explicitly ignores errors.
  • lxd-benchmark: Checks or explicitly ignores errors.
  • lxd-migrate: Checks or explicitly ignores errors.
  • lxd-user: Checks or explicitly ignores errors.
  • shared: Checks or explicitly ignores errors.
  • test/macaroon-identity: Explicitly ignores errors.
  • lxd/apparmor: Checks or explicitly ignores errors.
  • lxd/archive: Checks or explicitly ignores errors.
  • lxd/backup: Checks or explicitly ignores errors.
  • lxd/bgp: Checks or explicitly ignores errors.
  • lxd/cluster: Checks or explicitly ignores errors.
  • lxd/config: Checks or explicitly ignores errors.
  • lxd/db: Checks or explicitly ignores errors.
  • lxd/device: Checks or explicitly ignores errors.
  • lxd/dns: Checks or explicitly ignores errors.
  • lxd/endpoints: Checks or explicitly ignores errors.
  • lxd/events: Checks or explicitly ignores errors.
  • lxd/firewall: Checks or explicitly ignores errors.
  • lxd/fsmonitor: Checks or explicitly ignores errors.
  • lxd/instance: Checks or explicitly ignores errors.
  • lxd/maas: Checks or explicitly ignores errors.
  • lxd/metrics: Checks or explicitly ignores errors.
  • lxd/migration: Checks or explicitly ignores errors.
  • lxd/network: Checks or explicitly ignores errors.
  • lxd/operations: Checks or explicitly ignores errors.
  • lxd/rbac: Checks or explicitly ignores errors.
  • lxd/resources: Checks or explicitly ignores errors.
  • lxd/response: Checks or explicitly ignores errors.
  • lxd/rsync: Checks or explicitly ignores errors.
  • lxd/storage: Checks or explicitly ignores errors.
  • lxd/sys: Checks or explicitly ignores errors.
  • lxd/task: Checks or explicitly ignores errors.
  • lxd/util: Checks or explicitly ignores errors.
  • lxd/seccomp: Checks or explicitly ignores errors.
  • lxd/ip: Checks or explicitly ignores errors.
  • lxd: Checks or explicitly ignores errors.
  • test: Adds errcheck linter and list of excludes.
  • i18n: Updates translations.
  • lxd/storage/backend/lxd: Fix argument logging name in MigrateCustomVolume and CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: Fix refresh of non existent volume in CreateCustomVolumeFromMigration
  • test: Add checks for custom storage volume refresh
  • doc/storage: Add CEPHFS to table
  • docs: Typo in ovn docs
  • doc: add a version switcher to the docs
  • lxd: Add allowInconsistent to migration fields.
  • lxd: Default allowInconsistent to false for snapshots.
  • lxd: Pass allowInconsistent to migration source on instance post.
  • lxd/storage/drivers: Optionally ignore rsync error 24 for local copy.
  • lxd/storage/drivers: Updates calls to genericVFSCopy.
  • lxd/storage/drivers: Add allowInconsistent to CreateVolumeFromCopy on driver interface.
  • lxd/storage: Pass allowInconsistent into driver.CreateVolumeFromCopy.
  • lxd: Use allowInconsistent for pool and project migrations.
  • lxd/instances/post: Handle unknown errors in createFromMigration
  • lxd/migration: Updates proto buf version
  • lxd/migration/utils: Adds IndexHeaderVersion to migration header
  • lxd/migration/utils: Updates comments on constant to indicate index header may be sent first
  • lxd/migration/utils: Adds IndexHeaderVersion constant
  • test: Adds cross pool checking of storage volume snapshot config population
  • lxd/migration/migration/volumes: Adds IndexHeaderVersion to VolumeSourceArgs and VolumeTargetArgs
  • lxd/migration/migration/volumes: Adds InfoResponse struct
  • lxd/storage/backend/lxd: Updates CreateCustomVolumeFromCopy to use srcPool.GenerateCustomVolumeBackupConfig
  • lxd/storage/backend/lxd: Add support for migration index header and response in MigrateCustomVolume and CreateCustomVolumeFromCopy
  • lxd/migrate/storage/volumes: Add support for migration index frame for custom volume migration
  • lxd/storage/backend/lxd: Update RefreshCustomVolume to use srcPool.GenerateCustomVolumeBackupConfig
  • lxd/storage/utils: Removes unused syncSnapshotsVolumeGet function
  • test: Expand test_storage_local_volume_handling tests to check for custom volume refresh
  • test: Add checks for custom storage volume config copy in migration
  • lxd/storage/drivers: Adds allowInconsistent argument to RefreshVolume.
  • lxd/storage: Pass allowInconsistent flag into volume refresh call.
  • lxd/instance/qemu: Implement qemuBaseSections
  • lxd/instance/qemu: Replace qemuBase template with qemuBaseSections
  • lxd/bgp: Enable multihop
  • doc: move content to different files
  • doc: add a link to the YouTube video on BGP
  • lxd/apparmor: Add mknod cap to archive
  • lxd/instance/qemu: Fix some variable names to match code style
  • doc: remove duplicate entries
  • doc: spell out configuration option
  • doc: fix capitalization of Ceph, CephFS, Btrfs, LVM and ZFS
  • lxd/sys: Add ReleaseInfo
  • lxd/api: Switch to OS struct for release info
  • lxd/api: Reduce number of DB queries
  • lxd/sys: Move KernelVersion from state
  • lxd/sys: Add Uname
  • lxd/cluster/config: Split to separate package
  • lxd/state: Add global configuration
  • lxd/cluster/config: Update for golint
  • lxd: Update for config function names
  • lxd/daemon: Setup globalConfig
  • lxd/api_cluster: Reduce calls to State
  • lxd/daemon_config: Use GlobalConfig
  • lxd/api_1.0: Update daemon config
  • lxd/state: Add ServerName
  • lxd/daemon: Fill ServerName
  • lxd/api_1.0: Use state variables
  • lxd/api: Don't access DB on every request
  • lxd/storage_volumes_snapshot: Port to State config
  • lxd/instance_post: Port to State config
  • lxd/cluster: Port to State config
  • lxd/instances_post: Port to State config
  • lxd/images: Port to State config
  • lxd/cluster/config: Add MetricsAuthentication
  • lxd/api_metrics: Avoid needless DB calls
  • lxd/network: Disable IPv6 on bridges with no IPv6 address
  • lxd/db/snapshots: Add by-ID
  • lxd/db/snapshots: Add GetLocalExpiredInstanceSnapshots
  • tests: Don't route IPv6 on network without IPv6
  • lxd/instance/lxc: Reduce DB calls in Metrics
  • lxd/cluster/config: Update test for new package
  • lxd/api_cluster: Update serverName on bootstrap/join
  • lxd/state: Initialize GlobalConfig in testing struct
  • lxd/cluster: Update for State config
  • lxd/daemon: Use Mutex around globalConfig and serverName
  • lxd/api_cluster: Use Mutex around serverName
  • lxd/instance: Use GetLocalExpiredInstanceSnapshots
  • lxd/storage_volumes_snapshots: Don't trigger expiry task on load
  • lxd/db/storage_volumes_snapshots: Skip snapshots with NULL expiry
  • lxd/events/connections: Add EventListenerConnection interface
  • lxd/events: Implement websocketListenerConnection
  • lxd/events: Implement streamListenerConnection
  • lxd/events/common: Remove unused WriteMessage function
  • lxd/events: Use EventListenerConnection in listenerCommon
  • lxd/devlxd: Support http streaming
  • lxd-agent/events: Support http streaming
  • lxd: Use EventListenerConnecion
  • lxd/events: s/heartbeat/start/
  • test/deps/devlxd-client: Add stream monitor
  • test: Add devlxd http stream
  • gomod: Update dependencies
  • i18n: Update translations from weblate
  • lxd/db: Port GetStoragePoolVolumesWithType to ClusterTx
  • lxd/storage_volumes_snapshots: Update to ClusterTx
  • lxd/main_activateifneeded: Update to ClusterTx
  • lxd/instance: Optimize instance snapshots

試用環境

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

ダウンロード

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

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

LXD 5.1 リリースのお知らせ

28th of April 2022

はじめに

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

このリリースは LXD 5.0 LTS に続く、多数のバグ修正を含むリリースです。このバグ修正は、今後リリースされる LXD 5.0.1 LTS バグ修正リリースにも含まれる予定です。心配は無用です。新機能もいくつかあります。

Enjoy!

新機能とハイライト

sysinfo システムコールのインターセプション

新たに security.syscalls.intercept.sysinfo を追加しました。これを有効にすると、LXD は sysinfo システムコールをインターセプトし、このシステムコールをエミュレートします。

これにより、通常は物理システム全体を反映した値をコンテナの値を反映した値に適切に置き換えることができるようになります。

コンテナ内で使用されているソフトウェアによっては、これを有効にすることでコンテナの制限を尊重するより良いサービス設定につながる可能性があります。

stgraber@dakara:~$ lxc launch images:alpine/edge a1 -c limits.memory=1GiB
Creating a1
Starting a1
stgraber@dakara:~$ lxc exec a1 -- free -m
              total        used        free      shared  buff/cache   available
Mem:          63600       57777        5792        1572          31        1022
Swap:          2048           8        2040
stgraber@dakara:~$ lxc config set a1 security.syscalls.intercept.sysinfo=true
stgraber@dakara:~$ lxc restart a1
stgraber@dakara:~$ lxc exec a1 -- free -m
              total        used        free      shared  buff/cache   available
Mem:           1024           2        1020           0           3        1022
Swap:             0           0           0
stgraber@dakara:~$

lxc cluster role サブコマンド

クラスターメンバーロールの追加や削除をスクリプティングの助けになるよう、新たに lxc cluster role サブコマンドを追加しました。

  stgraber@castiana:~$ lxc cluster role add celestis ovn-chassis
  stgraber@castiana:~$ lxc cluster role remove celestis ovn-chassis

lxc storage volume info によるボリューム総量の表示

lxc storage volume info コマンドは、使用量と総量がわかっている場合、両方を表示するようになりました。

stgraber@dakara:~$ lxc storage volume create default foo size=5GiB
Storage volume foo created
stgraber@dakara:~$ lxc storage volume info default foo
Name: foo
Type: custom
Content type: filesystem
Usage: 192.00KiB
Total: 5.00GiB

ホストのネットワークインターフェースのネーミングパターンが設定可能に

新たに instances.nic.host_name というサーバー設定項目を追加し、ホスト側のネットワークインターフェースを作成するときに、使用するパターンを変更できるようになりました。

デフォルトでは、LXD は random パターンを使います。この値は、vethXYZtapXYZ のような、XYZ が完全にランダムな文字列からなるインターフェース名になります。しかし、これではネットワーク名から特定のインスタンスを見つけるのが簡単ではありません。

代わりに、この新しい設定を mac と設定できます。このように設定すると、インターフェース名は lxd の文字列の後に MAC アドレスの最も重要な部分を含む名前になります。

stgraber@dakara:~$ lxc launch images:alpine/edge a1
Creating a1
Starting a1
stgraber@dakara:~$ lxc info a1 | grep "Host interface"
      Host interface: veth0c1f893c
stgraber@dakara:~$ lxc config set instances.nic.host_name mac
stgraber@dakara:~$ lxc restart a1
stgraber@dakara:~$ lxc info a1 | grep "Host interface"
      Host interface: lxd163ecf0121

退避モードのオーバーライド

クラスターメンバーの退避を行う際、LXD は cluster.evacuate の値を見て、それぞれのインスタンスについて何をすべきかを決定します。これは通常のクラスター退避の場合には有効に働きますが、クラスター全体のシャットダウンを待っている場合などは、この動作を上書きしたい場合があります。

lxc cluster evacuate --action=stop を使うと、設定に関わらずすべてのインスタンスがストップします。これをすべてのクラスターメンバーに行うと、クラスター全体をシャットダウンする準備が整います。バックアップが完了したら、lxc cluster restore を使うと、すべてのインスタンスが起動状態に戻ります。

イメージコピー中のプロファイル設定

かなり長い間、LXD は特定のイメージにプロファイルのリストを割り当てることをサポートしています。イメージから作成した新しいインスタンスが、これらのプロファイルを取得し適用します(ユーザーがそれをオーバーライドする指示をしない限り)。

これまでは、イメージがイメージストアに追加されたあとに、lxc image edit を使って、このような設定をセットアップする必要がありました。

このリリースで、lxc image copy--profile フラグを追加しました。これにより、イメージのコピー時に直接プロファイルを追加できるようになりました。

stgraber@dakara:~$ lxc profile create foo
Profile foo created
stgraber@dakara:~$ lxc profile create bar
Profile bar created
stgraber@dakara:~$ lxc image copy images:alpine/edge local: --alias alpine --profile default --profile foo --profile bar
Image copied successfully!
stgraber@dakara:~$ lxc launch alpine a1
Creating a1
Starting a1
stgraber@dakara:~$ lxc config show a1
architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine edge amd64 (20220427_13:00)
  image.os: Alpine
  image.release: edge
  image.requirements.secureboot: "false"
  image.serial: "20220427_13:00"
  image.type: squashfs
  image.variant: default
  volatile.base_image: d263389bb3f9298a7de94cb11c1b44b12dcc7191be3aca245ae2f7cdf380be02
  volatile.cloud-init.instance-id: b7b2e897-231c-4a7a-852d-b0dc1e8945f6
  volatile.eth0.host_name: veth129b577b
  volatile.eth0.hwaddr: 00:16:3e:af:81:98
  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: cd2edd5b-4d22-4222-8de4-1e7b5304fb22
devices: {}
ephemeral: false
profiles:
- bar
- default
- foo
stateful: false
description: ""

すべての変更点

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • doc: move networking content to new files
  • doc: add new files to the networking docs
  • doc: move network-peers
  • doc: move network-acls
  • doc: move network-forwards
  • doc: move network-zones
  • doc: clean up headings for networking section
  • doc: update and add content for networking
  • doc: add links to network_ovn_peers
  • doc: add links to network_zones
  • doc: add links to network_forwards
  • doc: add links to network_acls
  • doc: general cleanup
  • doc: general cleanup network_acls
  • doc: general cleanup network_forwards
  • doc: general cleanup network_zones
  • lxd/storage/btrfs: Fix usage nested
  • lxd/instance/qemu: Fix bad topoext logic
  • lxc: Fix typo in notes
  • lxd/networks: Removes references to nodes in user facing errors
  • lxd/networks: Clone per-node config on networksPostCluster
  • lxd/storage/pools: Removes references to nodes in user facing errors
  • lxd/db/storage/pools: Renames StoragePoolNodeConfigKeys to NodeSpecificStorageConfig
  • lxd: db.NodeSpecificStorageConfig usage
  • lxd/cluster/config: Remove legacy server level storage settings defaults
  • lxd/cluster/config: Remove deprecatedStorage
  • lxd/storage/utils: Removes ValidName
  • lxd/storage/pool/interface: Adds Type interface
  • lxd/storage/pool/load: Adds LoadByType function
  • lxd/storage/backend/mock: Adds ValidateName function
  • lxd/storage/backend/lxd: Adds ValidateName function
  • lxd/storage/utils: Improve validation of rsync.bwlimit
  • lxd/storage/backend/lxd: Validate earlier in Create
  • lxd/storage/pools/utils: Updates storagePoolValidate to use poolType.ValidateName
  • lxd/storage/volumes/snapshot: Updates storagePoolVolumeSnapshotsTypePost to use pool.ValidateName
  • lxd/storage/utils: Unexport some variables now unused outside of storage package
  • lxd/storage/pool/interface: Adds Validate signature
  • lxd/storage/backend/lxd: Adds Validate function
  • lxd/storage/backend/mock: Adds Validate function
  • lxd/storage/backend/lxd: Call b.ValidateName in Create
  • lxd/storage: size is not a common pool option
  • lxd/storage/drivers/driver/common: Removes pool name from validatePool errors
  • lxd/storage/pools: Don't call storagePoolValidate from storagePoolsPostCluster
  • lxd/storage/pools: Call pool.Validate directly in doStoragePoolUpdate
  • lxd/storage/pools/utils: Call poolType.Validate in storagePoolValidate
  • lxd/storage/pools/config: Remove legacy storagePoolConfigKeys and storagePoolValidateConfig
  • lxd/storage/pools: Clone per-node config in storagePoolsPostCluster
  • lxd/storage/pools/utils: Whitespace in storagePoolDBCreate
  • lxd/storage/pools/utils: Expand arg types to storagePoolDBCreate
  • lxd/storage/pools/utils: Use revert in storagePoolCreateGlobal
  • lxd/storage/pools/config: Remove file
  • lxd/storage/pools/utils: Removes call to storagePoolFillDefault in storagePoolDBCreate
  • lxd/storage/pools/utils: Rely on pool.Create to fill default pool config in storagePoolCreateLocal
  • lxd/storage/drivers/utils: Adds loopFileSizeDefault function
  • lxd/storage/drivers: Generate per-node loop file size from loopFileSizeDefault in Create
  • lxd/storage/drivers/driver/lvm/utils: Adds lvmThinpoolDefaultName constant
  • lxd/storage/drivers/driver/lvm: Populate lvm.thinpool_name if not specified in Create
  • lxd/storage/utils: Removes unused functions and variables
  • lxd/storage/pool/load: Removes unused CreatePool function
  • lxd: Fix typo in notes
  • doc/rest-api: Refresh swagger YAML
  • shared: Adds method to remove elements from a slice.
  • lxc: Adds cluster role / commands.
  • i18n: Update translation templates.
  • test: Removes cluster edit where possible.
  • lxd/db/generate/db/method/v2: Add V2 method generation
  • lxd/db/certificate/projects.mapper: Update generated code
  • lxd/db/certificates: Remove Projects from db Certificate struct
  • lxd/db/certificates.mapper: Update generated code
  • lxd/db: Use ClusterTx with ToAPI for filling reference fields
  • lxd/db/certificates: Pass projects into create/update helpers
  • lxd/db/certificates: Transition to using ClusterTx
  • lxd/events: Use ClusterTx instead of opening new transactions
  • lxd/certificates: Open fewer txes, use API structs for all fields
  • lxd/api/cluster: Update cert projects manually
  • lxd/instance/drivers/qemu: Add serial key to device
  • shared: Add SplitNTrimSpace
  • lxc: Move to shared.SplitNTrimSpace
  • lxd: Move to shared.SplitNTrimSpace
  • lxd/util: Remove SplitNTrimSpace
  • lxd/cluster: Don't overwrite original volatile.evacuate.origin
  • lxd/daemon/images: Renames imageDownloadLock to imageOperationLock
  • lxd/images: Use SmartError when handling error from d.cluster.GetImage
  • lxd/images: Use imageID rather than imageId
  • lxd/images: Add locking on imageDelete
  • shared/api: Add Total field
  • lxd: Add total field to /1.0/storage-pools/{name}/volumes/{type}/{volume}/state API
  • api: storage_volume_state_total
  • lxd/db/generate: Replace ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/db: Applies changes to db generator
  • doc/rest-api: Refresh swagger YAML
  • lxd/util/net: Assign default port if no port given
  • lxd/instance/qemu: Allow using external firmware or kernel
  • lxd/instance/drivers: Fix context logging
  • lxd/storage/utils: Use volName in context logging for consistency
  • lxd/storage/volumes/snapshots: Use volName in context logging for consistency
  • lxd/storage/drivers/driver/ceph/utils: Use volName in context logging for consistency
  • lxd/storage/drivers/driver/lvm/volumes: Remove non-thinpool volume activation/deactivation workarounds
  • lxd/storage/drivers/driver/lvm/utils: Updates activateVolume and deactivateVolume to accept Volume type
  • lxd/storage/drivers/driver/lvm: activateVolume and deactivateVolume usage
  • lxd/storage/drivers/generic/vfs: Check for close errors
  • shared/instancewriter/instance/tar/writer: Check for close errors
  • doc: move Sphinx extensions to a separate repo
  • lxd/storage/drivers/volume: Check for unmount errors in MountTask
  • lxd/device/device/utils/disk: Use storageDrivers.TryUnmount without MNT_DETACH in DiskMountClear
  • doc: whitespace changes and reordering content
  • doc: add headings
  • lxd/storage/drivers/utils: Adds debug logging to TryUnmount
  • lxd/instance/qemu: Tweak warning on -bios/-kernel
  • lxd/storage/drivers/driver/lvm/utils: Don't deactivate non-thinpool snapshot volume if parent mounted
  • test: Removes old storage pool driver exclusions
  • lxd/storage/drivers/generic/vfs: Detect close errors in genericVFSMigrateVolume
  • lxd/instance: Fix RuntimeLiblxcVersionAtLeast to handle ~
  • shared: allow EOPNOTSUPP from llistxattr()
  • doc: update BGP server documentation
  • lxd/instance/drivers/driver/qemu: Correctly detect dish source path filesystem
  • lxd/instance/drivers/driver/qemu: Improve disk error context and comments
  • lxd/instance/drivers/driver/qemu: Fixes incorrect FD garbage collection in addDriveConfig
  • lxd/instance/drivers/driver/qemu: Remove unnecessary duplicated stat of disk source
  • lxd/instance/drivers/driver/qemu: Add input checks to addDriveConfig
  • lxd/device/disk: Pass cloud-init:config drive to QEMU using file descriptor
  • lxd/device/disk: Return explicit nil on error in localSourceOpen
  • test/suites/migration: Check optimized refresh
  • lxd/storage/drivers/btrfs: Change how subvolumes are received
  • lxd/storage/drivers/btrfs: Move subvolumes after reception
  • lxd/storage/drivers/btrfs: Update CreateVolumeFromBackup
  • lxd/instance/operationlock: Add update
  • lxd/instance/lxc: Use locking in Update
  • lxd/instance/qemu: Use locking in Update
  • lxd/instance/qemu: Replace container with instance
  • lxd/instance: Reword operationlock errors
  • lxd/migration/wsproto: Check websocket argument
  • lxd/storage/backend: Fix VolumeDBDelete revert
  • lxd/cluster: fix typo in comment
  • test/includes: remove unnessary subshells
  • lxd/api/cluster: Remove duplicated not found error handling
  • lxd/api: Update not found error matching
  • lxd/db: Replaces use of ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/db/errors: Removes ErrNoSuchObject constant
  • lxd/db: Don't use "node" in user facing errors
  • lxd/db/network/zones: Fix query case in GetNetworkZone
  • lxd/operations: Replace use of db.ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/response/smart: Remove db.ErrNoSuchObject use
  • lxd/storage/drivers/driver/ceph: Replaces use of db.ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/storage/drivers/lvm: Replaces use of errLVMNotFound with api.StatusErrorf(http.StatusNotFound)
  • lxd/backup/backup/config: Default to container instance type if not specified in backup config
  • test: Update backup test error response checks
  • lxd/storage/drivers/zfs: Close stderr after copy
  • doc: order tables alphabetically
  • doc: add IDs for easier linking
  • doc: move content to different files and include
  • doc/network/bridge: move IPv6 prefix section
  • doc/network/bridge: make config table for network_bridge consistent
  • doc/network/ovn: make config table for network_ovn consistent
  • doc/network/macvlan: make config table for network_macvlan consistent
  • doc/network/physical: make config table for network_physical consistent
  • doc/network/sriov: make config table for network_sriov consistent
  • doc: add a reusable note about IP address format
  • doc/network/bridge: add name space and format information for table
  • doc/network/physical: add name space and format information for table
  • doc/network/ovn: add name space and format information for table
  • doc/network/macvlan: add name space and format information for table
  • doc/network/sriov: add name space and format information for table
  • doc/network/physical: add supported features for network_physical
  • doc/network/ovn: add supported features for network_ovn and hide ToC
  • doc/network/bridge: add supported features for network_bridge and hide ToC
  • doc/network/bridge: content updates network_bridge
  • doc/network/ovn: content updates network_ovn
  • doc/network/physical: content updates network_physical
  • doc/network/sriov: content updates network_sriov
  • doc/network/macvlan: content updates network_macvlan
  • doc/network/external: content updates network_external
  • global: Update doc links to /latest
  • README: Use links to public doc pages
  • CONTRIBUTING: Use links to public doc pages
  • lxd/storage/drivers/generic/vfs: Updates genericVFSCopyVolume to not copy block volume files twice
  • lxd/storage/drivers/driver/dir/volumes: Use reverter in CreateVolumeSnapshot
  • lxd/storage/drivers/utils: copyDevice arg type expansion
  • lxd/storage/drivers/utils: Catch file close errors in copyDevice
  • lxd/fsmonitor: Hide permission errors
  • lxd/instance/lxc: Better handle missing apparmor
  • lxd/apparmor/dnsmasq: Support non-snap nesting
  • lxd/apparmor/dnsmasq: Properly handle logpath
  • lxd/instance/qemu: Avoid conflicting vsock IDs
  • lxd/storage/drivers/driver/dir/volumes: Updates CreateVolumeSnapshot to copy block volumes using io.Copy
  • lxd/storage/backend/lxd: Create instance snapshot symlink in CreateInstanceFromCopy
  • api: instance_file_head
  • lxd/daemon: Add support for HEAD
  • lxd/instance_file: Implement HEAD
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/drivers/utils: Update copyDevice to use low priority dd with 16M byte size and direct i/o
  • lxd: No need to import deprecated syscall
  • lxd/storage/utils: Run qemu-img dd with low priority and 16M buffer
  • lxd/instance/drivers/driver/qemu: Run qemu-img with low priority in Export
  • lxd: Error quoting fixes
  • lxd: Use SmartError rather than NotFound
  • lxd/networks: Don't return os.ErrNotExist from doNetworkGet
  • test: drop dependency on uuidgen
  • lxd/cluster: Add instances.nic.host_name config key
  • lxd/network: Support for instances.nic.host_name config key
  • lxd/device: Support for instances.nic.host_name config key
  • doc: Add instances.nic.host_name
  • api: instances.nic.host_name
  • lxd-agent: Ignore both trans= and msize= when on virtiofs
  • lxd/instance/qemu: Set msize on 9p
  • lxd/main_forkfile: Update comment
  • shared/idmap: Expose IdmapSet on all platforms
  • shared/subprocess: Add SetUserns
  • lxd/device/disk: Port to SetUserns
  • lxd: Remove forkuserns
  • global: Remove legacy build tags
  • lxd/instance_exec: Improve error on openpty
  • lxd/util: Extend tests for CanonicalNetworkAddress
  • lxd/devlxd: Don't expand format strings
  • tests: Test for format string in devlxd
  • lxd/instance: Prevent deleting volatile keys
  • lxd/instance: Update tests
  • lxd/instance: Don't allow root pool changes
  • tests: Test root disk device pool override
  • tests: Fix typo in storage_profiles test
  • doc: make it explicit that automake is needed to build LXD
  • doc: LXD requires Golan 1.18 now
  • lxd/main_init_interactive: Mention port
  • lxd/db/generate/db/method/v2: Create methods for reference tables
  • lxd/db/projects: Use v2 generator, remove UsedBy/Config fields
  • lxd/db/projects.mapper: Update generated code
  • lxd/db/projects: Populate config in ToAPI
  • lxd/db/projects: Use GetProjectConfig
  • lxd/db/projects: Removed UsedBy handling from db package
  • tests: Add test for instances.nic.host_name
  • lxd/storage/drivers/zfs: Check if raw flag can be used
  • lxd/storage/drivers/zfs: Use -w in zfs send if possible
  • shared/subprocess: Fix comment
  • shared/api: Update to new godoc comment
  • client: Update to new godoc syntax
  • lxd/api/project: Add projectUsedBy
  • shared/api/project: Add URL method
  • lxd/storage/volumes/utils: Use api.Project for InstanceList
  • lxd/api/project: Use api.Project over db.Project
  • lxd: manually fetch project Config or use api struct
  • lxd/project/permissions/test: Fix tests
  • lxd/api/project: Return immediately if project is used
  • shared/cert: Update test certs to EC
  • Revert "Skip clustering-related unit tests, see issue #6122"
  • lxd: Remove old clustering tests
  • lxd/cluster/connect: Modify ConnectIfInstanceIsRemote to return a client configured with project
  • lxd/instance/console: Use api.NewURL in instanceConsolePost
  • lxd/instance/exec: Use api.NewURL in instanceExecPost
  • lxd: No need to use UseProject() with client from ConnectIfInstanceIsRemote
  • lxd/migrate: Adds migrationControlResponse type
  • lxd/migrate: Update controlChannel to return migrationControlResponse
  • lxd: golint fixes
  • lxd/migrate/instance: migrationControlResponse usage
  • lxd/migrate/storage/volumes: migrationControlResponse usage
  • lxd/device/device/utils/disk: Look for QEMU helpers in /usr/libexec/
  • lxd: Switch to using api.StatusErrorCheck where appropriate
  • lxd/db/generate: Update to use api.StatusErrorCheck
  • lxd/db: Regenerates DB functions
  • lxd/storage/drivers/zfs: send -w is possible since 0.8.0
  • lxd/state: Make InstanceTypes store errors
  • lxd/instance/drivers: Replace SupportedInstanceTypes with DriverStatuses
  • lxd: DriverStatuses usage
  • lxd/instance: Report driver errors
  • lxd/instance/qemu: Improve errors in Info
  • lxd-agent: Fix trans= handling
  • lxd/instance/drivers/driver/qemu: Update Export to use qemu-img convert in direct I/O mode
  • lxd/storage/utils: Updates ImageUnpack to use qemu-img convert in direct I/O mode
  • lxd/storage/drivers/utils: Update copyDevice to open files in read only mode
  • lxd/storage/drivers/driver/dir/volumes: Reduce var scope in CreateVolumeSnapshot
  • lxd/storage/drivers/driver/dir/volumes: Use dd to restore block volumes in RestoreVolume
  • lxd/instance: Enforce a 64 chars device name limit
  • doc/instances: Mention 64 chars limit on device names
  • lxd/device/disk: Drop 27 chars limit
  • lxd/storage/utils: Disable format detection in qemu-img info in ImageUnpack
  • lxd/instance/qemu: Use a hash for long disk names
  • lxd/instance: Fix Update calls for ephemeral instances
  • tests: Add restart test for ephemeral instances
  • test: simplify handling of set -x
  • lxd/db/generate: Don't list bash completion
  • lxd/storage: Forward instance volume state request
  • client: Add GetMetrics
  • lxd/device/proxy: Fix comment typo
  • doc: Remove user-facing mentions of cluster node
  • lxd: Replace local node mentions with local member
  • lxd/api/cluster: Request that projects with restricted.networks be created first in clusterInitMember
  • lxd/init: Re-arrange initDataNodeApply order
  • lxd/init: Error quoting in initDataNodeApply
  • lxd/init: Create relevant networks before and after projects in initDataNodeApply
  • test: Check that default project networks are created before projects during cluster member join
  • doc/reference/network/bridge: Clarify ipv{n}.nat default value added when creating networks
  • lxd/instance/drivers/driver/qemu: Catch stateful resume errors in Snapshot
  • test: fix copy-n-paste error
  • lxd/instance/drivers/driver/qemu: Pass nvram file by FD and make writable by QEMU process
  • lxd/console: Move PTS logic to LXC driver
  • lxd/instance/qemu: Switch to socket for console
  • lxd/apparmor: Treat ramfs the same as tmpfs
  • lxd/network/driver/sriov: Mark network as available on successful start
  • lxd/storage/drivers/zfs: Fix optimized refresh in migration
  • lxd/storage/drivers/zfs: Delete volume before copying
  • test/suites/migration: Run optimized refresh test
  • lxd-agent: Enable gorilla UseEncodedPath
  • lxd-agent: Unescape URL path variables
  • lxd: Enable gorilla UseEncodedPath
  • lxd: Unescape path URL variables
  • lxd/instance/drivers/driver/qemu: Centralise logic for UEFI architecture detection
  • lxd/instance/drivers/driver/qemu: Only use NVRAM firmware template on UEFI architectures
  • lxd/instance/drivers/driver/qemu/templates: Removes duplicated arch check in qemuDriveFirmware
  • lxd/network/zone/zone: Improve validation of network zone name
  • test: Improve network zone tests
  • test/suites/migration: Add more refresh tests
  • lxd/db: Support for profiles in CreateImage
  • lxd: Support for profiles in image copying
  • shared/api: Add Profiles field to ImageExportPost
  • client: Support for profiles in image copying
  • lxc/image: Add a '--profile' option to lxc image copy
  • api: image_copy_profile
  • tests: Add tests for '--profile' option in image copy
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • gateway: Separate, smaller timeout for client request
  • lxd/instance/drivers: Ensure that devices are added and removed in the correct order
  • lxd/storage/drivers/volume: Still attempt to unmount on task error in MountTask
  • lxd/storage/drivers: Be explicit with logic brackets
  • shared/util/linux: report "Detected poll(POLLNVAL) event" at debug level
  • shared/util/linux: fix typos in comments
  • shared/util/linux: drop trailing "." in logs
  • lxd/internal: Coding style
  • lxd/db/query: Coding style
  • lxd/main_interactive: Fix bad servername
  • lxc/copy: Add description of modes
  • lxc/move: Add description of modes
  • i18n: Update translation templates
  • lxd/init: Eliiminate serverName
  • lxc/utils: Fix bad error string
  • i18n: Update translation templates
  • lxd/instance/qemu: Don't timeout during migration
  • test: restore "set -x" at the end of respawn_lxd()
  • lxd/db/generate/db/parse: Add ParsePackage
  • lxd/db/generate: Use sql.Tx param for generated functions
  • lxd/db/generate/db/stmt: Parse any imported package
  • test: avoid unbound var if cleanup() is called early on
  • lxd/storage/drivers/driver/lvm/volumes: Fix restoration of block volume snapshots
  • lxd/storage/drivers/driver/lvm/utils: Use 100%ORIGIN as size for non-thin snapshots
  • lxd/instance/drivers/driver/qemu: Removes unused return var from unmount
  • lxd/storage/drivers/driver/lvm/utils: Code style in activateVolume
  • lxd/storage/drivers/driver/lvm/volumes: Restrict var scope in volDevPath
  • lxd/storage/drivers/generic/vfs: Catch unmount errors in genericVFSBackupUnpack
  • lxd/sys: Fix vsockID detection
  • test: Don't leave files behind
  • lxd/storage: Allow parallel writes in qemu-img
  • lxd/storage/drivers: Extend CephMonitors
  • lxd/storage/cephfs: Simplify use of CephMonitors
  • lxd/device/disk: Simplify cephfs handling
  • lxd/db: Specify cluster package in generator comments
  • lxd/db/projects.mapper: Remove Certificates/Projects from db package
  • lxd/db/cluster/projects: Add cluster package db entities
  • lxd/db/cluster/projects.mapper: Generate cluster package methods/stmts
  • lxd/db/db/unified: Add unified DB struct
  • lxd/state/state: Use unified DB struct
  • lxd/db/db: Store cluster statements in global map
  • lxd/db/transaction: Add Tx method
  • lxd/db/db: Add ctx to cluster.Transaction
  • lxd: Use new DB type and Transaction method
  • lxd/tests: fix tests
  • lxd/db/generate/db/lex: Fix adjective pluralization
  • Cluster: use gateway context for client.Leader requests
  • lxd/db/query/transaction: Removes TransactionCtx and updates Transaction to take a context
  • Cluster: granular locking in Gateway.Handlerfuncs
  • lxd: query.Transaction usage
  • lxd/db/query: Gets both schema and data from sqlite.
  • lxd/db/query: Updates tests for refactored dump functions.
  • lxd: Updates SQLGet handler for refactored SQL dump.
  • test/suites/sql: Removes test for schema table data when getting schema only.
  • test: rename unused var to "_"
  • lxd/db/query: Return the table schema sql verbatim from sqlite_master.
  • lxd/db/query: Dumps all entities in sqlite_master table.
  • lxd/db/query: Updates tests to remove quotes.
  • lxd/db/query: Adds index to test schema and dump output.
  • lxd/sql: Do not format output of .dump and .schema.
  • test/sql: Adds some checks to ensure other db schema entities are captured.
  • lxc: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • doc: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • shared/api: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • lxd/db: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • lxd: Moves swagger response definitions to response package.
  • test/suites/static_analysis: Modifies deadcode exception to new dir.
  • lxd/seccomp/seccomp: Fix comment on HandleSchedSetschedulerSyscall
  • api: Adds container_syscall_intercept_sysinfo extension
  • doc/instances: Adds security.syscalls.intercept.sysinfo documentation
  • doc/syscall-interception: Add sysinfo
  • scripts/bash: security.syscalls.intercept.sysinfo
  • shared/instance: Add security.syscalls.intercept.sysinfo
  • lxd/cgroup/abstraction: Adds GetEffectiveMemoryLimit function
  • doc: move content and add headings
  • lxd/db/generate/file/write: Support adding build comments
  • lxd/db: Specify build comments in generator comments
  • lxd/db/generate/file/write: Add interface flag
  • lxd/db/warnings: Add interface flag to generator comments
  • shared/cert: Adds method for returning the public key as an x509 cert.
  • lxd/cgroup/file: Fix incorrect path matching for /init.scope in NewFileReadWriter
  • lxd/instance/drivers/driver/lxc: cg.GetEffectiveMemoryLimit usage in Metrics
  • lxd/seccomp: Add sysinfo handler
  • test: syscall interception
  • test: Fix start_external_auth_daemon to work with git 2.34.1
  • test: Adds syscall sysinfo interception test
  • lxd/db/generate/db: Returns a status error on create if entry already exists.
  • doc: whitespace changes
  • lxd/db/cluster: Regenerates schema.
  • doc: update documentation for integrating with systemd-resolved
  • lxd/db/generate: Returns status error if delete operation affects zero rows.
  • lxd/db/cluster: Regenerates database files.
  • lxd/project: Allow sysinfo intercept
  • lxd/device/disk: Handle long paths in virtiofsd
  • gomod: Update github.com/canonical/go-dqlite to v1.11.1
  • lxd/resources: Handle nested devices
  • lxd/instance/drivers/driver/lxc: Update deviceRemove to accept a device.Device
  • lxd/instance/drivers/driver/qemu: Update deviceRemove to accept a device.Device
  • lxc/file: Fix edit in snap environment
  • lxd/storage/drivers/driver/lvm/utils: Don't try and deactive snapshot non-thin volume if parent volume in use
  • lxd/instance/drivers/driver/lxc: Removes unmounted return var from unmount
  • lxd/storage/pool/interface: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/storage/pool/backend/mock: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/storage/pool/backend/lxd: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/instance/drivers/driver/lxc: pool.UnmountInstance and pool.UnmountInstanceSnapshot usage
  • lxd/instance/drivers/driver/qemu: pool.UnmountInstance usage
  • lxd/device/disk: Updates applyQuota with MountInstance usage
  • lxd/storage/utils: Updates InstanceUnmount to not return unmounted indicator
  • lxd/storage/drivers/generic/vfs: Comment typo
  • shared/api: nowadays various types of certs are accepted
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translations from weblate
  • gomod: Update dependencies
  • api: clustering_evacuation_mode
  • shared/api: Add Mode to ClusterMemberStatePost
  • lxd/cluster: Support evacuation mode override
  • lxc/cluster: Add --action to evacuate
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • lxc/storage: Show volume total size
  • i18n: Update translation template
  • test: Skip seccomp notify tests if seccomp notify not supported
  • lxd/storage/drivers/btrfs: Delete volume after receiving new one
  • lxd/storage/drivers/btrfs: Check length of snapshots slice
  • test: Extend refresh migration tests
  • shared/cancel: Renames Canceler to HTTPRequestCanceller.
  • doc: mention that ECDSA cert generation requires openssl 1.1.0+
  • lxd/storage/utils: Improve logging in ImageUnpack
  • lxd/storage/drivers/driver/common: Adds allowUnsafeResize argument to runFiller
  • lxd/storage/drivers/driver/btrfs/volumes: runFiller usage
  • lxd/storage/drivers/driver/ceph/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/cephfs/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/dir/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/lvm/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/zfs/volumes: d.runFiller usage
  • shared/cancel: Adds simple Canceller type wrapping a context.Context.
  • lxc/delete: Validate all instances exist
  • i18n: Update translation templates

試用環境

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

ダウンロード

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

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

LXD 5.0 LTS リリースのお知らせ

4th of April 2022

はじめに

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

このリリースは 4 回目の LTS リリースです。そして、LXD 4.0 からの移行を行う方にとっては、特にクラスター環境での操作で LXD の能力が大幅に向上しているので、非常にエキサイティングなリリースとなるでしょう。

以下で紹介する変更点は、LXD 4.24 と LXD 4.0 からのユーザー両方が、自分の環境で起こる変化が確認できるように分割しています。

他の LTS リリースと同様に、このリリースも 5 年間(2027 年 6 月まで)サポートされます。そしてその間に多くのバグ修正とセキュリティのポイントリリースを受け取るでしょう。

LXD 4.0 については、残りの 3 年間のセキュリティ修正のみのメンテナンス期間に入る前に、近い将来、最後のバグ修正リリースとなる 4.0.10 のリリースを予定しています。

Enjoy!

互換性のない変更

最低要件の変更

これまでの新たな LTS リリースと同様に、今後 5 年間維持できるであろう最低限必要な要件に更新しました。

これは次の通りです:

  • カーネルバージョン: 5.4
  • Go バージョン: 1.18
  • LXC バージョン: 4.0.x
  • QEMU バージョン: 6.0

加えて、すべての送受信のネットワーク接続で TLS 1.3 が必要となるように LXD を更新しています。

ドキュメント : https://linuxcontainers.org/lxd/docs/master/requirements/

サポートするアップグレードパスの変更

これまで、LXD は完全な後方互換性を持っていたため、LXD 0.1 をそのまま最新の LXD リリースにアップグレードすることをサポートしてきました。

これにより、データ移行を扱うために残しておかなければならない大量のコードのコストが増大しました。また、何年もメンテナンスされていない古い依存関係に依存し続けることにもなり、潜在的なセキュリティリスクとなりつつありました。

このため、LXD 5.0 では LXD 4.0 以上からのアップグレードのみをサポートするようになりました。それ以前のユーザーは、LXD 5.0 へのアップグレードの前に、LXD 4.0.x へアップグレードする必要があります。

LXD 4.24 からの新機能とハイライト

仮想マシンでのディスクのホットプラグ

仮想マシンに対して動的に disk を追加したり削除したりできるようになりました。
これはブロックボリュームでのみサポートされます。この操作はインスタンス上のデバイスのリストを編集することで行えます。ゲストでは SCSI バスに新しいディスクが接続されるのが見えるでしょう。

仮想マシンでの USB ホットプラグ

ディスクと同様に、仮想マシンに usb デバイスを動的に追加したり削除したりできるようになりました。
これも同様にインスタンス上のデバイスのリストを編集することで行えます。ゲストではシンプルな USB ホットプラグイベントが発生するでしょう。

デグレードしたネットワーク状態での起動

LXD 4.24 でのデグレードしたストレージプールの扱いに続き、今回、ネットワークにも同様の機能を追加しました。

これは例えば、依存するデバイスが見つからないといった理由で、ネットワークが起動できない場合でも、LXD 自体が起動に失敗することはなくなりました。代わりに、LXD は可能な限り多数のインスタンスを起動し、ネットワークが起動できるようになると残りのインスタンスを起動します。

新たな ovn-chassis クラスターメンバーロール

新たなクラスターメンバーロールとして ovn-chassis を追加しました。
これはネットワークに OVN を使用しているクラスターにのみ関係します。このようなクラスターでは、このロールを割り当てることで、どのサーバーが OVN シャーシ(事実上のルーター)として動作するかを制限できます。

このロールを持たない場合(デフォルト)、通常通りすべてのロールが参加します。このロールが 1 つ以上のサーバーに割り当てられると、そのサーバーは OVN シャーシとして動作し始め、他のサーバーではシャーシ機能が無効になります。

これにより、クラスター上のネットワークや CPU リソースのバランスをより良くできます。そして、性能の低いシステムやデグレードしたシステムでは、OVN シャーシの機能を無効化することもできます。

最適化されたストレージボリュームの更新

現在いくつかのリリースで、LXD は既存のインスタンスやカスタムストレージボリュームの更新をサポートしています。

これが動作する仕組みは、最初にインスタンスやボリュームの通常のコピーを実行し、次にそのコピーを更新します。最初のコピーは、zfs や btrfs の send/receive のような最適化された移行ロジックを使います。そしてその後の更新ロジックでは、単純な rsync を使用します。

このアプローチは、rsync があまり利用されない仮想マシンではうまく機能せず、スナップショット間の小さな変更であるはずの転送サイズが必要以上となる可能性があります。

これを改良するために、更新の場合でも LXD では最適化された移行ロジックを使うようになりました。移行元と移行先で同じストレージプールと機能がサポートされている LXD のバージョンを使っている場合は、rsync ではなく自動的ににスナップショットと send/receive を使うよう雨になりました。

cloud-init instance-id ロジックの再実装

LXD が cloud-init をサポートして以来、cloud-init の instance-id としてインスタンス名を使ってきました。
つまり、cloud-init 再実行のトリガーとなるのは、インスタンス名を変更した場合か、インスタンスのコピーを行ってインスタンス名が変更された場合だけです。

他のクラウド環境での動きと合わせるため、LXD は instance-id として代わりに UUID を使うようになりました。インスタンス名の変更、インスタンスのコピー、cloud-init の設定(user-data、vendor-data、network-config)の変更や、ネットワークインターフェースのリストが変更されば場合に UUID をリセットします。

sched_setscheduler システムコールのインターセプション

LXD で sched_setscheduler システムコールのインターセプションが使えるようになりました。
非特権 LXD コンテナで、非特権ユーザーが許されている以上にプロセスのプライオリティを変更できるようになりました。この機能は Android コンテナでは、プロセスのプライオリティの高度な制御が必要となることが動機となっています。

lvm.thinpool_metadata_size ストレージプールオプション

新たに thin pool のメタデータサイズを制御できる LVM ストレージプールオプションが追加されました。
設定しない場合は、LVM が適切な値を計算できます。

lxc network info の再実装

lxc network info を色々な追加のネットワーク情報をカバーするために更新しました。

  • ボンディング情報
  • ブリッジ情報
  • VLAN 情報
  • OVN ネットワーク情報(HA シャーシ)

ブリッジの例です:

stgraber@castiana:~$ lxc network info lxdbr0
Name: lxdbr0
MAC address: 00:16:3e:d6:0a:4c
MTU: 1500
State: up
Type: broadcast

IP addresses:
  inet»·10.128.192.1/24 (global)
  inet6»fd42:ae5f:98ab:a816::1/64 (global)
  inet6»fe80::216:3eff:fed6:a4c/64 (link)

Network usage:
  Bytes received: 207.51kB
  Bytes sent: 9.02MB
  Packets received: 2667
  Packets sent: 2967

Bridge:
  ID: 8000.00163ed60a4c
  STP: false
  Forward delay: 1500
  Default VLAN ID: 1
  VLAN filtering: true
  Upper devices: tapbb4affbb, vethb8985ecc

新しい lxc cluster role サブコマンド

クラスターメンバーのロールの追加や削除のスクリプト化を助けるために、新たに lxc cluster role サブコマンドを追加しました。

stgraber@castiana:~$ lxc cluster role add celestis ovn-chassis
stgraber@castiana:~$ lxc cluster role remove celestis ovn-chassis

LXD 4.0 からの移行者のためのハイライト

この 2 年間で行ってきたすべてを数分で読めるように凝縮するのは非常に難しいことです。LXD は前回の LTS から大幅に成長しました。
仮想マシンは事実上コンテナと同等の機能を持つようになりました。ネットワークオプションが多数追加され、クラスタリングやプロジェクトの機能も追加されました。

仮想マシン

  • vTPM サポート
  • 任意の PCI デバイスのパススルー
  • ライブマイグレーション(とステートフルなスナップショット・停止)
  • ネットワークデバイスのホットプラグ
  • ブロックカスタムボリューム

ネットワーク

  • OVN を使ったオーバーレイ・ネットワーク
  • ブリッジ・OVN ネットワークでのネットワーク ACL
  • ネットワークフォワード(フローティング IP)
  • ネットワークルーティングの BGP アナウンスとルーティッド IP アドレス
  • ネットワークピアリング(OVN)
  • ネットワークゾーン(DNS)
  • ネットワークアクセラレーション(SR-IOV)

ストレージ

  • インスンタンスとボリュームの更新(refresh)
  • ブロックカスタムストレージボリューム

プロジェクト

  • リソース制限
  • 制約のあるクラスターターゲット
  • 制約のある証明書
  • ネットワーク(OVN)
  • 使用量レポート
  • デスクトップインテグレーション

マイグレーション

  • コンテナと VM 両方のサポートを行うよう、マイグレーションツール(lxd-migrate)の再実装

クラスタリング

  • データベースロールを適切にバランスさせるための障害ドメイン
  • 簡単なクラスター退避のサポート
  • ターゲット指定と制約指定のためのサーバーグループ
  • Grafana ダッシュボードを使ったインスタンスメトリクス(OpenMetrics)

すべての変更点

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • shared/util/linux: only complain on xattr size increase
  • fix typo
  • lxc/file: Update the description in lxc file mount
  • i18n: Update translation templates
  • sphinx: Don't pin dependencies
  • lxd/db: Support for expiry_date in GetLocalStoragePoolVolumeSnapshotsWithType
  • lxd: Support for expiry date in storagePoolVolumeSnapshotsTypeGet
  • lxd: Warn if exec control connection disconnects prematurely
  • lxd/cluster/heartbeat: Ensure g.Cluster is available
  • client/lxd: Add 5 second handshake timeout to websocket.Dialer
  • lxd: Add 5 second handshake timeout to websocket.Dialer
  • test: Add 5 second handshake timeout to websocket.Dialer
  • lxd/db: Add snapshot id to return value in GetExpiredStorageVolumeSnapshots
  • lxd/storage: Prevent concurent snapshot for a volume
  • lxd: Prevent concurent snapshot expiry for a volume
  • lxd/instance_sftp: Handle projects on forward
  • client: Use DialTLS for SFTP connections
  • client: Replace addMacaroonHeaders with addClientHeaders function
  • client/lxd: Removes duplicated header setting in rawQuery
  • client: Replaces r.httpHost with r.httpBaseURL from net/url package
  • test: Fix container devices nic bridged filtering tests on recent versions of nftables
  • client/lxd/instances: Avoids connecting twice in rawSFTPConn
  • test: Update file manipulation tests to use projects
  • lxd/instance: Improve var naming and comments related to pruneExpiredInstanceSnapshots
  • lxd/storage/volumes/snapshot: Improve var naming and comments related to pruneExpiredCustomVolumeSnapshots
  • lxd/instance/drivers/driver/lxc: Create log path for forkfile if missing in FileSFTPConn
  • lxd/instance/drivers/driver/lxc: Clean up forkfile.pid on exit
  • lxd/cluster/upgrade: Improve logging in triggerUpdate
  • lxc/network: Extend coverage of 'lxc network info'
  • i18n: Update translation templates
  • lxc/file: Use random auth creds if --no-auth and --auth-user flags not specified
  • test: Update SSH SFTP tests
  • i18n: Update translation templates
  • tests/includes: Adds util to wait for DAD to complete.
  • tests: Uses wait_for_dad util instead of sleep.
  • doc: restrict docutils version to fix parsing of notes
  • lxd/firewall: Accept slices of IPv4 and IPv6 networks for bridge filter.
  • lxd/device: Adds function to calculate allowed IPv4 and IPv6 subnets.
  • lxd/device: Use allowedIPNets to set up the firewall rules.
  • lxd/bgp: Handle multiple matches in RemovePrefix
  • lxd/bgp: Fix issue with modifying paths list while iterating
  • lxd/bgp: Don't fail on missing path
  • doc: add an extension for including YouTube links
  • doc: add related YouTube links
  • lxd/daemon: Adds kernelVersion to daemon struct
  • lxd/state/state: Adds KernelVersion field to State structure
  • lxd/instance/drivers/driver/qemu: Use d.state.KernelVersion
  • lxd/instance/drivers/driver/qemu: Only enable io_uring support in kernels <= 5.13.0
  • lxd/cgroup/abstractions: Wrap parse errors to give context of problematic value
  • lxd/storage/utils: Prevent white space in storage pool names
  • doc: update YouTube extension to be ignored by OpenGraph
  • doc: open YouTube links in a new window
  • lxd/storage/drivers: Add ErrSnapshotDoesNotMatchIncrementalSource
  • lxd/storage/drivers/zfs: Support optimized refresh
  • lxd/storage/drivers/btrfs: Add volumeSnapshotsSorted
  • lxd/storage/drivers/btrfs: Support optimized refresh
  • lxd/migration: Add new zfs feature to protobuf
  • lxd/migration: Add new zfs feature
  • lxd/migration: Add Refresh option to source
  • lxd/storage/drivers/zfs: Add migration header structs and functions
  • lxd/storage: Indicate to sender to use incremental streams
  • lxd/storage/drivers/zfs: Support optimized refresh for migration
  • lxd/migration: Add header_subvolume_uuids to protobuf
  • lxd/storage/drivers/btrfs: Add UUIDs to subvolume info
  • lxd/migration: Add BtrfsFeatureSubvolumeUUIDs
  • lxd/storage/drivers/btrfs: Add getSubvolume*UUID functions
  • lxd/storage/drivers/btrfs: Support optimized refresh for migration
  • lxd/migration: Consider refresh and common features
  • lxd/instance/lxc: Handle long forkfile socket paths
  • lxd/cluster: Don't mask lack of cluster response
  • lxd/device: Use allowedIPNets when clearing firewall rules.
  • lxd/firewall/drivers: Fix typo in comment.
  • lxd/firewall/drivers: Adds subnetMask and subnetHexPrefix utils.
  • lxd/firewall/drivers: Update ebtable and ip6table rule generation.
  • lxd/firewall/drivers: Update ebtables rule matching logic.
  • tests: Ensure firewall does not drop packets from within ipv4.routes.
  • tests: Corrects host IP in IPv6 tests.
  • tests: Change address of ipv6 network interface.
  • tests: Tests ipv6.routes and ipv6.routes.external rules.
  • lxd/firewall/drivers: Updates nftables bridge filter to accept multple subnets.
  • lxd/firewall/drivers: Remove FilterAllIPv{n} consts.
  • tests: Updates tests for new nftables rules.
  • lxc/file: Ensure sshfs closes on exit request
  • lxd/response/upgrade: Adds Upgrade function to upgrade an HTTP connection
  • lxd-agent/sftp: response.Upgrade usage
  • lxd/cluster/gateway: response.Upgrade usage
  • lxd/instance/sftp: response.Upgrade usage
  • i18n: Update translations from weblate
  • lxd/storage: Renames setupStorageDriver to storageStartup
  • lxd: storageStartup usage
  • lxd/storage: Comment consistency with networkStartup
  • lxd/networks: Corrects comment copy/paste error
  • lxd/device/config/devices: More efficient allocations
  • lxd/device/device/interface: Adds PreStartCheck
  • lxd/device/device/common: No-op PreStartCheck
  • lxd/device/disk: Adds PreStartCheck function to check if storage pool is available
  • lxd/device/disk: Included wrapped error in diskSourceNotFoundError
  • lxd/instance/drivers: Expand start up validation to check for root disk storage pool availability
  • lxd/storage/load: Replaces UnavailablePools with IsAvailable
  • lxd/storage/errors: Removes unused ErrPoolUnavailable error var
  • lxd/storage/backend/lxd: IsAvailable usage
  • lxd/storage/backend/lxd: Replaces use of ErrPoolUnavailable with generic http.StatusServiceUnavailable
  • lxd/instances: Prevent concurrent running of instancesStart
  • lxd/instances: Updates instancesStart to detect http.StatusServiceUnavailable error class
  • lxd/instance/drivers: Call device.PreStartcheck() from deviceStart()
  • lxd/instance/drivers: Use device rather than devName in contextual logging
  • lxd/instance/drivers/driver/qemu: Log project and instance name in getAgentMetrics
  • lxd/storage: Increase log warnings to errors in storageStartup
  • shared/api: Add Project to ImageExportPost
  • client: Support for target project when copy image with push mode
  • lxd: Support for target project when copy image with push mode
  • lxc/image: Add target-project flag to 'image copy' command
  • api: images_target_project
  • tests: Add tests for copying image between projects
  • i18n: Update translation templates
  • doc/instances: Add volatile.cloud-init.instance-id
  • doc/dev-lxd: Update instance-id to UUID
  • shared/instance: Add volatile.cloud-init.instance-id
  • lxd/devlxd: Use volatile.cloud-init.instance-id
  • lxd/instance: Implement volatile.cloud-init.instance-id
  • lxd-agent: Add cloud-init-id field
  • lxd/instance/qemu: Use volatile.cloud-init.instance-id
  • lxd/instance: Add resetInstanceID
  • lxd/instance: Reset instance-id on rename
  • lxd/instance: Reset the instance-id on relevant config changes
  • tests: Add test for instance-id
  • lxd/devlxd: Fix argument naming
  • lxd/instance: Add CloudInitID
  • lxd/device/device/interface: Adds Name and Config to Device interface
  • lxd/instance/drivers/driver/lxc: Update deviceLoad to just return Device
  • lxd/instance/drivers/driver/lxc: Updates lxcCreate to use deviceLoad and deviceAdd
  • lxd/instance/drivers/driver/lxc: Updated usage of deviceLoad
  • lxd/instance/drivers/driver/lxc: Updates deviceAdd to accept a device
  • lxd/instance/drivers/driver/lxc: Updates deviceStart to accept a device
  • lxd/instance/drivers/driver/lxc: Adds Adding device log message
  • lxd/instance/drivers/driver/lxc: Updates startCommon to use deviceLoad and deviceStart separately
  • lxd/instance/drivers/driver/lxc: Updates updateDevices to use deviceLoad and deviceAdd/deviceUpdate separately
  • lxd/instance/drivers/driver/qemu: Update deviceLoad to just return Device
  • lxd/instance/drivers/driver/qemu: d.deviceLoad usage
  • lxd/instance/drivers/driver/qemu: Adds Adding device log message
  • lxd/instance/drivers/driver/qemu: Adds Removing device log message
  • lxd/instance/drivers/driver/qemu: Update deviceAdd to accept a device
  • lxd/instance/drivers/driver/qemu: Updates qemuCreate to use deviceLoad and deviceAdd
  • lxd/instance/drivers/driver/qemu: Updates updateDevices to use deviceLoad and deviceAdd/deviceUpdate separately
  • lxd/isntance/drivers/driver/qemu: Updates deviceStart to accept a device
  • lxd/instance/drivers/driver/qemu: deviceStart usage
  • lxd/instance/drivers: Load all devices before starting them during instance start
  • lxd/instance/drivers: Add pre-start device checks when starting instance devices
  • lxd/instance/drivers/driver/lxc: Update deviceStop to accept a device
  • lxd/instance/drivers/driver/lxc: Update startCommon to pass device to d.deviceStop
  • lxd/instance/drivers/driver/lxc: Updates cleanupDevices to pass device to d.deviceStop
  • lxd/instance/drivers/driver/lxc: Updates updateDevices to pass device to d.deviceStop
  • lxd/instance/drivers/driver/qemu: Updates deviceStop to accept device
  • lxd/instance/drivers/driver/qemu: Update Start to pass device to deviceStop
  • lxd/instance/drivers/driver/qemu: Updates updateDevices to pass device to deviceStop
  • lxd/instance/drivers/driver/qemu: Updates cleanupDevices to pass device to deviceStop
  • lxd/response/smart: Adds IsNotFoundError function
  • lxd: Replace checks for various not found errors with response.IsNotFound() usage
  • lxd/instance: Move VMAgentData to instancetype
  • lxc/utils/table: add compact table
  • i18n: Update translation templates
  • shared/api/network: Adds NetworkStatusUnavailable constant
  • lxd/db/warnings/types: Rename WarningNetworkStartupFailure to WarningNetworkUnvailable
  • lxd/network/network/load: Adds IsAvailable and function
  • lxd/network/driver/common: Adds setAvailable and setUnavailable functions
  • lxd/network/driver/common: Updates LocalStatus to return api.NetworkStatusUnavailable if unavailable.
  • lxd/network/network/interface: Adds Locations
  • lxd/network/driver/common: Implements Locations
  • lxd/network/driver/bridge: Updates Start to set availability
  • lxd/network/driver/bridge: Remove warning management from driver
  • lxd/network/driver/macvlan: Updates Start to set availability
  • lxd/network/driver/sriov: Updates Start to set availability
  • lxd/network/driver/physical: Check parent exists when starting
  • lxd/network/driver/physical: Updates Start to set availability
  • lxd/network/driver/physical: Remove warning management from driver
  • lxd/network/driver/physical: Remove duplicate start log
  • lxd/network/driver/ovn: Updates Start to set availability
  • lxd/network/driver/ovn: Refuse to start if uplink network is unavailable
  • lxd/network/driver/ovn: Remove warning management from driver
  • lxd/networks: Updates networkStartup to retry starting degraded networks in the background
  • lxd/networks: Updates doNetworkGet to accept an allNodes argument
  • lxd/networks: Updates networksGet to improve naming, comments and doNetworkGet usage
  • lxd/networks: Updates networkGet to improve naming, comments and doNetworkGet usage
  • lxc/network: Always add State column to network list output
  • lxd/device/nic: Adds PreStartCheck function for NICs with managed parent network support
  • lxd/network/driver/common: Delete network from unavailableNetworks on delete
  • lxd/storage: Update comment in storageStartup
  • lxd/network/driver/common: Delete warnings on delete
  • lxd/network/driver/bridge: Remove duplicated warnings delete step
  • lxd/network/network/load: Adds PatchPreCheck function
  • lxd/patches: Adds patchPostNetworks stage
  • lxd/dameon: Adds hook for patchPostNetworks stage
  • lxd/patches: Adds patchGenericNetwork function and updates network patches to use it
  • lxd/storage/backend/lxd: Replaces bespoke revert with revert package
  • shared/api: Adds AllowInconsistent to InstancePost.
  • client: Pass allowInconsistent into instance post request.
  • lxd/instance_post: Use allowInconsistent value in migrations.
  • doc: Updates API spec.
  • doc/environment: Adds LXD_IDMAPPED_MOUNTS_DISABLE env var
  • lxd/daemon: Detect LXD_IDMAPPED_MOUNTS_DISABLE env var and disable idmapped mount support
  • lxd/storage/utils: Adds VolumeDBDelete function
  • lxd/storage/backend/lxd: Replace usage of RemoveStoragePoolVolume with VolumeDBDelete
  • lxd/storage/utils: Reduce arguments of VolumeDBCreate in style of VolumeDBDelete
  • lxd/storage/backend/lxd: VolumeDBCreate usage
  • doc: add an extension for adding Discourse links
  • doc: add links to tutorials on Discourse
  • doc: add links to specifications on Discourse
  • lxd/instance/drivers: Moves StoragePool and getStoragePool to common
  • lxd/network/ovn: Don't use HostPathFollow on OVN configs
  • lxd-agent: cleaner shutdown sequence
  • lxd/networks: Don't keep trying to start removed degraded networks
  • lxd/storage/load: Update GetPoolByInstance to use instance's StoragePool() function
  • lxd/storage/backend/lxd: Ensure we use errors.Is when checking for drivers.ErrNotSupported
  • lxd/instance: Avoid extra query when copying instance snapshot's creation time
  • lxd/storage/utils: Adds VolumeDBGet function
  • lxd/storage/backend/lxd: Renames and reworks instanceRootVolumeConfig into instanceEffectiveRootVolumeConfig
  • lxd/storage/backend/lxd: b.instanceEffectiveRootVolumeConfig usage
  • lxd/storage/utils: Updates comment on VolumeDBCreate
  • lxd/storage/pool/interface: Rename srcVolOnly to snapshots for RefreshCustomVolume and CreateCustomVolumeFromCopy
  • lxd/storage/backend: Update RefreshCustomVolume and CreateCustomVolumeFromCopy to use snapshots arg
  • lxd/storage/volumes: pool.CreateCustomVolumeFromCopy and pool.RefreshCustomVolume usage
  • lxd/storage/utils: Renames and reworks VolumeSnapshotsGet to VolumeDBSnapshotsGet
  • lxd/migrate/storage/volumes: storagePools.VolumeDBSnapshotsGet usage
  • lxd/storage/backend/lxd: VolumeDBSnapshotsGet usage
  • lxd/storage/backend/lxd: Allocate snapshotNames more efficiently in CreateCustomVolumeFromCopy
  • lxd/migrate/instance: Don't ignore existing snapshot instances on migrate receiver
  • lxd/storage/backend/lxd: Comment improvements CreateCustomVolumeFromCopy
  • grafana: Add missing datasource field
  • github: Add Go 1.18
  • doc/clustering: Make more space in table
  • doc/clustering: Remove condition column
  • doc/clustering: Add section about roles
  • lxd/network/ovn: Fix typo
  • lxd/network/ovn: Fix bad comment
  • lxd/api_internal: Sort endpoints
  • doc: rename extension file
  • doc: rename stylesheet classes for extension
  • doc: update the extension to allow for general related links
  • doc: add related links to the documentation
  • lxd/storage/utils: Updates VolumeDBSnapshotsGet to accept drivers.VolumeType arg
  • lxd/storage/backend/lxd: VolumeDBSnapshotsGet usage
  • lxd/migrate/storage/volumes: Updates storagePools.VolumeDBSnapshotsGet usage
  • lxd/db/storage/volumes: Updates GetLocalStoragePoolVolumeSnapshotsWithType to populate ID and Config fields
  • lxd/instance/qemu: Fix regression in cdrom handling
  • api: Adds cluster_allow_inconsistent_copy extension.
  • lxd/storage/backend/lxd: Use more efficient allocations in GetVolume
  • lxd/storage/utils: Removes unnecessary duplicate check in VolumeDBCreate
  • lxd/storage/drivers/volume: Adds VolumeType.IsInstance function
  • lxd/storage/backend/lxd: Define instanceDiskVolumeEffectiveFields
  • lxd/storage/utils: Check that instanceDiskVolumeEffectiveFields are not used for instance volumes DB records
  • lxd/storage/backend/lxd: Reworks instanceEffectiveRootVolumeConfig into instanceEffectiveRootVolume
  • lxd/storage/backend/lxd: b.instanceEffectiveRootVolume usage
  • lxd/instance/drivers/qmp: Support adding and removing block devices
  • lxd/instance/drivers/qemu: Use RemoveDevice for NIC
  • lxd/device/disk: Support hot-plugging
  • lxd/instance/drivers/qemu: Remove unnecessary check
  • lxd/instance/drivers/qemu: Add qemuBlockDevIDPrefix
  • lxd/instance/drivers/qemu: Add deviceAttachBlockDevice
  • lxd/instance/drivers/qemu: Add deviceDetachBlockDevice
  • lxd/instance/drivers/qmp: Add FD set commands
  • lxd/device/config: Put root device first
  • lxd/instance/drivers/qemu: Enable hotplugging raw disks
  • lxd/instance/drivers/qemu: Drop string builder arg
  • lxd/device: Validate disk device name length
  • lxd/instance/drivers/qemu: Remove qemuDrive template
  • lxd/instance/drivers/qemu: Disallow hotplugging directories
  • lxd/images: Remove old db entry after image refresh
  • lxd/operations: Remove all operations for the member in waitForOperations
  • lxd/daemon: waitForOperations usage
  • shared/network: Improve error returned from RFC3493Dialer
  • lxd/operations: Updates operationsGet to exclude offline members like operationsGetByType
  • lxd/operations: Aligns operationsGetByType with operationsGet
  • lxd/db/operations: Renames GetNodesWithRunningOperations to reflect what it does
  • lxd/operations: tx.GetNodesWithOperations usage
  • lxd/state: Rename Context field to ShutdownCtx
  • lxd: State.ShutdownCtx usage
  • lxd/operations/operations: Don't remove DB record in done when LXD is shutting down
  • doc/authentication: mention ECDSA keys as recommend
  • test: Add manual refresh test
  • lxd/instance/drivers/qemu: Fix block devices
  • shared/network: remove CBC + SHA1 ciphersuites
  • shared/network: enable ChaCha20-Poly1305 Cipher Suites for TLS 1.2
  • shared/network: prefer AES-128 over AES-256
  • lxd/instance/drivers/driver/lxc: Remove storage volume DB record creation from lxcCreate
  • lxd/instance/drivers/driver/qemu: Remove storage volume DB record creation from qemuCreate
  • lxd/instance/instance/utils: Removes unused volumeConfig arg from Create
  • lxd/instance/instance/utils: Removes unused volumeConfig arg from CreateInternal
  • lxd/instance/drivers/load: Removes unused volumeConfig arg from create
  • lxd: CreateInternal usage
  • lxd/storage: Removes unused FillInstanceConfig
  • lxd/storage/backend/lxd: CreateInstance storage volume DB records
  • lxd/storage/backend/lxd: CreateInstanceFromImage storage volume DB records
  • lxd/storage/backend/lxd: CreateInstanceSnapshot storage volume DB records
  • lxd/storage/backend/lxd: CreateInstanceFromMigration storage volume DB records
  • lxd/storage/backend/lxd: CreateInstanceFromCopy storage volume DB records
  • lxd/instance: Remove volume settings copying from source in instanceCreateAsCopy
  • lxd/storage/backend/lxd: RefreshInstance storage volume DB records
  • lxd/storage/backend/lxd: CreateInstanceFromBackup storage volume DB records
  • lxd/storage/backend/lxd: Error quoting in UpdateInstance
  • lxd/storage/pool/interface: Update ImportCustomVolume signature
  • lxd/storage/backend/lxd: Update ImportCustomVolume with new signature
  • lxd/api/internal/recover: pool.ImportCustomVolume usage
  • lxd/storage/pool/interface: Update ImportInstance to accept pool volume info
  • lxd/storage/backend/mock: ImportInstance updated signature
  • lxd/storage/backend/mock: ImportCustomVolume updated signature
  • lxd/storage/backend/lxd: ImportInstance storage volume DB record management
  • lxd/api/internal/recover: pool.ImportInstance usage
  • lxd/instance/post: pool.ImportInstance usage
  • lxd/db/instances: Start using api.StatusErrorf http.StatusNotFound
  • lxd/db/storage/pools: Start using api.StatusErrorf http.StatusNotFound
  • test: Improve container_recover test to explicitly check for existence of storage DB records
  • lxd/storage/backend/lxd: No need to wrap errors from VolumeDBCreate
  • lxd/instance/test: Fix TestContainer_LoadFromDB to create storage volume record
  • global: Set TLS 1.3 baseline
  • gomod: Bump to 1.18
  • doc/requirements: Bump minimal requirements
  • github: Drop Go 1.17.x
  • lxd/device: Update to support netip
  • test/macaroon-identity: Reduce external dependencies
  • lxd/cluster: Remove legacy upgrade code
  • gomod: Update dependencies
  • Makefile: Update for Go 1.18
  • lxc/export: Fix help message
  • i18n: Update translation templates
  • Revert "lxd-agent: cleaner shutdown sequence"
  • api: cluster_ovn_chassis
  • doc/clustering: Add ovn-chassis role
  • lxd/db: Add ovn-chassis role
  • lxd/network/ovn: Handle ovn-chassis role
  • lxd/network: Add networkRestartOVN
  • lxd/daemon: Detect change in OVN chassis layout
  • shared/util: Adds generic HasKey function for checking if a map key exists
  • doc: fix typo
  • doc: whitespace changes only
  • doc: reordering content
  • doc: add some headings
  • doc: update network zones documentation
  • doc: updates from review
  • lxc/cluster: Make add easier to script
  • lxc/config_trust: Make add easier to script
  • i18n: Update translation templates
  • lxd/networks: Avoid needless OVN restart on startup
  • client/operations: Fix incorrect interpolation of % characters in errors
  • shared/util: Remove line wrap
  • lxd/db: Add OperationRemoveOrphanedOperations
  • lxd/images: Code style for error handling in pruneExpiredImagesInProject
  • lxd/images: Ensure full fingerprint is returned in imageDelete
  • lxd: Removes doDeleteImageFromPool to reduce DB queries loading pools
  • lxd/images: Contextual logging in autoUpdateImage
  • lxd/images: Log errors in distributeImage
  • lxd/images: Improve errors in distributeImage
  • lxd/images: Log old image fingerprint on DB delete error in autoUpdateImages
  • Revert "lxd/images: Remove old db entry after image refresh"
  • lxd/db/images: Switch to api.StatusErrorf in GetImage
  • lxd/db/images: Whitespace
  • lxd/images: Error improvements in autoUpdateImagesTask
  • lxd/images: Error and comment improvements in autoUpdateImages
  • lxd/images: Distribute refreshed image and delete old image record in imageRefresh
  • lxd/images: Only distribute images if there are >1 members in autoUpdateImages
  • lxd/operations/operations: Convert to contextual logging for operation remove warning
  • lxd/db/db/internal/test: Fix Test_ImageGet_for_missing_fingerprint
  • lxd/storage/backend/lxd: Fix existing image check for rsync in CreateInstanceFromMigration
  • test: Improve tests for image refresh
  • shared/network: require TLS 1.2+ if LXD_INSECURE_TLS
  • test: Improve clustering image refresh tests
  • test: Fix test_image_refresh to work with random mode
  • test: Extract pool driver from standalone pool for cluster image refresh tests
  • lxd/storage/load: Rename GetPoolByName to LoadByName
  • lxd: storagePools.LoadByName usage
  • lxd/storage/load: Renames GetPoolByInstance to LoadByInstance
  • lxd: storagePools.LoadByInstance usage
  • lxd/storage: Renames load.go to pool_load.go
  • lxd/instance/drivers/qmp: Add AddDevice
  • lxd/instance/drivers/qmp: Use AddDevice internally
  • lxd/instance/drivers: Use QMP to add USB devices
  • lxd/instance/drivers/qemu: Remove unused arguments
  • lxd/instance/drivers/templates: Remove qemuUSBDev
  • lxd/device/usb: Always set busnum and devnum
  • lxd/device/usb: Include bus and dev num in device name
  • lxd/device/usb: Populate runConf on stop
  • lxd/instance/driver/qemu: Support USB hotplugging
  • lxd/instance/drivers/qemu: Use fixed number of USB devices
  • lxd/devices/usb: Add USB device to runConf
  • lxd/instance/drivers/qemu: Implement DeviceEventHandler
  • lxd/device/usb: Support hotplugging
  • lxd/operations: Add function to remove orphaned operations
  • lxd/daemon: Remove orphaned operations periodically
  • lxd: Drop devPaths logic
  • Replace interface{} with any
  • doc: add link to multi-user video
  • doc/instances: Extend key column
  • doc/syscall-interception: Cover bpf and mount
  • api: container_syscall_intercept_sched_setscheduler
  • doc: Add security.syscalls.intercept.sched_setscheduler
  • doc/syscall-interception: Add sched_setscheduler
  • shared/instance: Add security.syscalls.intercept.sched_setscheduler
  • scripts/bash: security.syscalls.intercept.sched_setscheduler
  • lxd/seccomp: Add sched_setscheduler
  • lxd: intercept sched_setscheduler() system call
  • lxd/patches: Removes all patches applied since LXD 4.0.0
  • lxd/db: Removes functions used by removed patches
  • lxd/storage: Remove patches not needed since LXD 4.0.0
  • lxd/patches/utils: Removes file
  • lxd/patches: Removes unused functions
  • lxd/storage: Remove check for storage_api patch being applied
  • test: Update sql test to check for more recent patch
  • doc/storage: Adds lvm.thinpool_metadata_size
  • lxd/storage/drivers/driver/lvm/utils: Adds thinpoolMetadataSize arg to createDefaultThinPool
  • lxd/storage/pools/config: Legacy validation for lvm.thinpool_metadata_size
  • lxd/storage/drivers/driver/lvm: Adds lvm.thinpool_metadata_size support
  • lxd/storage/drivers/driver/lvm/utils: Don't round 0 or empty string in roundedSizeBytesString
  • scripts/bash/lxd-client: Adds lvm.thinpool_metadata_size to bash auto complete
  • api: Adds storage_lvm_thinpool_metadata_size API extension
  • test: Fix LVM quota size checks
  • test/includes: Adds LVM support to spawn_lxd_and_join_cluster
  • test: Remove LVM exclusion from test_clustering_image_refresh
  • test: Remove LVM exclusion from test_clustering_storage_single_node
  • test: Remove LVM exclusion from test_clustering_evacuation
  • test: Remove LVM exclusion from test_clustering_storage
  • client: Fix logger calls
  • lxd/db/query: Fix logger calls
  • lxd/device: Fix bad logger calls
  • shared/logging: Remove unused functions
  • shared/logger: Add Ctx
  • global: Switch to logger.Ctx
  • shared/logger: Port to logrus
  • lxd: Switch to using new logger
  • lxd-agent: Switch to using new logger
  • lxc: Switch to using new logger
  • shared/logging: Remove deprecated package
  • lxd/events: Port to logrus
  • lxc/monitor: Port to logrus
  • gomod: Drop log15
  • lxd: make sure we're operating relative to the correct pid namespace
  • client: More flexible server comparison
  • i18n: Update translations from weblate
  • lxd/storage/drivers: Properly use logger.Ctx
  • lxd/storage: Properly use logger.Ctx
  • shared/logger: Properly handle context
  • lxd/certificates: Check validty on upload/update
  • lxd/network/zone: Don't allow duplicate entries
  • lxd: Remove LegacyLocalDatabasePath
  • lxd: Removes LegacyGlobalDatabasePath
  • lxd: Remove legacyPatches
  • lxd: Remove legacyPatches from OpenNode
  • lxd: Don't return a pre-clustering dump from OpenNode
  • lxd/db/legacy: Removes file
  • lxd/db/db: Remove unused Begin
  • lxd/db: Remove schema.Hook from EnsureSchema
  • lxd/db/transaction: Removes unused Tx
  • tests: Remove database_update
  • lxd/cluster: Remove legacy upgrade logic
  • lxd/db: Rename ForLegacyPatches to DirectAccess
  • lxd/certificates: Require a minimum of 2048bit RSA
  • tests: Make certificate_edit use an EC cert
  • tests: Bump easy-rsa key to 4096
  • lxd/operations: Don't crash on missing state

試用環境

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

ダウンロード

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

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

LXD 4.24 リリースのお知らせ

14th of March 2022

はじめに

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

今回のリリースが 4.x シリーズの最後のリリースとなり、次のリリースは LXD 5.0 LTS になります。

Enjoy!

新機能とハイライト

lxc file mount と新しいファイル API

LXD は完全に新しいファイル API を提供するようになりました。これは、内部的には SFTP プロトコルのネイティブな Go 実装をベースにしており、GET /1.0/instances/NAME/sftp を通して直接利用できます。そして、既存のファイル API を扱うために改修しました。

この結果、特にファイル操作が並列ないしは連続で行われた時のファイル操作が大幅に速くなりました。リクエストごとにサブプロセスを起動したり、アクセス・取得するファイルを持ち運んだりする必要がないので、メモリ使用量が大幅に削減されます。

新しい API は sshfs とのインテグレーションも可能です。これにより、新しいlxc file mountコマンドが提供され、クライアント上のローカルパスに任意のインスタンスをマウントできるようになりました。

stgraber@dakara:~$ mkdir netbox01
stgraber@dakara:~$ lxc file mount s-dcmtl-cluster:netbox01/ netbox01/
sshfs mounting "netbox01/" on "netbox01"
Press ctrl+c to finish

stgraber@dakara:~$ ls -lh netbox01/
total 76K
lrwxrwxrwx 1 root   root       7 Mar  9 02:45 bin -> usr/bin
drwxr-xr-x 1 root   root    4.0K Apr 15  2020 boot
drwxr-xr-x 1 root   root     500 Mar 10 14:53 dev
drwxr-xr-x 1 root   root    4.0K Mar 10 12:17 etc
drwxr-xr-x 1 root   root    4.0K Mar  9 18:31 home
lrwxrwxrwx 1 root   root       7 Mar  9 02:45 lib -> usr/lib
lrwxrwxrwx 1 root   root       9 Mar  9 02:45 lib32 -> usr/lib32
lrwxrwxrwx 1 root   root       9 Mar  9 02:45 lib64 -> usr/lib64
lrwxrwxrwx 1 root   root      10 Mar  9 02:45 libx32 -> usr/libx32
drwxr-xr-x 1 root   root    4.0K Mar  9 02:45 media
drwxr-xr-x 1 root   root    4.0K Mar  9 02:45 mnt
drwxr-xr-x 1 root   root    4.0K Mar  9 19:09 opt
dr-xr-xr-x 1 nobody nogroup    0 Mar 10 14:53 proc
drwx------ 1 root   root    4.0K Mar 10 17:19 root
drwxr-xr-x 1 root   root     400 Mar 10 14:53 run
lrwxrwxrwx 1 root   root       8 Mar  9 02:45 sbin -> usr/sbin
drwxr-xr-x 1 root   root    4.0K Mar  9 02:45 srv
dr-xr-xr-x 1 nobody nogroup    0 Mar 10 14:53 sys
drwxrwxrwt 1 root   root    4.0K Mar 13 22:30 tmp
drwxr-xr-x 1 root   root    4.0K Mar  9 02:45 usr
drwxr-xr-x 1 root   root    4.0K Mar  9 02:46 var

クラスターの event-hub ロール

LXDは、イベント API を使って運用の進捗状況を追跡し、クラスター全体のインスタンスのライフサイクルをモニタリングする簡単な方法を提供します。

デフォルトでは、各 LXD サーバーがすべての他のサーバーに接続されてすべてのイベントを受信し、すべてのローカルイベントを他の全サーバーにブロードキャストするフルメッシュとして動作します。

大規模クラスターを扱う場合、これはかなりの数の接続とネットワークトラフィックにつながる可能性があります。これを改良するために、新たに event-hub ロールを導入しました。このロールは、少なくとも 2 つのクラスタメンバーに割り当てることができます。設定した場合、イベントの処理はデフォルトの full-mesh モードから、新しい hub モードに切り替わります。

stgraber@dakara:~$ lxc cluster list
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
|   NAME   |                 URL                 |      ROLES       | ARCHITECTURE | FAILURE DOMAIN |        DESCRIPTION        | STATE  |      MESSAGE      |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| asuras   | https://[2602:fc62:b:100::200]:8443 |                  | aarch64      | apm-chassis01  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| athos    | https://[2602:fc62:b:100::204]:8443 | database-standby | x86_64       | athos          | Intel Xeon E5-2695v2 (2x) | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| celestis | https://[2602:fc62:b:100::206]:8443 |                  | aarch64      | celestis       | LibreComputer Potato      | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| delmak   | https://[2602:fc62:b:100::205]:8443 | database         | aarch64      | delmak         | Qualcomm Centriq 2400     | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| entak    | https://[2602:fc62:b:100::201]:8443 | database         | aarch64      | apm-chassis01  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| madrona  | https://[2602:fc62:b:100::202]:8443 | database-leader  | aarch64      | apm-chassis02  | APM X-Gene 2              | ONLINE | Fully operational |
|          |                                     | database         |              |                |                           |        |                   |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| vorash   | https://[2602:fc62:b:100::203]:8443 | database-standby | aarch64      | apm-chassis02  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
stgraber@dakara:~$ lxc info | grep server_event_mode
  server_event_mode: full-mesh
stgraber@dakara:~$ lxc cluster edit athos
stgraber@dakara:~$ lxc info | grep server_event_mode
  server_event_mode: full-mesh
stgraber@dakara:~$ lxc cluster edit delmak
stgraber@dakara:~$ lxc info | grep server_event_mode
  server_event_mode: hub-client
stgraber@dakara:~$ lxc cluster list
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
|   NAME   |                 URL                 |      ROLES       | ARCHITECTURE | FAILURE DOMAIN |        DESCRIPTION        | STATE  |      MESSAGE      |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| asuras   | https://[2602:fc62:b:100::200]:8443 |                  | aarch64      | apm-chassis01  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| athos    | https://[2602:fc62:b:100::204]:8443 | event-hub        | x86_64       | athos          | Intel Xeon E5-2695v2 (2x) | ONLINE | Fully operational |
|          |                                     | database-standby |              |                |                           |        |                   |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| celestis | https://[2602:fc62:b:100::206]:8443 |                  | aarch64      | celestis       | LibreComputer Potato      | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| delmak   | https://[2602:fc62:b:100::205]:8443 | event-hub        | aarch64      | delmak         | Qualcomm Centriq 2400     | ONLINE | Fully operational |
|          |                                     | database         |              |                |                           |        |                   |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| entak    | https://[2602:fc62:b:100::201]:8443 | database         | aarch64      | apm-chassis01  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| madrona  | https://[2602:fc62:b:100::202]:8443 | database-leader  | aarch64      | apm-chassis02  | APM X-Gene 2              | ONLINE | Fully operational |
|          |                                     | database         |              |                |                           |        |                   |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
| vorash   | https://[2602:fc62:b:100::203]:8443 | database-standby | aarch64      | apm-chassis02  | APM X-Gene 2              | ONLINE | Fully operational |
+----------+-------------------------------------+------------------+--------------+----------------+---------------------------+--------+-------------------+
stgraber@dakara:~$

lxc storage volume info の再実装

lxc storage volume info は大幅に書き直され、以前のような限られた YAML 出力だけでなく、lxc info と同じような出力を提供するようになりました。

ストレージボリュームの詳細、タイプ、場所、ディスク使用量、関連するスナップショット、バックアップを表示するようになりました。

stgraber@dakara:~$ lxc storage volume info default foo
Name: foo
Type: custom
Content type: filesystem
Usage: 192.00KiB

Snapshots:
+-------+-------------+------------+
| NAME  | DESCRIPTION | EXPIRES AT |
+-------+-------------+------------+
| snap0 |             |            |
+-------+-------------+------------+

イメージ展開時の AppArmor プロファイル

追加のセキュリティレイヤーとして、イメージの展開やバックアップをするたびに、LXD は一時的な AppArmor プロファイルを自動的に生成するようになりました。

これは tarunquashfs や、それらが呼び出すあらゆる圧縮・解凍プログラムからの潜在的な攻撃から LXD システムを保護します。このプロファイルは、イメージ、バックアップとそのコンテンツの読み書きに必要なパスへのアクセスのみを許可します。

Grafana ダッシュボード

LXD に Grafana ダッシュボードが同梱されるようになりました。

ダッシュボードの JSON は LXD のリリース tarball から直接取得するか、Grafana ウェブサイトから取得するのが便利でしょう。

grafana1|690x404

詳しくはこちらを参照してください: https://discuss.linuxcontainers.org/t/official-grafana-dashboard-for-lxd/13438

デグレードした状態での起動(ディスクが見えない場合)

LXD は 1 つ以上のストレージプールが欠けた状態でも起動するようになりました。
このシナリオでは、ストレージプールは保留状態になり、バックグラウンドで繰り返しリトライします。そのプールに依存するインスタンスとボリュームは、プールがオンラインに復帰するまで同様にブロックされます。

この機能はストレージプールが何かの理由で死んだ場合のリカバリーの仕組みや、1 つ以上のプールが外部メディア上にあり起動時に利用できないようなシナリオの両方で役に立つはずです。

しかし、LXD のアップグレード操作ではすべてのプールが存在している必要がある可能性が高いため、すべてのインスタンスやボリュームに対してアップグレードの移行手順を実行しなければいけない場合、ストレージプールが見つからないため、LXD は起動に失敗する可能性があることに注意してください。

restricted.containers.interception project option

新しいプロジェクトの制限オプションを導入しました。restricted.containers.interception で、現時点で次の2つを除くほとんどの security.syscalls.intercept オプションを使用できるようになります。

  • security.syscalls.intercept.mount.allowed
  • security.syscalls.intercept.mount.shift

このオプションを allow に設定することで、ユーザーはシステムコールインターセプションを有効にでき、Docker のような一部のワークロードを簡単に実行できるようになります。

このオプションを有効にすることは、ホストシステムに対するアタックサーフェスを増加させ、サービス拒否攻撃の格好の的になります。インターセプトしたシステムコールそれぞれにより、インスタンスのリクエストアクションを実行するために、ホスト上で一時的なタスクが生成されるためです。

ドキュメント : https://linuxcontainers.org/lxd/docs/master/projects/

core.metrics_authentication サーバーオプション

LXD のメトリクス API を認証なしで使用できるようにするために、新しいサーバーオプションを導入しました。core.metrics_authenticationfalse に設定されると、core.metrics_address で設定されるアドレスで動作しているメトリクスサーバーはリクエスト元のクライアント証明書をチェックしなくなり、すべてのプロジェクトに対するメトリクスを返します。

これは適切な TLS ベースの認証ができない場合にのみ設定すべきです。そして、メトリクスエンドポイントにアクセスできるサーバーを制限するファイアウォールとあわせて使用すべきです。

仮想マシンのネットワークインターフェース名とMTU

仮想マシンに対して、新しい設定オプションの agent.nic_config を導入しました。

このオプションを設定すると、VM 内で動作する LXD エージェントは、起動時にネットワークインターフェースの名前を変更し、LXD で設定したnamemtuプロパティが VM のインターフェースに設定されるように再設定を行います。

これでコンテナでの動きに近い動作になります。しかし、VM イメージは一般的に enp5s0 という名前のネットワークインターフェースを想定しており、別の名前を使う場合はインスタンスのネットワーク設定を変更する必要がある可能性が高いことに注意が必要です。

VM ストレージで I/O uring のサポート

LXD 仮想マシンは、ホストでの IO_uring サポートを検出し、利用できる場合で使用中のストレージプールと互換性がある場合は QEMU でブロック I/O に対して IO_uring を使用させるようになりました。

これで互換性があるシステム上での I/O が高速化され、ホストシステムの負荷も軽減されます。

ipv4.neighbor_probe and ipv6.neighbor_probe NIC オプション

LXD 4.23 で、routed のネットワークインターフェースを使うインスタンスで、起動時に既存の IPv4 または IPv6 アドレスを検出するロジックを導入しました。この試行は通常意味があり、潜在的な設定ミスを防げますが、オフにした方が良いケースもあります。

このような理由から、この動きを制御する設定項目を 2 つ追加しました:

  • ipv4.neighbor_probe
  • ipv6.neighbor_probe

ドキュメント: https://linuxcontainers.org/lxd/docs/master/instances/#nic-routed

すべての変更点

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • lxd-agent: Fix bad copy/paste
  • lxd/daemon: Fix http response error typos
  • lxd-migrate: Support certificate tokens
  • lxd/util/http: Improves comment on CheckTrustState
  • lxd/util/http: Var naming clarity in CheckTrustState
  • lxd/daemon: Adds the trusted cluster member fingerprint to the request context username field in Authenticate
  • lxd/events/events: Adds EventSource type and constants
  • lxd/events/common: Removes localOnly concept from common listener
  • lxd/events/devlxdEvents: Removes isLocal concept
  • lxd/events/events: Replaces isLocal with excludeSources concept for AddListener
  • lxd/events: Updates d.events.AddListener usage with excludeSources
  • lxd-agent/events: Updates d.events.AddListener with excludeSources
  • test: Adds basic cluster event tests
  • lxd/events/events: Removes listener level location concept and replaces with server location concept
  • lxd-agent/events: d.events.AddListener usage to remove listener level location
  • lxd/events: Updates d.events.AddListener to remove listener location
  • lxd/cluster/events: Prevent concurrent running of EventsUpdateListeners
  • go.mod: bump github.com/mdlayher/vsock@v1.0.1
  • lxd/main_init_interactive: Add missing :
  • lxc/console: Don't crash on manual disconnect
  • doc/metrics: stop tuning job's scrape_interval now that results are cached 8s only
  • doc/metrics: don't assume any default scrape_interval value
  • lxd/response: Modernize FileResponse
  • lxd-agent: Update for FileResponse changes
  • lxd: Update for FileResponse changes
  • lxd/response: Rename FileModify to FileModified
  • lxd/fsmonitor/drivers: Ignore stale file handle errors.
  • lxd/apparmor: Remove state.State dependency from apparmor package
  • lxd/device: Remove state.State dependency from apparmor package
  • lxd/instance/drivers: Remove state.State dependency from apparmor package
  • lxd/network: Remove state.State dependency from apparmor package
  • lxd/storage/drivers/driver/zfs: Set all dataset mountpoint settings to legacy
  • lxd/cluster/membership: Run EventsUpdateListeners in NotifyHeartbeat in wait group
  • lxd/cluster/heartbeat: Only upsert member offline error in APIHeartbeat.Send if context not cancelled
  • lxd/cluster/heartbeat: Save member state gathered so far if heartbeat is cancelled
  • lxd/cluster/heartbeat: Comment improvement
  • lxd/cluster/heartbeat: Immediately ping remaining members when ctx is cancelled in APIHeartbeat.Send
  • lxd/cluster/gateway: Export HeartbeatLock
  • lxd/cluster/heartbeat: g.HeartbeatLock usage
  • lxd/cluster/heartbeat: Wait for ongoing heartbeat to finish in NotifyHeartbeat
  • lxc/config_trust: Support --name flag for tokens
  • client: Replace chConnected with ctxConnected
  • client/lxd/events: Updates SendEvent to use context deadline for timeout
  • test: Update clustering membership tests to not expect a specific promotion order of members
  • lxc/network_zone: Fix typo (entriess to entries)
  • lxc/cluster: Fix typo (doest to does)
  • i18n: Update translation templates
  • test: Update cluster rebalance tests to not use member specific role logic
  • test: Add cluster show to failure domains test to capture cluster state on intermittent test failure
  • shared/api/url: Add WithQuery
  • lxd/daemon: Run nodeRefreshTask inside cluster.EventsUpdateListeners as part of wait group
  • lxd/cluster/heartbeat: Fix comment
  • client: Introduce DoHTTP
  • client: DoHTTP usage
  • lxc/query: Use DoHTTP
  • lxd/api_metrics: Rename resp to metricSet
  • lxd/api_metrics: Support target
  • doc/rest-api: Refresh swagger YAML
  • lxd/certificates: Fix token generation over HTTPS
  • lxd/cgroup: Fix bad cpuset check
  • lxc/cluster_group: Update long descriptions
  • i18n: Update translation templates
  • lxd/device/nic/routed: Comment ending
  • lxd/device/nic/routed: Moves parent and vlan check to validation
  • lxd/device/nic/routed: Remove feature check of liblxc as no longer depends on it
  • lxd/device/nic/routed: Adds d.effectiveParentName to cache result from network.GetHostDevice
  • lxd/device/nic/routed: Fixes bug where if vlan effective interface didn't exist start would fail
  • lxd/device/nic/routed: Align with macvlan logic for setting up vlan interface
  • lxd/device/nic/routed: Delete created VLAN device on start failure
  • lxd/device/nic/routed: Use d.effectiveParentName for consistent in postStop
  • lxd/device/nic/routed: Adds missing comment to checkIPAvailability
  • lxd/device/device/utils/network: Sets ARP probe timeout based on context deadline in isIPAvailable
  • lxd/device/device/utils/network: Removes use of unnecessary go routines in isIPAvailable
  • lxd/device/device/utils/network: Change isIPAvailable signature to return bool for found and separate probe errors
  • lxd/device/nic/routed: Updates checkIPAvailability to use updated isIPAvailable
  • test: Adds test for routed vlan without parent
  • test: Adds routed NIC test for VLAN parent interface creation
  • doc/metrics: use secp384r1 curve with SHA384 signature
  • lxd/device/nic/routed: Adds ipv{n}.neighbor_probe option
  • doc: Adds routed NIC ipv{n}.neighbor_probe setting
  • lxd/device/nic/bridged: Update setupHostFilters to return a reverter
  • lxd/device/nic/bridged: Only call d.removeFilters in postStop if filtering enabled
  • api: Adds instance_nic_routed_neighbor_probe extension
  • test: Adds tests for routed NIC IP available detection
  • test: Fix incorrect command in clustering_failure_domains
  • test: Fix profile leak
  • lxd/instance/qemu: Allow live update of cluster.evacuate
  • lxd/certificates: Better handle authentication
  • lxd/db/node: Adds ClusterRoleEventHub constant and ID entry
  • lxd/db/node: Removes unused functions RemoveNodeRole and CreateNodeRole
  • lxd/db/node: Changes Roles field type to []ClusterRole in NodeInfo struct
  • lxd/db/node: Error formatting
  • lxd/cluster/heartbeat: Adds supplementary non-database member role info to heartbeat
  • lxd/cluster/events: Populate heartbeat member roles from DB in EventsUpdateListeners
  • lxd/cluster/events: Adds eventHubMinHosts constant
  • lxd/cluster/events: Adds EventMode type and constants
  • lxd/cluster/events: Adds ServerEventMode function
  • lxd/cluster/events: Adds RoleInSlice function
  • lxd/cluster/events: Updates EventsUpdateListeners to only connect to event-hub servers
  • lxd/cluster/events: Rework listener connect notification to support hub addresses
  • lxd/cluster/events: Store remote event listener client in eventListenerClient type.
  • lxd/cluster/events: Use localAddress rather than networkAddress var name
  • lxd/cluster/events: Adds SetEventMode to eventListenerClient
  • lxd/cluster/events: Ensure logging inside EventsUpdateListeners is done outside of listenersLock lock
  • lxd/cluster/events: Log an error when there are no active cluster event listeners
  • lxd/cluster/events: Adds EventHubPush function
  • lxd/events/events: Adds InjectFunc type
  • lxd/cluster/events: EventsUpdateListeners InjectFunc usage
  • lxd/events/events: Renames Forward to Inject to better reflect what it does
  • lxd/events/events: Adds NotifyFunc support
  • lxd/events/events: Adds ability to exclude events from certain locations from being broadcasted
  • lxd/api/cluster: Trigger notify heartbeat on event-hub member change in updateClusterNode
  • lxd/cluster/membership: state.Events.Inject usage
  • lxd/daemon: d.events.Inject usage
  • lxd/daemon: Wires up cluster.EventHubPush to events.NewServer notify handler
  • lxd-agent/daemon: events.NewServer usage
  • lxd-agent/events: d.events.AddListener excludeSources usage
  • lxd/events: Adds support for receiving events from cluster members in eventsSocket
  • shared/api/server: Adds ServerEventMode to ServerEnvironment
  • lxd/api/1.0: Populates ServerEventMode in server environment struct
  • api: Adds event_hub API extension
  • doc/rest-api: Refresh swagger YAML
  • lxd/cluster/events: Move state update in EventsUpdateListeners to end
  • lxd/cluster/events: log No active cluster event listeners
  • test: Updates clustering events tests to with event-hub support
  • test: Fix clustering_handover test to not expect a certain member promotion order
  • shared/validate: Moves ValidHostname to validate package.
  • shared/validate: Adds IsDeviceName, refactoring logic from IsHostname.
  • lxd/device: Ensures device names are valid when validating config and instantiating.
  • shared/idmap: Add SysProcIDMap functions
  • lxd/storage: Sync before snapshotting
  • lxd/main_forkfile: Replace with SFTP server
  • lxd-agent: Replace file API with SFTP
  • gomod: Add pkg/sftp
  • lxd/instance: Add FileSocket to the interface
  • lxd/instance/lxc: Implement FileSocket
  • lxd/instance/qemu: Implement FileSocket
  • lxd/instance: Add FileSFTP to the interface
  • lxd/instance/lxc: Implement FileSFTP
  • lxd/instance/qemu: Implement FileSFTP
  • lxd/instance: Remove FilePull
  • lxd/instance: Remove FileRemove
  • lxd/instance: Remove FileExists
  • lxd/instance: Remove FilePush
  • lxd/instance/lxc: Port to using FileSFTP
  • lxd/instance_file: Port to SFTP
  • gomod: Update dependencies
  • shared/util: IsTrue description
  • shared/util: Adds IsTrueOrEmpty function
  • shared/util: IsFalse description
  • shared/util: Adds IsFalseOrEmpty function
  • lxd/device/nic/routed: shared.IsTrueOrEmpty usage
  • lxd/device/disk: Use shared.IsTrueOrEmpty and shared.IsFalseOrEmpty
  • lxd/device/disk: Replace use of !shared.IsTrue with shared.IsFalseOrEmpty for security.shifted
  • lxd/device/gpu: Replace !shared.IsTrue shared.IsFalseOrEmpty for nvidia.runtime
  • lxd/device/nic: Replace !shared.IsTrue with IsFalse or IsFalseOrEmpty
  • lxd/device/proxy: Replace !shared.IsTrue with shared.IsFalseOrEmpty
  • lxd/storage: Adds allowInconsistent to pool interface RefreshInstance signature.
  • lxd: Passes allowInconsistent from instanceCreateAsCopyOpts into pool.RefreshInstance.
  • lxd/storage: Uses allowInconsistent in call to MigrateInstance on refresh.
  • lxd/storage/filesystem: Add SyncFS
  • lxd/storage: Use filesystem.Syncfs
  • lxd/storage/drivers: Replace !shared.IsTrue with shared.IsFalse for rsync.compression option
  • lxd/storage/drivers/driver/ceph: Replace !shared.IsTrue with shared.IsFalse or shared.IsFalseOrEmpty
  • lxd/storage/drivers/driver/lvm: Replaces !shared.IsTrue with shared.IsFalse or shared.IsFalseOrEmpty
  • lxd/storage/drivers/driver/zfs/volumes: Replace !shared.IsTrue with shared.IsFalse for zfs.clone_copy
  • lxd/storage/drivers/zfs: Replace !shared.IsTrue with shared.IsFalse or shared.IsFalseOrEmpty
  • lxd/api/cluster: Replace !shared.IsTrue with shared.IsFalseOrEmpty for features.networks
  • lxd/api/project: Replace !shared.IsTrue with shared.IsFalse for features.profiles
  • lxd/devlxd: Replace !shared.IsTrue with shared.IsFalseOrEmpty for security.devlxd.images
  • lxd/instance: Replace shared.IsTrue with shared.IsFalseOrEmpty for snapshots.schedule.stopped
  • lxd/patches: Replace !shared.IsTrue with shared.IsFalse
  • lxd/apparmor/instance: Replace !shared.IsTrue with shared.IsFalseOrEmpty for security.privileged
  • lxd/instance/drivers/driver/lxc: Replace !shared.IsTrue with !shared.IsFalseOrEmpty for security.idmap.isolated
  • lxd/instance/drivers/driver/lxc: Replace !shared.IsTrue with shared.IsFalse for limits.memory.swap
  • lxd/dnsmasq/dhcpalloc: Replaces !shared.IsTrue with shared.IsFalseOrEmpty for ipv6.dhcp.stateful
  • lxd/instance/drivers/driver/qemu: Replaces !shared.IsTrue with shared.IsFalseOrEmpty for migration.stateful
  • lxd/instance/instance/utils: Replace !shared.IsTrue with shared.IsFalseOrEmpty for security.privileged
  • lxd/networ/driver: Replace !shared.IsTrue with shared.IsFalseOrEmpty for ipv{n}.nat
  • lxd/network/driver/bridge: Replace !shared.IsTrue with shared.IsFalseOrEmpty ipv6.dhcp.stateful
  • lxd/network/driver/ovn: Replace !shared.IsTrue with shared.IsFalseOrEmpty for restricted option for projects
  • lxd/network/driver/ovn: Replace !shared.IsTrue with IsFalse for ipv{n}.dhcp
  • lxd/network/driver/physical: Replace !shared.IsTrue with shared.IsFalseOrempty for volatile.last_state.created
  • lxd/network/zone: Replace shared.IsTrue usage for NAT logic
  • lxd/project/permissions: Replace !shared.IsTrue with shared.IsFalse for features.images
  • lxd/project/permissions: Replace !shared.IsTrue with shared.IsFalseOrEmpty for security.idmap.isolated
  • lxd/project/permissions: Replace !shared.IsTrue with shared.IsFalseOrEmpty for restricted
  • lxd/seccomp: Replace !shared.IsTrue with shared.IsFalseOrEmpty for syscall interception settings
  • lxd/instance/drivers/driver/qemu: Replace !shared.IsFalse with shared.IsTrueOrEmpty for security.secureboot
  • test: Adds check for negated shared.Is(True|False)*() function calls
  • test: Exclude .git dir from static grep checks
  • test: Removes reference to non-existent package shared/subtest
  • lxd/db/generate: Fix bad loop logic
  • lxd/instance/lxc: Use contextual logger in Metrics
  • doc: add Open Graph metadata
  • doc: use bugfix for Open Graph Sphinx extension
  • lxd/storage: Moves PathNameEncode and PathNameDecode to filesystem package
  • lxd/storage/drivers/driver/btrfs/volumes: filesystem.PathNameEncode usage
  • lxd/device: filesystem.PathNameEncode and filesystem.PathNameDecode usage
  • lxd/dnsmasq/dnsmasq: Update dnsMasqEntryFileName to use storageDrivers.PathNameEncode to escape device name
  • lxd/device/device/load: Update New to return device even if name validation fails
  • shared/validate/validate: Relax IsDeviceName checks
  • test: Adds missing device name validation tests
  • doc: fix Open Graph version
  • lxd/dnsmasq: Adds staticAllocationDeviceSeparator const
  • lxd/dnsmasq: Renames dnsMasqEntryFileName to StaticAllocationFileName
  • lxd/dnsmasq: StaticAllocationFileName usage
  • lxd/dnsmasq: StaticAllocationFileName test
  • lxd/dnsmasq: Removes Name and Static field and replaces with StaticFileName field
  • lxd/dnsmasq: Updates DHCPStaticAllocation to just accept a deviceStaticFileName
  • lxd/dnsmasq: Update DHCPAllAllocations to use StaticFileName field
  • lxd/dnsmasq: DHCPStaticAllocation usage
  • lxd/dnsmasq/dhcpalloc: Updates getDHCPFreeIPv4 and getDHCPFreeIPv6 to accept deviceStaticFileName argument
  • lxd/network/network/utils: dnsmasq.DHCPStaticAllocation updated usage with deviceStaticFileName
  • lxd/device/nic/bridged: dnsmasq.DHCPStaticAllocation updated usage with deviceStaticFileName
  • lxd/apparmor: AppArmor support for extractors
  • lxd/archive: Add archive package
  • shared/subprocess: Support for file descriptors
  • lxd/backup: AppArmor support for extractors
  • lxd: AppArmor support for extractors
  • lxd/storage/drivers: AppArmor support for extractors
  • lxd/storage: AppArmor support for extractors
  • shared: Move Unpack to lxd/archive
  • lxd/db/warnings/types: Removes unused WarningTypes and population code
  • lxd/warnings: Renames ResolveWarningsOlderThan to ResolveWarningsByLocalNodeOlderThan
  • lxd/daemon: warnings.ResolveWarningsByLocalNodeOlderThan usage
  • lxd/warnings: Fix entityID logic bugs in resolve and delete functions
  • shared: Adds agent.rename_interfaces config key for VMs.
  • lxd/device/config: Adds NicConfig struct for passing data into VM.
  • lxd/device/bridged: Returns interface MTU as part of run configuration.
  • lxd/instance/drivers: Writes nic data to VM config share.
  • lxd-agent: Reads nic configuration and applies it at startup.
  • doc: Adds agent.rename_interfaces config key.
  • api: Adds agent_rename_interfaces extension.
  • lxd/db/query/dump: Add context param to query.Dump
  • lxd/db/query/transaction: Add TransactionCtx
  • doc: fix the footer
  • lxd/device/config/device/runconfig: Long form import
  • lxd/device/config/device/runconfig: Adds NICConfigDir constant
  • lxd/device/config/device/runconfig: Adds DeviceName and NICName to NICConfig struct
  • lxd-agent/network: Updates NIC config parsing to use map of deviceConfig.NICConfig
  • lxd/instance/drivers/driver/qemu: deviceConfig.NICConfigDir usage
  • doc: Fix cert pathing in metrics.md
  • lxd/instance/drivers/driver/qemu: Escape the NIC device name in QEMU config with filesystem.PathNameEncode
  • lxd/instance/drivers/driver/qemu: Use proper quoting in error from addNetDevConfig
  • lxd/instance/drivers/driver/qemu: Removes device name used as nic name in addNetDevConfig
  • lxd/instance/drivers/driver/qemu: Reworks writeNICDevConfig
  • lxd/device/device/utils/network: Reworks networkCreateVethPair and networkCreateTap to return MTU value used
  • lxd/device/nic/bridged: networkCreateVethPair and networkCreateTap usage
  • lxd/device/nic/ovn: networkCreateVethPair and networkCreateTap usage
  • lxd/device/nic/p2p: networkCreateVethPair and networkCreateTap usage
  • lxd/device/nic/routed: networkCreateVethPair and networkCreateTap usage
  • lxd/device/nic/routed: Adds missing name property for VM device
  • lxd/device/nic/routed: Make routed NIC hotpluggable
  • lxd/device/nic/macvlan: Adds support for mtu applying via lxd-agent in VMs
  • test: Work around very intermittent ip: RTNETLINK answers: File exists error
  • api: Renames agent_rename_interfaces to agent_nic_config
  • lxd: Rename agent.rename_interfaces to agent.nic_config
  • doc/instances: Removes trailing whitespace
  • lxd/util/sys: Move RuntimeLiblxcVersionAtLeast to instance package
  • lxd/util/sys: Move GetIdmapSet to shared/idmap
  • lxd/db/generate: Add leftjoin support
  • lxd/db/generate: Adds coalesce support for joined fields
  • lxd/db/generate: Removes white space
  • lxd/db/generate/db/mapping: Adds WarningStatus and WarningType to column types
  • lxd/db/generate/db/stmt: Update filter generation to use []string for where statement
  • lxd/db/generate/db/stmt: Ensure coalesced fields are fitered on their coalesced value
  • lxd/db/warnings: Uses DB generator for warnings functions
  • lxd: tx.GetWarnings usage
  • lxd/instance/drivers/driver/common: tx.DeleteWarnings usage
  • lxd/db/warnings: Avoid duplication results in UpsertWarning
  • lxd/instance/qemu: Properly wrap error
  • lxd/instance: Introduce Info.Features
  • lxd/instance/qemu: Add checkFeature
  • lxd/instance/qemu: Detect and use io_uring
  • lxd/instance/drivers/driver/lxc: Remove duplicate import of github.com/lxc/lxd/lxd/storage
  • lxd/instance/test: Fix inconsistent import name of github.com/lxc/lxd/lxd/storage
  • shared/api/storage/pool: Adds StoragePoolStatusUnvailable constant
  • lxd/db/warnings/types: Adds WarningStoragePoolUnvailable, description and severity
  • lxd/storage: Update setupStorageDriver to retry initializing failed pools
  • lxd/storage/pool/interface: Adds ToAPI
  • lxd/storage/backend/mock: Implements ToAPI
  • lxd/storage/backend/lxd: Implements ToAPI
  • lxd/storage/backend/lxd: Adds unavailablePools variable and maintains via Mount function result
  • lxd/storage/backend/lxd: Description typo for GetVolume
  • lxd/storage/backend/lxd: Update LocalStatus to return StoragePoolStatusUnvailable if not initialised locally
  • lxd/storage/pools: Switch to loading pool and using the ToAPI and LocalStatus functions
  • lxc/storage: Add STATE column output even in non-clustered environment
  • lxd/storage/backend/lxd: Adds isStatusReady function to check if pool is ready for use
  • lxd/storage/backend/lxd: Delete persistent warnings on pool delete
  • lxd/storage/load: Adds Patch function
  • lxd/patches: Updates patchGenericStorage to call storagePools.Patch()
  • lxd/storage/utils: Adds logging to ImageUnpack
  • lxd/apparmor/archive: Adds additional permissions for unsquashfs to apparmor profile
  • lxd/archive/archive: Don't use supplementary unpacker command
  • lxd/archive/archive: Better return structure (golint)
  • lxd/archive: Improve error and logging in Unpack
  • lxd/instance/drivers/driver/qemu: Fix VM support detection regression
  • lxd/instance/qemu: Fix incorrect comment
  • lxd/instance/qemu: Disable io_uring on loop pools
  • lxd/instance/qemu: io_uring naming consistency
  • lxd/apparmor: Allow rw remount of /run
  • Add the Grafana dashboard (15726)
  • shared/tcp/tcp/timeouts: Adds tcp package with functions for setting timeouts
  • lxd: github.com/lxc/lxd/shared/tcp usage
  • lxd/util/net: Removes TCP timeout functions
  • test: Wait longer for second node to be demoted
  • lxd/network/driver/common: Fix typos in errors
  • lxc/storage_volume: Fix list of default columns
  • i18n: Update translation templates
  • lxd/warnings: Removes unused functions
  • lxd/network/driver/bridge: As network ID is globally unique, delete warnings by ID on delete
  • lxd/networks: Removes duplicated warnings delete call
  • lxd/network/driver/bridge: Don't refresh BGP prefixes during forward update
  • lxd/bgp: Fix RemovePrefixByOwner when multiple matches
  • doc: whitespace changes
  • doc: moving content
  • shared/tcp/tcp/timeouts: Adds support for using net.TCPConn directly with ExtractConn
  • client/lxd: Adds setURLQueryAttributes function
  • lxd/instance/drivers/driver/qemu: Close connection on client error in FileSFTP
  • lxd/instance/drivers/driver/lxc: Close connection on client error in FileSFTP
  • Replace github.com/pkg/errors with fmt and errors
  • Replace errors.Unwrap() with errors.Is()
  • Use %w in fmt.Errorf to wrap errors
  • gomod: Update dependencies
  • i18n: Update translation templates
  • test: Update godeps.list
  • lxd/db/query: Fix IsRetriableError
  • doc: add some headings
  • lxd/instance/sftp: Adds /1.0/instances//sftp handler
  • client/interfaces: Adds GetInstanceFileSFTP and GetInstanceFileSFTPConn to InstanceServer
  • client/lxd/instances: Adds SFTP support to ProtocolLXD
  • lxc/file: Adds mount command
  • test/godeps.list: Updates godeps
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • lxd/device/disk: Store the storage pool inside device to avoid repeated DB queries
  • lxd/device/disk: Return VM mount directio and loop backed options
  • lxd/instance/drivers/driver/qemu: Detect io_uring support for root and custom block volumes
  • doc: update Network ACLs documentation
  • doc: add required links
  • doc: whitespace changes
  • doc: move content
  • doc: add some headings
  • doc: update network forwards documentation
  • lxd/task/group: Clarify message about tasks still running
  • lxd/daemon: Error not checked from ResolveWarningsByLocalNodeOlderThan
  • lxd/device/disk: Remove duplicated import
  • lxd/storage/backend/lxd: Don't try mounting volumes if pool not available
  • lxd/storage: Add and use error ErrPoolUnavailable
  • lxd/instance/drivers: Moves shared storagePool var into common
  • lxd/storage/load: Adds UnavailablePools function
  • lxd/storage: Update setupStorageDriver to call instancesStart when pool is subsequently initialised
  • lxd/instances: Updates instancesStart to check disk pools are available
  • lxd/instance/drivers/driver/qemu: Improve secureboot needs to be disabled error
  • lxc/file: Adds support for setting up local SFTP server for mount command
  • i18n: Update translation templates
  • lxd/device/disk: Detect disk pool VM mount options using single call to os.Stat
  • lxd/network/openvswitch/ovn: Update LogicalRouterRoutes to support recent versions of ovn
  • seccomp: pass a pidfd to process_still_alive
  • lxd/apparmor/archive: Expand all paths
  • lxd/instance/qemu: Switch TPM mode to CRB
  • lxc/storage_volume: Tweak error message
  • lxc/storage_volume: Align info with lxc info
  • i18n: Update translation templates
  • doc/instances: Fix missing escaping
  • api: projects_restricted_intercept
  • lxd/projects: Add restricted.containers.interception
  • lxd/project: Add restricted.containers.intercept
  • doc: Add restricted.containers.interception
  • scripts: Add restricted.containers.interception
  • tests: Validate restricted.containers.interception
  • lxd/node: Fix typo in metrics_address description
  • api: metrics_authentication
  • lxd/cluster: Add core.metrics_authentication
  • lxd/metrics: Allow disabling authentication
  • doc/server: Add core.metrics_authentication
  • scripts/bash: Update completion for metrics
  • tests: Add test for core.metrics_authentication
  • lxd/device/device/utils/disk: Update DiskVMVirtiofsdStart to check sharePath is absolute
  • lxd/device/disk: Start virtfs-proxy-helper after virtiofsd
  • lxd/instance/drivers/driver/lxc: Disable idmapped mounts if LXD_SHIFTFS_DISABLE=true
  • lxd/instance/qemu: Disable hv_passthrough when migratable
  • lxd/apparmor: Attempt to deref exePath
  • grafana: fix project disk usage overview of the rootfs
  • grafana: use available bytes when computing rootfs used space
  • grafana: bump dashboard version
  • lxc/utils/sort: Move sorting helpers to utils package
  • lxc: Use utils package for sorting tables.
  • lxd/apparmor: Handle missing paths
  • lxd/instance/qemu: Set spawn=allow
  • lxd/instance_file: Add last-modified header
  • doc/rest-api: Refresh swagger YAML
  • lxd/instance_file: Fix gofmt
  • lxc/file: Adds --listen flag to mount command
  • i18n: Update translation templates
  • lxc/file: Check instance exists in mount SSH SFTP listener mode
  • test: Adds basic file mount SSH SFTP listener tests
  • lxd: Adds IdmappedMounts field to OS struct
  • lxd/db/generate/db/stmt: Add leftjoin support to naturalKeySelect
  • lxd/db/generate/db/stmt: Only join fields contained within natural key in naturalKeySelect
  • lxd/db/warnings: Use WarningExists from DB generator
  • lxd/device/nic: Lock concurrent access to networkSRIOVRestoreVF
  • lxd/device: Allow ipv{n}.address=none for managed networks.
  • lxd/device: Check ip{n}.address != none before allocating.
  • tests: Check that all protocols are blocked when ipv{n}.address=none
  • lxd/storage/drivers/generic/vfs: Pass --numeric-owner to tar unpack command
  • tests: Fix ordering in bridge filtering test
  • i18n: Update translations from weblate
  • gomod: Update dependencies
  • i18n: Update translations from weblate

試用環境

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

ダウンロード

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

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

LXD 4.23 リリースのお知らせ

12th of February 2022

はじめに

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

今回のリリースは、多数のバグ修正とパフォーマンスの改良は言うまでもなく、4 つの主要な機能、さらに多くの小さな機能の追加が含まれています。

Enjoy!

新機能とハイライト

lxd-p2clxd-migrate への置き換え

移行 API を使って既存のシステムやファイルシステムツリーを LXD コンテナにインポートできる lxd-p2clxd-migrate に置き換えられました。

新しいツールは lxd-p2c がサポートしている機能を持ち、さらに次を追加しました:

  • ディスクイメージから LXD 仮想マシンへの移行のサポート
  • より多くの認証メソッドのサポート
  • ネットワーク、ストレージ、プロファイル、その他設定オプションのよりきめ細やかなオーバーライド

それ以外の点では、ツールは静的にビルドできるツールのままであり、ソースシステム上にある rsync にのみ依存しているだけです。転送は LXD のマイグレーション API を通して行われるため、ローカルもしくはリモートのいずれの LXD サーバーに対しても行うことができます。

仕様 : https://discuss.linuxcontainers.org/t/lxd-unified-p2c-p2v-migration-tool/12903

トークンベースの認証

LXD API のセキュリティ向上の一環として、新たにクライアントで LXD とやりとりできるワンタイムトークンの発行ができるようになりました。これは、共有の信頼パスワードを使うよりももっと良い代替手段です。そして、手動で証明書を送るよりもより簡単に処理できます。

lxc cluster add で行ったのと同様に、lxc config trust add を使って新しいトークンが発行できるようになりました。このトークンには接続情報、サーバー証明書、ワンタイムシークレットが含まれます。

stgraber@castiana:~$ lxc config trust list
+------+------+-------------+-------------+------------+-------------+
| TYPE | NAME | COMMON NAME | FINGERPRINT | ISSUE DATE | EXPIRY DATE |
+------+------+-------------+-------------+------------+-------------+

stgraber@castiana:~$ lxc config trust add
Please provide client name: castiana
Client castiana certificate add token: eyJjbGllbnRfbmFtZSI6ImNhc3RpYW5hIiwiZmluZ2VycHJpbnQiOiI1N2FhYjFkMjNhMGRlODdjZmQxNzkwNzNkMDVlN2U5OGIyY2U2ZjRmNTM1NjVkYzUzOTY1MjQ1MzRkNWU1NjM0IiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4wLjE0MTo4NDQzIiwiWzI2MDI6ZmM2MjpiOjEwMDA6NDNhNjo2NTJlOmZlZjI6ZTg4Y10    6ODQ0MyIsIjEwLjEyOC4xOTIuMTo4NDQzIiwiW2ZkNDI6YWU1Zjo5OGFiOmE4MTY6OjFdOjg0NDMiXSwic2VjcmV0IjoiYjVmMzQwZmJlN2IxOWM3M2U2MDFjZTJkYTc4YzNhMTlhZDgwY2RmZDExZDRkOTA1YTg0ODE2MTE5NWI3YzIwNSJ9

stgraber@castiana:~$ lxc remote add my-server eyJjbGllbnRfbmFtZSI6ImNhc3RpYW5hIiwiZmluZ2VycHJpbnQiOiI1N2FhYjFkMjNhMGRlODdjZmQxNzkwNzNkMDVlN2U5OGIyY2U2ZjRmNTM1NjVkYzUzOTY1MjQ1MzRkNWU1NjM0IiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4wLjE0MTo4NDQzIiwiWzI2MDI6ZmM2MjpiOjEwMDA6NDNhNjo2NTJlOmZlZjI6ZTg4Y106ODQ0MyIsIjEwLjEyOC4xOTIuMTo4NDQzIiwiW2ZkNDI6YWU1Zjo5OGFiOmE4MTY6OjFdOjg0NDMiXSwic2VjcmV0IjoiYjVmMzQwZmJlN2IxOWM3M2U2MDFjZTJkYTc4YzNhMTlhZDgwY2RmZDExZDRkOTA1YTg0ODE2MTE5NWI3YzIwNSJ9

stgraber@castiana:~$ lxc list my-server:
+-----------+---------+----------------------+-----------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+-----------------------------------------------+-----------+-----------+
| lxd-build | RUNNING | 10.128.192.40 (eth0) | fd42:ae5f:98ab:a816:216:3eff:fe28:c0a6 (eth0) | CONTAINER | 0         |
+-----------+---------+----------------------+-----------------------------------------------+-----------+-----------+

stgraber@castiana:~$ lxc config trust list
+--------+----------+------------------+--------------+-------------------------------+-------------------------------+
|  TYPE  |   NAME   |   COMMON NAME    | FINGERPRINT  |          ISSUE DATE           |          EXPIRY DATE          |
+--------+----------+------------------+--------------+-------------------------------+-------------------------------+
| client | castiana | UNKNOWN@castiana | 6f5a027652fb | Nov 16, 2021 at 12:27am (UTC) | Nov 14, 2031 at 12:27am (UTC) |
+--------+----------+------------------+--------------+-------------------------------+-------------------------------+

クライアントはサーバーアドレス、サーバーフィンガープリントのバリデーション、パスワードの提供が不要なことに注意してください。これはトークンの一部であるためです。トークンは作成時にプロジェクト単位で制限できるため、共有環境に新しいユーザーを登録するのに最適です。

仕様 : https://discuss.linuxcontainers.org/t/lxd-token-based-remote-connection/13114
ドキュメント : https://linuxcontainers.org/lxd/docs/master/authentication/#adding-client-certificates-using-tokens

ネットワークゾーン内のカスタム DNS レコード

ネットワークゾーンは LXD インスタンスに対する正引き、逆引きの DNS レコードを簡単に自動生成する方法として最初に導入されました。

これらのゾーンに手動で追加の DNS レコードも追加できるようになりました。この操作は lxc network zone record コマンドやマッチング API を通して行えます。

このようなレコードは Let's Encrypt のような DNS バリデーションを行うようなサービスや、ドメイン認証を行うようなサードパーティサービスで特に役立ちます。

仕様 : https://discuss.linuxcontainers.org/t/lxd-custom-dns-records-in-network-zones/13128
ドキュメント : https://linuxcontainers.org/lxd/docs/master/network-zones/#custom-records

イメージの必要条件

LXD イメージで、LXD に対する要件を示す特別なプロパティを使えるようになりました。

初期実装では、次の 2 つが使えます:

  • requirements.cgroup
  • requirements.secureboot

前者は LXD に、特定のイメージにある種の cgroup ツリーが必要であることを伝えるために使えます。
現時点では v1 のみがサポートされています。これで LXD はホストシステムでまだ cgroup v1 がサポートされているかどうかをチェックします(CentOS 7 や Ubuntu 16.04 のようなディストリビューションを、cgroup2 に依存している新しいシステム上で実行するような場合によくある問題です)。

後者は、イメージがセキュアブートが有効な場合にはブートできないことを示す場合に false に設定できます。

どちらも、LXD はインスタンスの起動時にこれらをチェックし、条件を満たしていない場合はエラーとなります。

stgraber@castiana:~$ lxc launch images:centos/7 c1
Creating c1
Starting c1                                 
Error: The image used by this instance requires a CGroupV1 host system

ドキュメント : https://linuxcontainers.org/lxd/docs/master/image-handling/#special-image-properties

ネットワーク ACL ログアクセス(OVN)

OVN ネットワーク上でネットワーク ACL を使う場合、ルールの状態を logged に設定し、ルールに合致するトラフィックがログエントリーとなるようにすることができます。

これらのログエントリーは、影響を受けるインスタンスを実行しているシステムの OVN ログに現れます。
残念ながら、OVN ログは常に読みやすいとは限りません。言うまでもなく、非特権ユーザーはそれにアクセスすることはできません。

そこで、特定の ACL に関係するログエントリーを取得するための API と、それに対応する CLI を追加しました。

root@abydos:~# lxc network acl show-log unifi
{"time":"2022-02-12T06:01:26Z","proto":"tcp","src":"45.45.148.253","dst":"45.45.148.3","src_port":"33556","dst_port":"22","action":"reject"}
{"time":"2022-02-12T06:01:26Z","proto":"tcp6","src":"2602:fc62:b:1000:43a6:652e:fef2:e88c","dst":"2602:fc62:a:1::3","src_port":"52590","dst_port":"22","action":"reject"}

仕様 : https://discuss.linuxcontainers.org/t/lxd-network-acl-logging/13223

OVN のネットワーク状態サポート

ネットワーク状態 API が OVN で動作するようになりました。

具体的には、これにより lxc network info が OVN ネットワークに対しても動作するようになりました。

vlan.tagged の VLAN レンジ

vlan.tagged 設定オプションは、カンマ区切りのリストを使って複数の VLAN の指定をサポートしていました。
ほとんどの環境でこれはうまく動作しましたが、多数の VLAN を扱う場合は、範囲指定の方が使いやすい場合が多いでしょう。

このため、LXD では VLAN ID の範囲の使用をサポートするようになりました。これは vlan.tagged10,50,1000-2000 のように設定します。

ストレージボリュームのサーバーサイドのフィルタリング

既存のインスタンス API とイメージ API に加えて、ストレージボリューム API がサーバーサイドのフィルタリングをサポートしました。これにより、ボリューム名、タイプ、設定でフィルタリングし、API がスナップショットを返すかどうかを設定できるようになりました。

ドキュメント : https://linuxcontainers.org/lxd/docs/master/rest-api/#filtering

ストレージプールの zfs.export 設定オプション

新しく追加したストレージプールオプションである zfs.export が、LXD のシャットダウン時に ZFS プールのエクスポートの動作をコントロールします。

デフォルトでは LXD は、ループディスク上に作られているか、専用のディスク・パーティションを使って作られているかに関わらず、自身が完全に所有するいかなるストレージプールにも zpool export を呼び出します。

このオプションを使って、LXD がこのようなケースで zpool をロードしたままにできるようになります。

ストレージボリュームの zfs.reserve_space 設定オプション

他に ZFS の設定として追加したのは zfs.reserve_space です。これはボリュームに対して設定でき、割り当てられたディスクスペースがそのインスタンスで利用できることを保証します。

これは、システム上の他のインスタンスがスペースを使い切っている場合に、ディスクスペースの不足が許されないクリティカルなサービスで特に役に立ちます。

ストレージボリュームの zfs.blocksize 設定オプション

最後の ZFS 設定オプションのひとつは zfs.blocksize です。これもストレージボリュームに対して設定でき、使用するブロックサイズやレコードサイズを制御できます。この値を調整して、非常に小さいファイルを多数扱う場合の無駄を省いたり、とても大きなファイルを扱う場合のスループットを改善したりできます。

スナップショットのスケジュールに対する @never オプション

最後に、新たなスナップショットのスケジューリングオプション @never を導入しました。これで snapshots.schedule の継承を解除するために使えます。

プロファイルに snapshots.schedule が設定されている場合で、そのプロファイルを使うインスタンスのひとつでスナップショットを実行したくない場合、インスタンスの snapshots.schedule@never に設定するとうまくいきます。

すべての変更点

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • doc: fix language in SECURITY.md
  • lxd/dnsmasq: Append device name to dnsmasq entry file name.
  • Take extra precautions when calling tar
  • lxd: Applies patch to add device names to dnsmasq files.
  • test: Updates test suite to append device names to dnsmasq files.
  • doc: Adds note about newuidmap to machine setup.
  • lxd/instances: Don't check limits on restore
  • tests: Validate snapshots on limited projects
  • test: Fixes number of expected NAT rules when using xtables driver.
  • lxc/config/file: allow overriding default remote by env variable
  • doc/environment: add new LXC_REMOTE variable
  • test: Ensure ebtables is legacy when driver is xtables.
  • client: Addd GetInstanceFull
  • lxc/info: Port to using GetInstanceFull
  • lxc/list: Add InstanceFull shortcut
  • client: Add WithContext
  • client: Add context-aware connection functions
  • lxd/instance: Allow stopping during evacuation
  • lxd/cluster: Don't start the instance after live-migration
  • lxd/cluster: Add evacuateClusterSetState
  • lxd/cluster: Use instance architecture instead of cluster member
  • lxd/cluster: Use evacuateClusterSetState
  • lxd/cluster: Fix incorrect reverter
  • lxd/cluster: Fix live-migrate on restore
  • lxd/instance/qemu: Extend live updatable config keys
  • lxd: Refresh all dnsmasq hosts during patch.
  • lxd/instance/drivers: Adds getRootDiskDevice function to common driver.
  • lxd/instance/drivers: Performs disk size check on stateful startup.
  • doc: add a security summary and include it where needed
  • doc: add an authentication section
  • doc: clean up security documentation
  • doc: add styling for abbreviations
  • doc: fix loading of substitutions
  • Growing a loop backed btrfs pool fix snap path
  • doc: use absolute URL for Swagger
  • doc: swagger: hide link to yaml file
  • lxd/db: Import ordering
  • lxd/db: Fix volume sequence regression
  • doc: clean up links in README
  • doc: move missing content from SUPPORT.md to README.md
  • doc: add a support page and include it
  • doc: move SUPPORT.md to .github folder
  • doc: add a link to the Code of Conduct
  • doc: fix link to support documentation
  • doc: fix broken links
  • lxd/network: Adds State function to interace with common implementation.
  • lxd: Call the networks 'State' function if it can be loaded.
  • shared/validate: Introduce ParseNetworkVLANRange
  • lxd/device: Introduce networkVLANListExpand
  • lxd/device/nic: Enable VLAN ranges in vlan.tagged
  • tests: Add tests for VLAN ranges
  • doc/instances: Mention support for ranges in vlan.tagged
  • lxd/device/nic: Fix VLAN range validation
  • shared/validate: Align ParseNetworkVLANRange with ParseUint32Range
  • lxd/device: Update for ParseNetworkVLANRange change
  • lxd/storage/btrfs: Add volume delete shortcut
  • shared/api: Fix typo
  • doc/rest-api: Refresh swagger YAML
  • client: Fix bad arg naming in zone functions
  • doc: enable automatically generated anchors
  • lxd/db: Fix storage_volumes sequence again
  • lxd: Use projectParam function in networkStateGet.
  • shared/api: Adds OVN network state to api response.
  • lxd/network/openvswitch: Adds methods for extracting OVN data.
  • lxd/network: Implements 'State' for the ovn driver.
  • api: Add network_state_ovn extension.
  • doc/rest-api: Update swagger YAML.
  • lxd/network/acl: Port to using fmt.Errorf
  • lxd/network/zone: Port to using fmt.Errorf
  • lxd/network/openvswitch: Port to using fmt.Errorf
  • lxd/network: Port to using fmt.Errorf
  • lxd/instance/lxc: Use absolute rootfs
  • lxd: Add server-side API filtering for storage volumes
  • api: Add storage_volume_api_filtering extension
  • doc/rest-api: Refresh swagger YAML
  • doc: Update rest api filtering doc
  • doc: kernel 5.15+ have sane value for net.core.bpf_jit_limit
  • api: Add image_restrictions extension
  • shared/simplestreams: Support image reqs metadata
  • doc: Add notion of image reqs
  • shared/util: Add IsFalse
  • lxd/drivers: Add secureboot & cgroup image reqs
  • doc: Add secureboot and cgroup image reqs
  • lxd: Add zfs.export
  • lxd/storage/drivers: Support zfs.export
  • doc/storage: Add zfs.export
  • api: Add storage_zfs_export extension
  • lxd/instance/qemu: Enable HyperV flags on x86_64
  • doc/storage: Ceph supports quotas
  • tests: Fix failure when shiftfs is skipped
  • lxd/instance/lxc: Fix mount injection on VFS idmap
  • lxd-agent: Fix bad network metric
  • lxd/endpoints/listeners: Add exportable listeners package
  • lxd/endpoints/starttls: Remove TLS methods from endpoints package
  • lxd/ucred/ucred: Use new listeners package
  • lxd/instance/qemu: Restrict HyperV flags to 5.10+
  • lxd/db: Fix stoarge_volumes sequence (again)
  • lxd/dns: Better handle errors
  • api: network_dns_records
  • shared/api: Add network zone record structs
  • doc/rest-api: Refresh swagger YAML
  • client: Add network zone records
  • lxc/network_zone: Add record sub-command
  • i18n: Update translation templates
  • lxd/db: Add the networks_zones_records tables
  • lxd/db: Add network zone records DB functions
  • lxd/lifecycle: Add network zone record events
  • lxd/network/zone: Add record functions
  • lxd/network: Add zone records API
  • lxd/network/zone: Extend template for TTL
  • lxd/network/zone: Add extra records to DNS
  • tests: Add tests for network zones records
  • doc/network-zones: Add section on custom records
  • doc: Fix typo in ZFS storage
  • api: storage_zfs_reserve_space
  • lxd/storage: Add zfs.reserve_space
  • doc/storage: Add zfs.reserve_space
  • scripts: Add zfs.reserve_space to completion
  • lxd/storage/drivers: Sets RunningCopyFreeze to true.
  • doc: add a target to serve the rendered docs
  • doc: add a doc README
  • doc: exclude README.md from doc build
  • lxd: Only patch dnsmasq for networks in the db.
  • lxd/storage/drivers: Factors out fast snapshot logic from volume backup.
  • lxd/storage/drivers: Uses fast snapshot as source of migration.
  • lxd/storage/drivers: Factors out fast snapshot logic from volume backup.
  • lxd/storage/drivers: Uses fast snapshot as source of migration.
  • lxd/storage: Freezes instances during migration.
  • lxc/exec: Don't terminate on SIGWINCH
  • lxd/events: Increase websocket pings to 10s
  • lxd/console: Fix error wrapping
  • lxc/console: Properly handle GUI exitting
  • lxc/console: Fix typo
  • lxd/storage/drivers: Fixes reverter usage.
  • lxd: Restart networks when enabling clustering
  • lxd/network/bridge: Skip HandleHeartbeat on missing forkdns
  • api: network_acl_log
  • client: Add GetNetworkACLLogfile
  • lxc/network_acl: Add show-log
  • i18n: Update translation templates
  • lxd/network/acl: Add log endpoint
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/drivers: Add support for zfs.blocksize config option
  • lxd: Add validation for volume.zfs.blocksize
  • doc: Add zfs.blocksize
  • api: Add storage_zfs_blocksize extension
  • doc: quick cleanup of FAQ
  • api: metrics_cpu_seconds
  • lxd/metrics: Convert to using float64
  • lxd/metrics: lxd_cpu_seconds_total is in seconds, not ms
  • lxd/storage: Expose GetVolume
  • lxd/instance/lxc: Fix filesystem metrics
  • lxd/db: Refactor storage pool used by to get info on all nodes.
  • lxd: Get storage pool used-by info from all nodes if target is unset.
  • lxc/storage: Parse and include node in used-by info.
  • Rename lxd-p2c to lxd-migrate
  • Makefile: s/lxd-p2c/lxd-migrate/
  • test/suites: s/lxd-p2c/lxd-migrate/
  • .github/workflows: s/lxd-p2c/lxd-migrate/
  • .gitignore: s/lxd-p2c/lxd-migrate/
  • lxd/device: Removes VM from list of supported instance types.
  • doc: Clarify multiple GPU device passthrough for VMs.
  • doc/metrics: switch to ECDSA with longer validity
  • doc/metrics: tune scrape_interval to deal with default caching done by LXD
  • doc/metrics: alpha sort prometheus.yml snippet
  • lxd/endpoints: Implements an io.Writer to skip certain input.
  • lxd/endpoints: Adds tests for the networkServerErrorLogWriter.
  • lxd/endpoints: Sets the network server logger when proxies are updated.
  • lxd/instance/lxc: Fix missing fs metrics on bind-mount
  • lxd/operations: Add ExtendMetadata
  • lxd/exec: Use ExtendMetadata
  • shared/api: Fix incorrect image aliases example
  • doc/rest-api: Refresh swagger YAML
  • doc: Add basic instance exec information
  • go.mod: use github.com/mdlayher/vsock@v1.0.0
  • lxd/instance/metrics: Fix incorrect memory metrics
  • lxd/db/generate/db/stmt: Add 'order' tag
  • lxd/db/instance/profiles: Use 'order' tag to order queries by apply order
  • lxd/db/instance/profiles.mapper: Update generated code
  • lxd/metrics: Invert condition as all existing metrics have labels
  • lxd/instance/lxc: Cast statfs.Bsize only once
  • lxd/instance/lxc: Only convert CPU ID once
  • lxd/instance/lxc: Cache labels in for loops
  • api: instance_snapshot_never
  • doc/instances: Add @never to snapshots.schedule
  • lxd: Add @never to snapshots.schedule
  • lxd/instance/qemu: Fix live update logic
  • lxd/instance/qemu: Fix agent-less memory metrics
  • lxd/instance/qemu/qmp: Remove GetMemoryStats
  • lxd/firewall/drivers/drivers/xtables: Don't attempt IPv6 RP filter if not enabled
  • lxd/network/driver/ovn: Don't attempt to configure IPv6 setting is not enabled
  • doc/instances: Fix bridged NIC ipv{n}.address docs indicating none is valid value
  • shared/util/linux: Add channel closed check before writing in ExecReaderToChannel
  • lxd/metrics: OpenMetrics says to end with EOL
  • lxd: Rename metrics to api_metrics
  • lxd/daemon: Drop metrics from main struct
  • lxd/metrics: Rework caching and locking
  • lxd/metrics: Reduce cache to 8s to accomodate 10s intervals
  • lxc/console: Don't write twice to sendDisconnect
  • doc/api-extensions: Remove trailing whitespaces
  • lxd: Check serverName in clusterMemberJoinTokenDecode
  • shared/api/cluster: s/Base64/base64/
  • lxd/certificates: Fix typo in comment
  • lxc/config_trust: Don't remove extension from cert
  • shared: Remove SplitExt
  • lxd/certificates: Rework certificate name logic
  • doc: download external images
  • doc: use local image
  • doc: add doc output to "make dist"
  • shared/api: Add CertificateAddToken
  • lxd/instance/drivers/driver/lxc: Reduce calls to VolatileSet to reduce DB transactions
  • lxd/instance/drivers/load: Removes unused cluster arg from validDevices
  • lxd/instance/drivers: instance.ValidDevices usage
  • lxd/instance/instance/utils: ValidDevices definition and usage
  • lxd/profiles/utils: instance.ValidDevices usage
  • lxd/profiles: instance.ValidDevices usage
  • lxd/project/permissions: Updates CheckClusterTargetRestriction to accept a project record
  • lxd/project/permissions/test: project.CheckClusterTargetRestriction usage
  • lxd/instances/post: project.CheckClusterTargetRestriction usage
  • lxd/instance/post: project.CheckClusterTargetRestriction usage
  • lxd/cluster/config: Add ImagesDefaultArchitecture function
  • lxd/instances/post: Uses config.ImagesDefaultArchitecture
  • shared/api: Add ToCertificateAddToken
  • shared/api: Add Token to CertificatesPost
  • api: Add certificate_token
  • shared: Add CertificateTokenDecode
  • lxd/db: Add OperationCertificateAddToken
  • lxd: Add certificateTokenValid
  • lxd: Support certificate tokens
  • client: Add CreateCertificateToken
  • lxc: Support client tokens in lxc config trust
  • lxc: Support client tokens in lxc remote add
  • lxc: Add lxc config trust list-tokens
  • lxc: Add lxc config trust revoke-token
  • lxc/cluster: Make member arg optional when adding member
  • test/suites/remote: Test client tokens
  • doc/authentication: Add tokens
  • i18n: Update translation templates
  • lxd/instance/instance/utils: Remove call to tx.ProjectExists in CreateInternal
  • lxd/instances/post: Removes unnecessary pool check in instancesPost
  • lxd/db/query/retry: Improve consistency of logging in Retry
  • lxd/instance/instance/utils: Comment fix
  • lxd/instance/instance/utils: Don't call ValidDevices multiple times during instance create
  • lxd/db/networks: Update network load functions to share transaction
  • lxd/instance/drivers: Merge expandDevices with expandConfig
  • lxd/instances/post: Renames targetProject to targetProjectName and p to targetProject
  • lxd/db/storage/pools: Reworks getStoragePool to use a single transaction internally
  • shared/api: Add ToClusterJoinToken
  • lxc/cluster: Switch to ToClusterJoinToken
  • lxc/cluster: Drop clusterJoinTokenOperationToAPI
  • lxc: Translate all errors
  • i18n: Update translation templates
  • lxd/db: Uses api.URL to build used-by urls for storage pools.
  • doc: fix path to image in the header
  • lxd/cluster/gateway: Enable TCP user timeout and connection closing on failure in dqliteNetworkDial
  • lxd/cluster/gateway: Improve logging in dqliteNetworkDial
  • lxd/cluster/gateway: Standardise logging naming of dqliteProxy and dqliteNetworkDial
  • lxc: Properly report alias add/update errors
  • i18n: Update translation templates
  • client: Update example to use instances
  • client: Clearly mark container functions as deprecated
  • lxd/cgroup: Add total_cache on V2
  • lxc/console: Rework concurency model for vga
  • lxd/instance/drivers/driver/qemu: Add check for lxd-agent running in getAgentClient
  • lxd/instance/drivers/driver/qemu: Remove duplicated lxd-agent running status check in agentGetState
  • lxd-agent: Updates startStatusNotifier to return a cancel function
  • lxd-agent: c.startStatusNotifier usage
  • lxd/instance/drivers/qmp/monitor: Add agentReadyMu for proper shared access to agentReady
  • lxd/instance/drivers/driver/qemu: Removed unused agentClient var
  • github: Update for current min Go version (1.16)
  • lxd-migrate: Create interactive tool
  • i18n: Update translations from weblate
  • doc/rest-api: Refresh swagger YAML
  • gomod: Update dependencies

試用環境

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

ダウンロード

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

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

Older news