News

LXD 5.10 リリースのお知らせ

13th of January 2023

はじめに

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

2023 年の最初のリリースは、チームが 2 週間の休暇を楽しんだため、少し軽めのリリースになっています。来月のリリースは、2023 年に実装されるより大きな機能のいくつかを紹介する予定です。

これは LXD 5.10 がつまらないということではありません。データベースのパフォーマンスを最大限引き出すための継続的な取り組みと、今後の機能のための準備作業に加え、品質向上と十分な数のバグフィックスが行われています。

Enjoy!

新機能とハイライト

インスタンスのドキュメントの作り直し

インスタンスのドキュメントを、新しいスタイルのドキュメントにマッチするように再構成しました。一般的な処理を実行するための手順や、様々なデバイスタイプに関する個別のページに分割しました。

これにより、ドキュメントの閲覧が簡単になるとともに、各ページへのリンクも大幅に簡単になります。

ドキュメント : https://linuxcontainers.org/lxd/docs/latest/instances/

サーバーのドキュメントの作り直し

サーバーのドキュメントについても、いくつか再構成をはじめました。サーバーのドキュメントに関しては、ドキュメントの LXD の管理セクションを整理する作業が残っています。しかし、このリリースで整理されたサブセクションとナビゲーションを持つ、よりよい構造のメインページをご覧いただけます。

ドキュメント : https://linuxcontainers.org/lxd/docs/latest/server/

Grafana ダッシュボード上のネットワークの円グラフ

LXD の Grafana ダッシュボードは、トップのインスタンスを特定するすばらしい方法です。
これまでは、CPU、メモリー、ディスクのトップ 5 インスタンスをカバーするグラフがありました。

今回、ユーザーからの要望で、ネットワークの利用状況についてもカバーするようになりました。送信トラフィック、受信トラフィック、送信パケット、受信パケットの上位を示す 4 つの新しいグラフを追加しました。

image|690x304

ダッシュボードは、LXD のソースリポジトリーの https://github.com/lxc/lxd/blob/master/grafana/LXD.json から直接ダウンロードできます。

もしくは、Grafana から直接取得できます(ID 15726): https://grafana.com/grafana/dashboards/15726-lxd/

NIC デバイスの送信キューの長さが設定可能に

新たに veth ベースの nic デバイスで queue.tx.length という設定が利用できるようになりました。
これは、この機能の使用が NIC タイプが bridgedp2prouted のいずれかを使うコンテナに限定されるということです。

この新たな設定項目は、ネットワークインターフェースの txqueuelen を設定できます。これは、パケットのキューイングに関係したレイテンシーの問題に遭遇した場合に役に立つ可能性があり、キューの長さを減らして低遅延な動作を強制するか、逆にキューの長さを増やしてスループットを向上させるために使えます。

すべての変更点(翻訳なし)

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

すべてのChangeLogを見る
  • lxd/storage/ceph: Remove osd map timeout
  • doc/instances: small clarifications to the snapshot documentation
  • doc/devices: Sort macvlan NIC device options in table
  • doc/cloud-init: add info about merging user-data and vendor-data
  • doc/instances: clarify misleading description for linux.sysctl.*
  • doc/initialization: add page for lxd init
  • doc/installing: quick cleanup of headings
  • doc/preseed: move the content from preseed.md to the init page
  • doc/init: clean up documentation of the preseed file initialization
  • doc/storage: add links to MicroCeph
  • doc/clustering: add links and instructions for MicroCloud
  • doc: add MicroCeph and MicroCloud to wordlist
  • lxd/instance/drivers/qmp: Don't mask unexpected monitor response errors with sentinel
  • doc/security: move to a separate section
  • doc/security: clean up section
  • doc/configuration: remove Configuration section
  • lxd/db/images: Updates GetImagesFingerprints to use transactions
  • lxd/db/images: Updates GetImageAliases to use transactions
  • lxd/db/images: Updates GetImageAlias to use transaction
  • lxd/db/images: Updates DeleteImageAlias to use transactions
  • lxd/db/images: Updates CreateImageAlias to use transactions
  • lxd/db/images: Updates UpdateImageAlias to use transaction
  • lxd/db/images: Updates CreateImage to use transaction context
  • lxd/db/db/internal/test: Update image tests
  • lxd/util/http: Update EtagCheck to return api.StatusError with http.StatusPreconditionFailed
  • lxd/images: Updates imagesPost to use single transaction
  • lxd/images: Updates doImagesGet to use transactions
  • lxd/images: Updates imagesGet to use doImagesGet
  • lxd/images: Updates doImageGet to use transactions
  • lxd/images: Updates imageGet to use doImageGet
  • lxd/images: Updates imageAliasesPost to use single transaction
  • lxd/images: Updates imageAliasesGet to use single transaction
  • lxd/images: Updates imageAliasGet to use single transaction
  • lxd/images: Updates imageAliasDelete to use single transaction
  • lxd/images: Updates imageAliasPut to use single transaction
  • lxd/images: Updates imageAliasPatch to use a single transaction
  • lxd/images: Updates imageAliasPost to use a single transaction
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetImagesFingerprints
  • lxd/instance/instance/utils: Updates ResolveImage to use transaction
  • lxd/instance/drivers/driver/qemu: Show actual qemu path in checkFeatures
  • lxd/instance/drivers/driver/qemu: Remove -bios flag from qemu feature check invocation
  • lxd/instance/drivers/driver/qemu: Extract stderr output from qemu during checkFeatures
  • lxd/instance/drivers/driver/qemu: Add -no-user-config to qemu invocation in checkFeatures
  • lxd/instances/post: Remove profile loading from createFromImage
  • lxd/instances/post: Remove profile loading from createFromNone
  • lxd/instances/post: Remove profile loading from createFromMigration
  • lxd/instances/post: Use correct error quoting in createFromMigration
  • lxd/instances/post: Remove profile loading from createFromCopy and clusterCopyContainerInternal
  • lxd/instances/post: Centralise profile validation and loading in instancesPost
  • lxd/instance/instance/utils: Removes fetchInstanceDatabaseObject function
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept optional source instance
  • lxd/instances/post: instance.SuitableArchitectures usage
  • lxd/instances/post: Moves local clustered check earlier
  • lxd/instances/post: Move target group check into initial transaction
  • lxd/instances/post: Pass request context into DB transaction
  • lxd/instances/post: Don't shadow err in instancesPost
  • lxd/instances/post: Keep related error checking together in instancesPost
  • lxd/instances/post: Move InstanceType and Source instance logic earlier in instancesPost
  • lxd/instances/post: Use instance.ValidName in instancesPost
  • lxd/instances/post: Remove duplicated instance name check in createFromImage
  • lxd/instances/post: Update createFromImage to use req.Type for image type
  • lxd/instances/post: Don't load target project again in createFromImage
  • lxd/instance: Fix error quoting in instanceCreateFromImage
  • lxd/instance/instance/utils: Updates ResolveImage to use a transaction
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept a source image reference
  • lxd/instance: Updates instanceCreateFromImage to accept a source image directly
  • lxd/db/db/internal/test: tx.GetCachedImageSourceFingerprint usage
  • lxd/db/images: Updates GetCachedImageSourceFingerprint to use transaction
  • lxd/daemon/images: tx.GetCachedImageSourceFingerprint usage
  • lxd/instances/post: Update createFromImage to accept image info and alias directly
  • lxd/instances/post: Updates instancesPost to resolve image profiles early
  • lxd: Move to current bakery version
  • lxd-migrate: Move to current bakery version
  • client: Move to current bakery version
  • lxc: Move to current bakery version
  • test/macaroon-identity: Move to current bakery version
  • tests: Update godeps.list
  • gomod: Update dependencies
  • lxd/instance/drivers/driver/qemu: Update architectureSupportsUEFI to add arch argumnent
  • lxd/instance/drivers/driver/qemu: Update checkFeatures to add -bios flag for UEFI architectures
  • lxd/instance: Improve logging in autoCreateInstanceSnapshots
  • lxd-migrate: Fix usage string
  • doc: fix version conflicts for doc tools
  • lxd/storage/drivers/driver/zfs: Improve error when existing zpool isn't empty
  • lxd/storage/s3/miniod: Wait 10s for minio process to start
  • doc/lxd-migrate: add information about updating the configuration
  • lxd/instance/drivers: Don't fail Start if renaming old log file doesn't exist
  • lxd/storage/backend/lxd: Improve bucket errors
  • forksyscall: ensure that parent mount is dependent mount
  • lxd/storage/drivers/driver/btrfs/utils: Fix getQGroup to suport BTRFS >= 6.0.1
  • lxd/storage/s3/miniod: Wait for config to be available before considering ready
  • forksyscall: avoid double MS_MOVE
  • lxd/db/query/dump: Correctly generate CREATE TABLE statement
  • lxd/db/query/dump: Correctly escape single quote and \n and \r
  • lxd/db/query/dump/test: Fix dump tests
  • lxd/db/warnings: Store warning times in UTC
  • gomod: Update github.com/shirou/gopsutil/v3
  • lxc/init: Fix --no-profiles flag
  • test: Adds test for lxc init --no-profiles
  • lxd/instance/drivers/driver/qemu: Add qemuMachineType function
  • lxd/instance/drivers/driver/qemu/config/test: Fix architecture tests
  • lxd/instance/drivers/driver/qemu/config/test: Fix whitespace
  • lxd/instance/drivers/driver/qemu: Adds -machine type argument to checkFeatures
  • lxd/network add function to get txqlen
  • lxd/instances/post: Move cluster member targetting checks higher up
  • lxd/instances/post: Use architecture from source image in request
  • lxd/instances/post: Remove logger.Debugf usage
  • lxd/instances/post: Rework cluster member targetting logic
  • lxd/instances/post: Only check project instance creation permissions on initial cluster member
  • lxd/instances/post: Send notification header when redirection create request to different cluster member
  • lxd/db/node: Adds GetCandidateMembers function
  • lxd/db/node: Reworks GetNodeWithLeastInstances to accept list of candidate members
  • lxd/db/node/test: Update tx.GetNodeWithLeastInstances tests
  • lxd/instances/post: Split generation of candidate cluster members from selection of member with fewest instances
  • lxd/api/cluster: tx.GetNodeWithLeastInstances usage
  • lxd/ip add function to set txqlen
  • grafana: add top network usage graphs
  • fix dead lock bug
  • lxd/instance/drivers: Fixes delete of ephemeral VM on stop
  • gomod: Update dependencies
  • lxd/instance/instance/utils: Updates SuitableArchitectures to return api.StatusError for bad requests
  • lxd/instance/instance/utils: Accept db.ClusterTx in SuitableArchitectures
  • lxd/instances/post: Move instance.SuitableArchitectures and tx.GetCandidateMembers into existing transaction
  • lxd/db/node: Skip pending nodes in GetCandidateMembers
  • lxd/db/node: Modified GetCandidateMembers to accept list of all cluster members
  • lxd: tx.GetCandidateMembers usage
  • lxd/project/permissions: Removes unused tx argument from CheckClusterTargetRestriction
  • lxd: project.CheckClusterTargetRestriction usage
  • lxd/instances/post: Reject use of target parameter when not clustered in instancesPost
  • lxd/instances/post: Allow targeting all cluster groups if project restricted.cluster.groups is empty
  • lxd/instances/post: Check manually targeted cluster member belongs to one of restricted.cluster.groups
  • lxd/db/node: Updates GetNodeWithLeastInstances to return NodeInfo
  • lxd/db/node/test: tx.GetNodeWithLeastInstances usage
  • lxd/api/cluster: Updates evacuateClusterMember tx.GetNodeWithLeastInstances usage
  • lxd/instances/post: Updates instancesPost tx.GetNodeWithLeastInstances usage
  • test: Update cluster targeting tests
  • test: Restructure test_clustering_membership to be less flaky
  • test: Lower boot.host_shutdown_timeout during clustering evacuation tests
  • lxd/api/cluster: Improve logging in evacuateClusterMember
  • lxd/db: Changed snapshot sort from date to datetime
  • lxd/api: Add support for serving the UI
  • doc: Fix broken cloud-init doc links
  • lxd/db/instances: Sort snapshots by creation time and then ID in GetInstanceSnapshotsNames and GetNextInstanceSnapshotIndex
  • lxd/info: Use snapshot order from server in instanceInfo
  • lxd/db/storage/volumes: Order by volume snapshot creation date first in GetStoragePoolVolume
  • doc/networks: add instructions for attaching a network to an instance
  • doc/server: struture the server options page
  • doc/server: split up configuration table
  • doc/server: update links to point to more specific sections
  • doc/server: clean up configuration options
  • lxd/device Add support for setting txqueuelen on veth based NICs
  • test: Add test for setting txqueuelen of nic bridged device
  • api: Adds txqueuelen api description
  • lxd/instances/post: Reduce scope of target member and group variables
  • lxd/instances/post: Updates comments
  • lxd/db/node: Make NodeInfo.ToAPI more efficient when called multiple times
  • lxd/db/node: Improve GetNodeMaxVersion comment
  • lxd/api/cluster: Updates member functions to use modified ToAPI function
  • lxd/api/cluster: Consistent error quoting
  • lxd/db/node: Don't run unnecessary query for getting offline threshold in GetCandidateMembers
  • lxd: tx.GetCandidateMembers usage
  • lxd/db/node/test: Updated tx.GetCandidateMembers usage
  • lxd/api/cluster: Fixes clusterNodesPost API description
  • doc/rest-api: Refresh swagger YAML
  • gomod: Update dependencies
  • i18n: Update translations from weblate

試用環境

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

ダウンロード

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

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

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

LXD 5.9 リリースのお知らせ

12th of December 2022

はじめに

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

このリリースが 2022 年の最後のリリースになるでしょう。
楽しい休日をお過ごしください。2023 年にお会いできることを楽しみにしています!

今年最後のリリースということで、開発サイクルも 3 週間と短く、そのほとんどをバグフィックスとパフォーマンスの改善に費やしました。1 年を締めくくるのにふさわしいものになりました!

Enjoy!

新機能とハイライト

ネットワークゾーンのプロジェクト機能

これまでのリリースでは、ネットワークゾーン(DNS)は features.networks と結びついており、プロジェクトごとの DNS ゾーンを取得するために、事実上 OVN を使用する必要がありました。

これは現在、新たに features.networks.zones に分割され、features.networks を使わない環境でもプロジェクトごとのゾーンを使えるようになりました。共有ネットワークを扱う場合、そのネットワークは複数のゾーンを指定できます(カンマ区切り)。各ゾーンは所属するプロジェクトのレコードのみを含むことになるでしょう。

すべての変更点(翻訳なし)

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

すべてのChangeLogを見る
  • lxd/network/driver/bridge: Remove unnecessary query for server name in Leases
  • lxd: Fix use of inst.Project() in logs with inst.Project().Name
  • lxd/api/metrics: Fix race condition on map access in metricsGet
  • lxd/instance/drivers/driver/qemu: Fix blockNodeName to use base64 raw URL format
  • lxd/instance/post: Prevent moving instance to invalid (or empty) name
  • lxd/db: Fix default profile assigment on image creation in the default project
  • lxd/db/cluster: Fix the comment for InitProjectWithoutImages function
  • lxd/main: Fix that change project "features.images" to "false" didn't add the project default profile to images from "default" project
  • lxd/instance/drivers: Restrict CPU hotplugging
  • lxd/instance/drivers: Fix CPU hotplug check
  • lxd/instance/drivers: Handle unset limits.cpu
  • tests: Add test for correct default profile assigment to images in projects with "features.images=false"
  • lxd/device/tpm: Expose tpmrm to the container
  • doc: allow returning traffic in DOCKER-USER custom chain
  • scripts/bash/lxd-client: fix autocompletion not working
  • lxd/util: Skip cephobject in AvailableStorageDrivers
  • lxd/apparmor/archive: Fix image unpack apparmor profile in archiveProfile
  • lxd/daemon/storage: Improve errors in daemonStorageValidate
  • lxd/api/1.0: Improve errors in doApi10Update
  • lxd/storage/drivers/volume: Use roundVolumeBlockFileSizeBytes in ConfigSizeFromSource
  • test: Add test for custom volume image unpack
  • lxd/storage/drivers/volume: Update Test_Volume_ConfigSizeFromSource tests
  • lxd/device/nic: Add hwaddr key to liblxc NIC config
  • lxd/containers: Fix error handling on stop/shutdown
  • lxd/containers: release the liblxd instance if raw.lxc is invalid
  • lxd/fsmonitor/drivers/driver/fsnotify: Switch away from github.com/fsnotify/fsnotify package
  • lxd/device/device/utils/unix/events: Adds event action to error log in unixRunHandlers
  • lxd/device/unix/common: Detect missing source device in unixDeviceAttributes
  • lxd/fsmonitor/drivers/common: Clean file paths for handler registrations
  • lxd/fsmonitor/drivers/interface: Adds Name() to definition
  • lxd/fsmonitor/drivers/driver/inotify: Renames fsnotify driver to inotify
  • lxd/fsmonitor/drivers/driver/fanotify: Adds Name() function
  • lxd/fsmonitor/drivers/load: Rename fsnotify to inotify
  • lxd/fsmonitor/load: Use inotify instead of fsnotify
  • Replace "the the" with "the"
  • lxd/main/forkdns: Replace github.com/fsnotify/fsnotify with k8s.io/utils/inotify
  • lxd/main/forkdns: Wrap error and don't include newline in returned error
  • gomod: Adds k8s.io/utils
  • lxd/device/device/utils/unix/events: Only call filepath.Clean once in unixRegisterHandler
  • lxd/device/device/utils/unix/events: Don't use logger.Debugf in unixRegisterHandler
  • config: Fix inconsistency with acme.agree_tos option
  • lxc/init: Improve cmdInit device override to work nicely with --storage and --network flags
  • lxd/utils: Improve error in parseDeviceOverrides
  • i18n: Update translation templates
  • lxd/storage/drivers/interface: Add roundVolumeBlockSizeBytes definition to Driver interface
  • lxd/storage/drivers/driver/common: Move roundVolumeBlockSizeBytes to common driver
  • lxd/storage/drivers: pool driver roundVolumeBlockSizeBytes usage
  • lxd/storage/drivers/utils: Removes unused roundVolumeBlockFileSizeBytes function
  • lxd/storage/drivers/driver/lvm: Overrides roundVolumeBlockSizeBytes function
  • lxd/network/network/utils: Adds filter support to UsedByInstanceDevices
  • lxd/network/driver/bridge: Updates Leases to use UsedByInstanceDevices
  • lxd/network/driver/ovn: Update Leases to use UsedByInstanceDevices
  • lxd: Remove nictype checks for ovn
  • qemu: Add more feature checks
  • qemu: Check CPU hotplug support using features not architectures
  • drivers: Issue log message when instance type is operational
  • lxd/network/driver/common: Adds netType var and moves Type() to common
  • lxd/network/driver: Removes per-driver Type() function
  • lxd/network/network/load: Ensure LoadByType initialises netType variable
  • lxd/network/network/utils: Adds network type to NIC connected to network logic
  • lxd/device/nic/bridged: Update checkAddressConflict to use UsedByInstanceDevices
  • lxd/device/nic/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/bridge: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/common: Pass network type to UsedBy
  • lxd/networks: Pass network type to network.UsedBy
  • test: Add timeout to interactive edit commands
  • test: check LXC driver version instead of QEMU's
  • test: image short fingerprints are 12 chars long
  • test: use grep instead of cat | grep
  • doc/instances: clean up devices overview section
  • doc/devices: clean up docs for none device type
  • doc/devices: sort tables for nic device type alphabetically
  • test: use awk instead of awk | awk
  • test: use awk instead of grep | cut
  • ceph: Drop unnecessary volume.block.* config keys
  • Makefile: optimize find call
  • Makefile: check test/extras/*.sh using shellcheck
  • test/extras: shellcheck fixes
  • shared/subprocess/testscript/signal.sh: lookup signal name to trap
  • doc: simplify markdown error postprocessing
  • doc: move trap before preprocessing
  • doc: silence command -v's output
  • lxd/project/permissions: Use consistent quoting in errors
  • lxd/project/permissions: Improve error wrapping
  • lxd/storage/volumes: Pass request context to transaction
  • lxd/instance/put: Use request context for transaction
  • lxd/storage/volumes: Don't check project limits when doing a volume snapshot restore
  • lxd/network/driver/bridge: Only include downstream OVN virtual router addresses for network's project in Leases
  • lxd/network/driver/bridge: Add network's own gateway IPs to Leases list
  • lxd/network/driver/ovn: Add network's own gateway IPs to Leases list
  • lxd/device/proxy: Simplify check in validateConfig
  • doc: add link to Running in production YouTube video
  • api: Adds projects_networks_zones extension
  • doc: Adds features.networks.zones project feature and updates networks dns.zone.forward setting
  • doc: Update network zones howto with multiple forward zones info
  • lxd/db/cluster/update: Patch to add features.networks.zones=true to any project that has features.networks=true
  • lxd/db/cluster/projects: Reworks project features info and adds features.networks.zone feature
  • lxd/db/migration: Switch to using cluster.ProjectFeatures in importPreClusteringData
  • lxd/db/cluster/open: ProjectFeatures usage
  • lxd/api/project: cluster.ProjectFeatures usage in projectsPost
  • lxd/api/project: Use cluster.ProjectFeatures in projectChange
  • lxc/project: Adds features.networks.zones support to cmdProjectList
  • lxd/project/project: Clarifies comment on NetworkProject
  • lxd/project/project: Adds NetworkZoneProjectFromRecord and NetworkZoneProject functions
  • lxd-user/lxd: Enable features.networks.zones project feature by default for user projects
  • lxd/api/project: Add validation for features.networks.zones
  • lxd/network/zones: Make network zones belong to their effective network zone project
  • lxd/network/zones: Use current method of generating API URLs
  • lxd/network/zone/zone: Update usedBy to handle networks having multiple zones
  • lxd/network/driver: Update validatation of network forward zone key
  • lxd/db/network/zones: Rename GetNetworkZones to GetNetworkZonesByProject
  • lxd/network/zones: GetNetworkZonesByProject usage
  • lxd/network/zone/reverse: Update reverse function to take net.IP
  • lxd/network/zone/zone: Update Content to handle networks supporting multiple forward zones
  • lxd/db/network/zones: Removes unused GetNetworksForZone function
  • i18n: Update translation templates
  • test: Update tests to check for network zones project views
  • docs: Added snap version directory for local remotes
  • lxd/network/zones: Use project.NetworkZoneProject in networkZonesGet
  • lxd/apparmor: fix AppArmor profile for qemu-img
  • lxd/db/generate/db/method: Add generic struct fetching functions
  • lxd/db/cluster/warnings.mapper: Update generated code
  • lxd/main/forkdns: Updates serversFileMonitor to only watch for inotify.InMovedTo event
  • test: Don't use temporary pid files for forkdns
  • test: Simulate what LXD does when building forkdns servers.conf
  • test: kill -9 forkdns processes to ensure they are killed
  • test: Make network zones more strict
  • doc/howto/cluster/manage: Adds --cohort="+" to snap refresh command
  • lxd/instance/drivers/driver/qemu: Use errors.Is in renderState
  • lxd/instance/drivers/driver/qemu: Adds non-agent metrics fallback in Metrics
  • lxd/instance/drivers/driver/qemu: Use shared.IsTrueOrEmpty in agentMetricsEnabled
  • client/connection: Don't use logger.Debugf
  • lxd/api/metrics: Correctly size slice of project names in projectNames
  • lxd/api/metrics: Use request context for DB transaction
  • lxd/api/metrics: Get internal metrics using existing DB transaction in metricsGet
  • lxd/api/metrics: Move duplicated code into invalidProjects function
  • lxd/locking/lock: Adds context support to Lock
  • lxd: locking.Lock usage
  • lxd/api/metrics: Use multiple OR filters to avoid calling InstanceList multiple times
  • lxd/query: Only repeat query as plain request for JSON decode errors in cmdQuery
  • lxd/api/metrics: Use locking.Lock with timeout in metricsGet
  • lxd/api/metrics: Limit concurrency of instance metrics building in metricsGet
  • lxd/api/metrics: Pre-allocate newMetrics map to right size
  • lxd/db/instances: Adds context argument to InstanceList
  • lxd: InstanceList with context usage
  • lxd/api/metrics: Pass request context to InstanceList in metricsGet
  • lxd/endpoints/vsock: Update VsockAddress to return net.Addr interface
  • lxd/instance/drivers/driver/qemu: Fix nested VMs in getAgentConnectionInfo
  • lxd/instance/drivers/driver/qemu: Don't generate agent.conf if no host vsock info in generateConfigShare
  • lxd/device/nic: Use api.NetworkStatusUnavailable constant
  • lxd/resources/network: Ignore errors from ethtoolAddPortInfo
  • doc/devices: clean up docs for nic device type
  • doc/devices: sort tables alphabetically
  • doc/devices: clean up docs for disk device type
  • doc/devices: clean up docs for gpu device type
  • doc/devices: clean up docs for infiniband device type
  • doc/devices: clean up docs for pci device type
  • doc/devices: clean up docs for proxy device type
  • doc/devices: clean up docs for tpm device type
  • doc/devices: clean up docs for unix-block device type
  • doc/devices: clean up docs for unix-char device type
  • doc/devices: clean up docs for unix-hotplug device type
  • doc/devices: clean up docs for usb device type
  • doc/devices: document device option override at creation
  • doc/devices: fix doc on how to use a specific VF as a NIC
  • lxd/migrate/instance: Don't use multi-sync when using optimized transfer mode
  • lxd/storage/drivers: Make using volSrcArgs.{MultiSync|FinalSync} with MigrateVolume an error
  • lxd/storage/drivers/driver/zfs/volumes: Remove unused multi-sync logic from migrateVolumeOptimized
  • lxd/instance/drivers: Improve pool name change check error
  • lxd/storage/drivers/driver/zfs/volumes: Use deferred option for deleting temporary snapshots
  • test: Force stop containers in migration tests
  • lxd/storage/drivers/utils: Use consistent error quoting in TryUnmount
  • lxd/storage/drivers/driver/zfs/volumes: Use existing dataset var in UnmountVolume
  • lxd/api/1.0: Move wait for server to be ready out of doApi10UpdateTriggers
  • lxd/api/1.0: Explicitly use context.Background() in api10Put and doApi10Update
  • lxd/api/1.0: Use request context in doApi10Update when validating request
  • lxd/api/1.0: Use contextual logging
  • lxd/storage: Disable io_uring on ZFS
  • lxd/instance/drivers/qmp/commands: Updates SendFile to use Go's JSON encoder
  • lxd/instance/drivers/qmp/commands: Adds CloseFile function
  • lxd/instance/drivers/driver/qemu: Fix macvlan NICs losing connectivity on LXD restart
  • lxd/instance/drivers/qmp/commands: Adds QueryCPUs function
  • lxd/instance/drivers/driver/qemu: Fix multi-queue NIC support in addNetDevConfig
  • lxd/device/nic/sriov: Fix nicSRIOV to pass VF MAC address to VM if not specified
  • lxd/instance/drivers/driver/qemu: Improve MAC parse error in writeNICDevConfig
  • lxd/apparmor: fix AppArmor instance_qemu profile
  • lxd/migrate/instance: Consider RBD transfer non-optimised
  • doc/instances: clean up docs for instance properties
  • doc/instances: reorder instance options docs
  • doc/instances: fix links to instance options
  • doc/instances: add how-to guide for creating snapshots
  • lxd/storage/drivers/driver/ceph/volumes: Don't expect multi-sync for live optimized transfer in CreateVolumeFromMigration
  • lxd/storage/drivers/driver/ceph/volumes: Don't allow multi-sync for optimized transfer in MigrateVolume
  • Revert "lxd/migrate/instance: Consider RBD transfer non-optimised"
  • doc/instances: clean up instance options
  • doc/snapshots: add information about snapshot pattern format
  • doc/instances: clean up unit reference
  • doc/instances: move Override QEMU configuration
  • doc/instances: clean up QEMU override section
  • lxd/storage/drivers/interface: Make HasVolume return an error
  • lxd/storage/backend/lxd: b.driver.HasVolume usage
  • lxd/storage/backend/lxd: Check storage pool is ready before checking usage
  • lxd/storage/drivers/driver/btrfs/volumes: HasVolume usage
  • lxd/storage/drivers/driver/ceph: HasVolume usage
  • lxd/storage/drivers/driver/cephfs: HasVolume usage
  • lxd/storage/drivers/driver/common: HasVolume usage
  • lxd/storage/drivers/driver/dir: HasVolume usage
  • lxd/storage/drivers/driver/lvm: HasVolume usage
  • lxd/storage/drivers/driver/mock: HasVolume usage
  • lxd/storage/drivers/driver/zfs: Renames checkDataset to datasetExists
  • lxd/storage/drivers/generic/vfs: Updates genericVFSHasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds placeholder volume exists check for Mount
  • lxd/storage/drivers/driver/ceph/volumes: Updates hasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds 10s timeout to GetVolumeUsage and rbdMapVolume
  • lxd/instance/drivers/qmp: Adds SetAction function
  • lxd/instance/drivers/driver/qemu: Set reboot action to shutdown
  • lxd/instance/drivers: Ignore in-use unmount errors on instance stop
  • i18n: Update translations from weblate
  • gomod: Update dependencies

試用環境

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

ダウンロード

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

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

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

LXD 5.8 リリースのお知らせ

18th of November 2022

はじめに

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

ここ数週間、LXD チーム全体がミーティングのためにプラハに出張していたため、今回もかなり軽めのリリースになりました。

それでも、このリリースに間に合うように、かなりエキサイティングな機能とパフォーマンスの改良を実現できました。

Enjoy!

新機能とハイライト

VM での CPU ホットプラグ

仮想マシンの limits.cpu の値を稼働中に更新できるようになりました。
これにより、仮想マシンへの CPU のホットプラグとホットリムーヴができるようになりました。

stgraber@castiana:~$ lxc launch images:ubuntu/22.04/cloud v1 --vm
Creating v1
Starting v1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=2
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    -      -    - -                 no

stgraber@castiana:~$ lxc exec v1 -- bash
root@v1:~# echo 1 > /sys/bus/cpu/devices/cpu1/online
exit

stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      0    1 3:3:3:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
stgraber@castiana:~$
stgraber@castiana:~$ lxc launch images:ubuntu/22.04/cloud v1 --vm
Creating v1
Starting v1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=2
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    -      -    - -                 no

stgraber@castiana:~$ lxc exec v1 -- bash
root@v1:~# echo 1 > /sys/bus/cpu/devices/cpu1/online
exit

stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      0    1 3:3:3:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
stgraber@castiana:~$

init と launch 時のデバイスのオーバーライド

lxc launchlxc init のときに、特定のデバイスをオーバーライドできるようになりました。
これは、カスタムルートディスクのサイズを設定するときに特に便利です。

stgraber@castiana:~$ lxc launch images:ubuntu/22.04 u1 -d root,size=20GiB
Creating u1
Starting u1
stgraber@castiana:~$ lxc exec u1 -- df -h /
Filesystem               Size  Used Avail Use% Mounted on
rpool/lxd/containers/u1   21G  327M   20G   2% /
stgraber@castiana:~$

ボリュームの作成日の記録

カスタムストレージボリュームに作成日が追加されました。

stgraber@castiana:~$ lxc storage volume create default foo
Storage volume foo created

stgraber@castiana:~$ lxc storage volume show default foo
config: {}
description: ""
name: foo
type: custom
used_by: []
location: none
content_type: filesystem
project: default
created_at: 2022-11-18T16:49:36.857660311Z

これにより、インスタンスやイメージに対して行われていることと同じように、マイグレーションや更新処理のときに役に立つ追加情報が提供されます。

すべての変更点

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

すべてのChangeLogを見る
  • doc: Clarify that remote token expiry default to no expiry
  • doc: Add missing expires_at field to token structs
  • lxd/db/operationtype: Rename to RemoveExpiredTokens
  • lxd: Remove auto removal of cluster join tokens
  • lxd: Add tasks for expired token removal
  • shared/api/init: Add exported preseed structs
  • lxd/main/init/preseed: Update usages
  • shared/version/api: Update api extensions
  • lxd/device: Continue if device is nil
  • lxc: Extend image filtering
  • lxd/network/driver/ovn: Get dynamically allocated IPs from OVN switch port even if not using DHCP
  • shared/cert: Add GenerateTrustCertificate to shared package
  • lxd/cluster/connect: Update usages
  • lxd/cluster/connect: Use 409 error for existing trusted cert
  • test/suites: Unset join_token_expiry when done
  • test/suites: Increase join_token_expiry to 10 seconds
  • doc/authentication: clarify expiration of cluster join tokens
  • lxd/api/internal: Only cancel shutdown wait if forced
  • lxd/operations: Simplify waitForOperations
  • lxd/daemon: Remove unnecessary log message in Stop
  • lxc init: Fix usage line in the help output
  • doc/instances: restructure content
  • doc/instances: quick clean-up of content
  • i18n: Update translation templates
  • lxd/device/nic/bridged: Relax duplicate instance name check
  • test: Update check for bridged NIC duplicate instance DNS name
  • api: Adds storage_volumes_created_at extension
  • shared/api/storage/pool/volume: Adds CreatedAt field to StorageVolume and StorageVolumeSnapshot structs
  • lxd/db/cluster: Adds creation_date column to storage_volumes and storage_volumes_snapshots table
  • lxd/db/storage/volume/snapshots: Comment and error improvements to CreateStorageVolumeSnapshot
  • lxd/db/storage/volume/snapshots: Adds creationDate argument to CreateStorageVolumeSnapshot
  • lxd/db/storage/volume/snapshots: Clarify projectName argument in CreateStorageVolumeSnapshot
  • lxd/db/storage/volumes: Clarify projectName argument in CreateStoragePoolVolume
  • lxd/db/storage/volumes: Comment and error improvements to CreateStoragePoolVolume
  • lxd/db/storage/volumes: Adds creationDate argument to CreateStoragePoolVolume
  • lxd/storage/utils: Adds creationDate argument to VolumeDBCreate
  • lxd: Update storage volume tests
  • lxd/storage/utils: Adds creationDate argument to VolumeDBCreate
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumesWithType to populate creation date
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumeWithID to populate creation date
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to populate creation date
  • lxd/db/storage/volumes: Updates GetLocalStoragePoolVolumeSnapshotsWithType to populate creation date
  • lxd/db/storage/volumes: Updates GetCustomVolumesInProject to populate creation date
  • lxd/db/storage/volume/snapshots: Updates GetStorageVolumeSnapshotWithID to populate creation date
  • lxd/db/storage/volume/snapshots: Updates GetExpiredStorageVolumeSnapshots to populate creation date
  • lxd/storage/backend/lxd: Use instance's creation date for storage volume creation date in CreateInstance
  • lxd/storage/backend/lxd: Updates CreateInstanceFromBackup to populate creation date
  • lxd/storage/backend/lxd/patches: Updates patchMissingSnapshotRecords with VolumeDBCreate usage
  • lxd/storage/backend/lxd: Use new instance to populate creation date in CreateInstanceFromCopy
  • lxd/storage/backend/lxd: Use source snapshot for creation date in RefreshCustomVolume
  • lxd/storage/backend/lxd: Use source snapshot for creation date in RefreshInstance
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceFromImage
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceFromMigration
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceSnapshot
  • lxd/storage/backend/lxd: Populate creation date in EnsureImage
  • lxd/storaga/backend/lxd: Populate creation date in CreateCustomVolume
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: Populate creation date in ImportCustomVolume
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeSnapshot
  • lxd/storage/backend/lxd: Populate creation date in GenerateInstanceBackupConfig
  • lxd/storage/backend/lxd: Populate creation date in ImportInstance
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromBackup
  • lxc/storage/volume: Adds Created output to cmdStorageVolumeInfo
  • lxd/storage/volumes/snapshot: Add creation date to the API output
  • test: Add storage volume creation date tests
  • shared/netutils/network/linux/cgo: Don't call net.InterfaceByIndex in NetnsGetifaddrs
  • lxd/instance/instance/interface: Allow passing host interface info into Render* functions
  • lxd/instance/drivers/driver/lxc: Update Render functions to allow receiving list of host interface info
  • lxd/instance/drivers/driver/qemu: Render* function interface updates
  • lxd/instance: Update Render* function usage
  • lxd/main/forknet: netutils.NetnsGetifaddrs usage
  • lxc: Adds util to parse device overrides.
  • lxc: Use device override parser in lxc copy.
  • lxd/instance/instance/interface: Adds hostInterfaces argument to Metrics
  • lxd/instance/drivers: Updated Metrics implementation to accept hostInterfaces argument
  • lxd/api/metrics: inst.Metrics usage
  • Add resolv.conf location under WSL
  • doc: remove intro sentence for configuration
  • lxc: Fetch profiles and apply device overrides on init/launch.
  • po: Updates pot files.
  • doc/clustering: clarify that you should remove offline members
  • shared/validate: Add CPU set validator
  • shared: Use validator function for limits.cpu
  • suites/basic: Adds test for overriding device config on init.
  • lxd: Sets Location field to hostname for GET /1.0 in devlxd API.
  • lxd/instances/lxc: Fix build on MIPS
  • doc/instances: add instructions on managing instances
  • doc/instances: move QEMU config howto to configuration section
  • doc/instances: make titles more consistent
  • doc/instances: add instructions for configuring instances
  • doc/instances: update Live update column
  • doc/instances: update Profiles documentation
  • lxd/storage/pools: Initialize pool config if nil
  • devlxd: Do not return devlxd info if turned off
  • lxd/instance/drivers: Add function to get agent connection info
  • lxd/instance/drivers: Use getAgentConnectionInfo()
  • lxd/instance/drivers: Add function to store connection info
  • lxd/instance/drivers: Notify lxd-agent about devlxd early
  • lxd-agent: Add function to store connection info
  • client/util: Use ConnectionArgs.Proxy with unix socket client
  • lxd-agent: Return correct error when querying devlxd
  • lxd-agent: Start devlxd before calling systemd-notify
  • lxd: Remove shadowed variable name.
  • scripts/bash/lxd-client: Add missing file mount sub-command
  • doc: add SFTP to the wordlist
  • doc/instances: add instructions for accessing files
  • lxd: Check LXD ready state before changing instance
  • lxd/network/driver/bridge: Adds MTU DHCP option when using fan mode
  • shared/api: Add devlxd structs
  • lxd/instance/drivers/qmp: Add function to query hotpluggable CPUs
  • lxd/instance/drivers: Add function to hot-(un)plug CPUs
  • lxd: Use shared devlxd structs
  • lxd-agent/api: Use shared devlxd structs
  • doc/instances: add instructions for running commands and logging on
  • doc: fix broken link
  • test/suites/sql: safe grep usage
  • lxd/device/tpm: Handle TPM devices in profiles
  • doc/projects: add YouTube video
  • doc/migration: add YouTube video
  • doc: the location is set in responses from GET /1.0 in devlxd API
  • workflows: update package definitions only once
  • workflows: use apt-get instead of apt to avoid a warning
  • shared/api: fix typos s/cerated/created/
  • doc/rest-api: Refresh swagger YAML
  • doc: add a reminder to run "make update-api" in contributing doc
  • lxd/init: Use strict checking for preseed
  • test/lint: Check that doc/rest-api.yaml is kept up to date
  • workflows: sort package list and remove duplicated "libdqlite-dev"
  • doc: Fix configuration directory in remotes.md
  • build(deps): bump actions/dependency-review-action from 2 to 3
  • lxd/instances: Comment clarification
  • lxd/fsmonitor/drivers/driver/fanotify: Add context to getEvents
  • lxd/instances: Limit shutdown concurrency to number of instances or number of CPU cores (which ever is less)
  • lxd/daemon: Removes duplicated Stopping instances logging
  • test: Increase lxc_remote timeout to 120s
  • doc/instances: add example for filtering by location
  • lxd/migrate: Remove uneccessary error log entry in migrationSourceWs.Connect
  • shared/tcp/tcp/timeout/user: Improve error message in SetUserTimeout
  • shared/tcp/tcp/timeouts: Adds userTimeout argument to SetTimeouts
  • client: tcp.SetTimeouts default larger user timeout usage
  • lxd: tcp.SetTimeouts default larger user timeout usage
  • lxd/cluster/gateway: tcp.SetTimeouts usage keeping original 30s timeout
  • lxd/storage/backend/lxd: Update DeleteImage to not use GetImageFromAnyProject
  • lxd/acme: Switch to github.com/go-acme/lego/v4
  • Update gomod
  • lxd/devlxd: Populate NIC device hwaddr field from volatile in devlxdDevicesGet
  • test: Fix delay in lxd shutdown during devlxd test
  • devlxd-client: Adds devices support
  • test: Adds devlxd NIC devices hwaddr check
  • doc/security: add YouTube link
  • lxd/api: Improve top level 404 log message
  • lxd/instance/operationlock: Adds instance initiated concept to InstanceOperation
  • lxd/instance/drivers: Fixes container initiated instance-shutdown lifecycle event
  • lxd/instance/drivers: Drop unnecessary line
  • lxd/instance/drivers: Set CPU QEMU template depending on pinning
  • lxc/instance/drivers: Dynamically add CPUs on start
  • lxd/instance/drivers: Allow CPU hotplugging for VMs
  • api: Add cpu_hotplug extension
  • doc: Mention limits.cpu live update for VMs
  • lxd/storage/utils: Adds generic CompareSnapshots function and type
  • lxd/instance/instance/utils: Removes unused CompareSnapshots function
  • lxd/instance: Updates instanceCreateAsCopy to use storagePools.CompareSnapshots
  • lxd/migrate/instance: Update migrationSink.Do to use storagePools.CompareSnapshots
  • lxd/migrate/instance: Remove unused migrationCompareSnapshots
  • lxd/storage/backend/lxd: Updates RefreshCustomVolume to use CompareSnapshots
  • lxd/instance/instance/utils: Return nil error on success in LoadFromBackup
  • lxd/api/internal: Return explicit nil instance on error in internalContainerHookLoadFromReference
  • lxd/migrate/storage/volumes: Updates migrationSink.DoStorage to use storagePools.CompareSnapshots
  • lxd/migrate/storage/volumes: Removes unused migrationStorageCompareSnapshots
  • test: Updates migration tests now that migrating custom volumes uses creation date comparison
  • test: Reduce "shellcheck disable=SC2034" usage
  • lxd/device/disk: Fix attaching cephfs volumes to VMs
  • lxd/cluster/resolve: Don't convert not found error in ResolveTarget to internal server error
  • lxc/storage/volume: Fix copying storage volume to a remote from a cluster member
  • lxd/storage/drivers/driver/zfs/volumes: Allow zfs.blocksize to control volblocksize
  • lxd/storage/utils: Improve error and comment in VolumeDBCreate
  • gomod: Update dependencies
  • i18n: Update translations from weblate
  • gomod: Fix minio build

試用環境

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

ダウンロード

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

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

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

LXD 5.7 リリースのお知らせ

21st of October 2022

はじめに

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

今回は軽めのリリースですが、すばらしい小さな追加と多数のバグ修正がなされています。

Enjoy!

新機能とハイライト

ACME / Let's Encrypt サポート

LXD は HTTP ベースの検証をサポートする ACME 互換プロバイダー経由で、自身の証明書を自動的に発行できるようになりました。

もっとも良く知られているプロバイダーは Let's Encrypt です。

設定面では、この機能は新しいいくつかの設定キーを使って使います:

  • acme.ca_url
  • acme.domain
  • acme.email
  • acme.agree_tos

ほとんどのユーザーは acme.domainacme.agree_tos を設定するだけでセットアップができるでしょう。

ネットワーク面で、この機能を使うための要件がいくつかあります。
検証は HTTP 経由で行われます。この検証は、acme.domain で設定したサーバーが 80 番と 443 番ポートの両方をパブリックにリッスンする必要があります。80 番ポートはすべてのトラフィックを HTTPS 経由で同じ URL にリダイレクトするように設定されている必要があります。そして 443 番ポートは LXD に到達する必要があります。

ドキュメントには、これを行う HAProxy の基本的な設定が含まれています。
https://linuxcontainers.org/lxd/docs/master/authentication/#tls-server-certificate

ドキュメント : https://linuxcontainers.org/lxd/docs/master/server/
仕様 : https://discuss.linuxcontainers.org/t/lxd-acme-support-for-server-certificate/15142

Cloud-init の検証

cloud-init ユーザーの多くは、設定を YAML で渡します。しかし今まで、LXD は事前の検証なしで cloud-init にそのデータをそのまま渡していました。

今回、3 つの cloud-init の設定すべてが検証され、この状況が変わりつつあります:

  • cloud-init.network-config
  • cloud-init.user-data
  • cloud-init.vendor-data

ユーザーとベンダーのデータについては、LXD は #cloud-config タイプであるときだけ、有効な YAML であるかどうかをチェックします。他のデータタイプについては、チェックなしでそのまま通過させます。

LXD は実際の Netplan や Cloud-init の設定を検証するわけではなく、現時点では YAML が適切に展開できるかどうかを検証するだけであることに注意すべきです。cloud-init と netplan で公式の JSON スキーマや同様のものがが簡単に利用できるようになった時点で、これらのチェックを拡張し、データ自体も確認するようにします。

内部メトリクス

これまで、LXD のメトリクス API はインスタンスリソースの使用メトリクスに限定されていました。

このリリースで、多数の内部メトリクスについても導入しました:

  • lxd_go_alloc_bytes_total
  • lxd_go_alloc_bytes
  • lxd_go_buck_hash_sys_bytes
  • lxd_go_frees_total
  • lxd_go_gc_sys_bytes
  • lxd_go_goroutines
  • lxd_go_heap_alloc_bytes
  • lxd_go_heap_idle_bytes
  • lxd_go_heap_inuse_bytes
  • lxd_go_heap_objects
  • lxd_go_heap_released_bytes
  • lxd_go_heap_sys_bytes
  • lxd_go_lookups_total
  • lxd_go_mallocs_total
  • lxd_go_mcache_inuse_bytes
  • lxd_go_mcache_sys_bytes
  • lxd_go_mspan_inuse_bytes
  • lxd_go_mspan_sys_bytes
  • lxd_go_next_gc_bytes
  • lxd_go_other_sys_bytes
  • lxd_go_stack_inuse_bytes
  • lxd_go_stack_sys_bytes
  • lxd_go_sys_bytes
  • lxd_operations_total
  • lxd_uptime_seconds

これらは、多くの Go の内部メモリー割り当てと goroutine メトリクスに加えて、デーモンの稼働時間や実行中のバックグラウンド操作数などの LXD 特有のメトリクスもいくつかカバーしています。

クラスター加入用トークンの有効期限

クラスター加入用トークンは LXD のデータベースへのアクセスが許可されるため非常に強力です。
このため、短時間で有効期限切れになるのは理にかなってます。

これまで、LXD が再起動したときに有効期限が切れていましたが、これは非常に予測が難しいため、実際の有効期限もサポートするようになりました。

VM へのプロキシーデバイスのホットプラグ

仮想マシンのプロキシーデバイスは、単純な NAT だけに制限されています。
この制限があるので、ホットプラグを許可しない理由はなく、仮想マシンに対するポートリダイレクションを簡単に追加できます。

すべての変更点(翻訳なし)

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

すべてのChangeLogを見る
  • doc: split the "doc" target into setup and building
  • doc: set up linkcheck and exceptions
  • doc: fix links that the link checker regards as broken
  • lxd-agent: Only unblock systemd once /dev/lxd/sock is started
  • doc: add linkchecker to the GitHub actions
  • doc: update IRC link
  • lxd/apparmor/instance: allow reading /proc/pid/cpuset
  • tests: Respect LXD_SHIFTFS_DISABLE
  • doc/metrics: add lxd_cpu_effective_total to the list of metrics
  • lxd/cgroup/abstraction: Update GetIOStats to be more flexible
  • lxd/events: Ensure internal listener is only running once
  • lxd/cluster/config: Set default values for loki config keys
  • docs: Added snap version directory for global remotes
  • test: Fix manual shifting protection tests by disabling kernel shifting
  • lxd/apparmor: apparmor profile for qemu-img
  • lxd: Replace readyChan with waitReady canceller
  • lxd: Improve comments
  • lxd/api: Don't serve API requests that cause volume mounts until daemon is fully started
  • lxd/daemon: Don't wrap line
  • lxd/daemon: Move Ready function into init function
  • lxd/storage/s3/miniod/miniod: Expose minio start up error to client
  • lxd: Only load all instances once during init()
  • lxd/instance/drivers/driver/qemu: Dont offer VM support if /dev/vsock is missing
  • lxd/device/proxy: Allows hot plugging proxy device (in nat mode) for VMs
  • doc/header: update to new menu style for linuxcontainers.org
  • shared/validate: Add IsCloudInitUserData and IsYAML
  • shared/instance: Validate cloud-init config keys
  • Allow forwarded traffic to the lxd bridge for proxy nat devices
  • lxd/network/network/utils: Exports UsedByInstanceDevices
  • lxd/network/driver/ovn: UsedByInstanceDevices usage
  • lxd/device/nic/ovn: Add duplicate static address check
  • lxd/network/driver/ovn: Adds parseRouterIntPortIPv4Net and parseRouterIntPortIPv6Net functions
  • lxd/network/driver/ovn: Fix typo in Leases
  • lxd/network/driver/ovn: Use isInUseByDevice in Leases
  • Add client.Operation.WaitContext
  • Use WaitContext in client.operation.Wait
  • lxd/storage_volumes: Fix API documentation
  • lxd/instance_backup: Fix bad swagger data
  • lxd/instance_snapshot: Fix bad swagger data
  • doc/rest-api: Refresh swagger YAML
  • lxd/migration: update proto bindings
  • lxd: use go-criu/crit for dump statistics
  • lxd/migration: remove stats protobuf definitions
  • doc/server: update Loki config
  • lxd/storage/drivers/driver/zfs: Don't fail Mount if policy cannot be applied to existing datasets
  • lxd/network/openvswitch/ovn: Update LogicalSwitchPortSetDNS to accept IPs for DNS records directly
  • lxd/network/driver/ovn: Updated client.LogicalSwitchPortSetDNS usage
  • lxd/network/driver/ovn: Renames InstanceDevicePortSetup and InstanceDevicePortDelete
  • lxd/device/nic/ovn: InstanceDevicePortStart and InstanceDevicePortStop usage
  • lxd/network/driver/ovn: Adds getDHCPv4Reservations function
  • lxd/network/driver/ovn: Build DHCPv4 reservation list during setup
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchDHCPv4RevervationsSet and logicalSwitchParseExcludeIPs functions
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchDHCPv4RevervationsGet function
  • lxd/network/openvswitch/ovn: Updates LogicalSwitchPortDeleteDNS and logicalSwitchPortDeleteDNSAppendArgs to optionally clear DNS names but leave entry
  • lxd/network/driver/ovn: Updates client.LogicalSwitchPortDeleteDNS usage
  • lxd/network/openvswitch/ovn: Check for non-empty DNS UUID in LogicalSwitchPortCleanup
  • lxd/network/driver/ovn: Adds InstanceDevicePortAdd and InstanceDevicePortRemove functions
  • lxd/device/nic/ovn: Wire up InstanceDevicePortAdd and InstanceDevicePortRemove
  • lxd/network/driver/ovn: Ensures DHCPv4 reservation exists if needed in InstanceDevicePortStart
  • doc/header: use color variables to support dark theme
  • client: move from io/ioutil to io and os packages
  • lxc: move from io/ioutil to io and os packages
  • lxc-to-lxd: move from io/ioutil to io and os packages
  • lxd/apparmor: move from io/ioutil to io and os packages
  • lxd/archive: move from io/ioutil to io and os packages
  • lxd/backup: move from io/ioutil to io and os packages
  • lxd/cgroup: move from io/ioutil to io and os packages
  • lxd/cluster: move from io/ioutil to io and os packages
  • lxd/db: move from io/ioutil to io and os packages
  • lxd/device: move from io/ioutil to io and os packages
  • lxd/dnsmasq: move from io/ioutil to io and os packages
  • lxd/endpoints: move from io/ioutil to io and os packages
  • lxd/instance/drivers: move from io/ioutil to io and os packages
  • lxd/migration: move from io/ioutil to io and os packages
  • lxd/network: move from io/ioutil to io and os packages
  • lxd/resources: move from io/ioutil to io and os packages
  • lxd/rsync: move from io/ioutil to io and os packages
  • lxd/seccomp: move from io/ioutil to io and os packages
  • lxd/storage/drivers: move from io/ioutil to io and os packages
  • lxd/storage: move from io/ioutil to io and os packages
  • lxd/sys: move from io/ioutil to io and os packages
  • lxd/template: move from io/ioutil to io and os packages
  • lxd/util: move from io/ioutil to io and os packages
  • lxd: move from io/ioutil to io and os packages
  • lxd-agent: move from io/ioutil to io and os packages
  • lxd-benchmark/benchmark: move from io/ioutil to io and os packages
  • lxd-migrate: move from io/ioutil to io and os packages
  • lxd-user: move from io/ioutil to io and os packages
  • shared: move from io/ioutil to io and os packages
  • test: move from io/ioutil to io and os packages
  • scripts/bash/lxd-client: Add missing network sub-commands
  • lxd/storage/drivers/driver/zfs: Fix incorrect mount dataset policy error check
  • lxd/apparmor/qemuimg: Fix QemuImg when using symlinks
  • lxd/storage/utils: Fix error in ImageUnpack
  • lxd/apparmor/qemuimg: Fix qemuImgProfileTpl policy to support snap
  • doc/linting: fix failures about indentation for unordered lists
  • lxd/vsock: Add ContextID()
  • lxd-agent: Restart server on CID change
  • lxd-agent: Fix imports
  • lxd/instance/drivers/driver/qemu: comment typo
  • lxd-agent: Fix filesystem metrics
  • lxd/endpoints: Unexport clusterAddress to avoid confusion
  • lxd/state/state: Add LocalConfig to State
  • lxd/daemon: Add localConfig to Daemon struct
  • lxd/api/1.0: Update daemon localConfig variable on config update
  • lxd/api/cluster: Update daemon localConfig when it changes in DB
  • lxd/cluster: Use state.LocalConfig.ClusterAddress()
  • lxd/cluster: Update tests to populate state.LocalConfig
  • lxd: Use d.State().LocalConfig.ClusterAddress
  • lxd/node/config/test: Remove use of node.ClusterAddress
  • lxd/patches: Remove use of node.ClusterAddress
  • lxd/cluster/gateway: Adds state to Gateway
  • lxd/cluster/heartbeat: g.state().LocalConfig.ClusterAddress() usage
  • lxd/daemon: Pass State to gateway
  • lxd/api/cluster: d.State().LocalConfig.ClusterAddress() usage
  • lxd/node/config: Removes unused ClusterAddress function
  • lxd/cluster: Removed serverCert from NewGateway as can be accessed from state
  • lxd/daemon: NewGateway usage
  • lxd/instance/instance/utils: Update ValidDevices signature
  • lxd/instance/drivers/load: Updates validDevices to accept local and expanded config
  • lxd/profiles: instance.ValidDevices usage
  • lxd/instance/drivers: instance.ValidDevices usage
  • lxd/instance/drivers: Handle device.ErrUnsupportedDevType when loading device
  • lxd/cluster/heartbeat: Ensure state.LocalConfig is available in heartbeat
  • lxd/api/1.0: s.LocalConfig.HTTPSAddress usage
  • lxd/api/cluster: Consistent naming of local config variables in clusterPutBootstrap
  • lxd/instances/put: Use local cluster address for local cluster member identification in instancesPut
  • lxd/network/driver/bridge: Use local cluster address for local cluster member identification in HandleHeartbeat
  • lxd/cluster: Consistent naming of local config variables
  • lxd/daemon: Consistent naming of local config variables
  • lxd/api/cluster: s.LocalConfig.HTTPSAddress usage
  • lxd/certificates: d.State().LocalConfig.HTTPSAddress() usage
  • lxd/main/activateifneeded: Remove usage of node.HTTPSAddress
  • lxd/node/config/test: Remove usage of HTTPAddress
  • lxd/node/config: Remove HTTPSAddress function
  • lxd/init: Remove unnecessary duplicate network load request in initDataNodeApply
  • lxd/api/cluster: Fixes clusterCertificatePut to use tx.GetNodes to get all members
  • lxd: Allow API paths without version
  • lxd/cluster/config: Add ACME config keys
  • lxd/cluster: Use consistent members terminology when using tx.GetNodes
  • lxd/api/cluster: Use consistent members terminology when using tx.GetNodes
  • lxd/db/db: Use consistent members terminology when using tx.GetNodes
  • lxd/instances/put: Use consistent members terminology when using tx.GetNodes
  • lxd/network/driver/ovn: Use consistent members terminology when using tx.GetNodes
  • lxd: Use consistent members terminology when using tx.GetNodes
  • lxd/api/internal: Only use backup file to instantiate instance if DB not available
  • lxd/instance/operationlock: Adds ActionDelete constant
  • lxd/instance/drivers: Create operation lock in Delete
  • client/lxd/images: Updates CreateImage to stream files from disk to server
  • lxd/instance/drivers/driver/common: Sort snapshots by ID if creation datetime matches
  • lxd/instance/exec: Use cancel.Canceller instead of context
  • lxd/instance/exec: Fix comment typo
  • lxd/instance/exec: Convert attachedChildIsDead channel to cancel.Canceller
  • shared/netutils/network/linux: Update WebsocketExecMirror to support the channel returned from context.Done()
  • lxd/events/connections: Use time.NewTicker in Reader
  • lxd/migrate: Don't shadow error in Connect
  • client/lxd: Set TCP timeout options in rawWebsocket
  • lxd/instance/exec: Adds TCP and application level keepalives and timeouts to each websocket
  • client/lxd/instances: Don't modify err in rawSFTPConn when getting underlying TCP connection
  • doc/storage: add video links
  • Update gomod
  • lxd/db/operationtype: Add RenewServerCertificate
  • lxd/network/driver/bridge: Don't set BridgeVLANSetDefaultPVID on network start
  • lxd/device/nic/bridged: Only remove non-zero default PVID in setupNativeBridgePortVLANs
  • lxd/ip/link: Simplify self/master options in bridge vlan management functions
  • lxd/device/nic/bridged: link.BridgeVLANDelete and link.BridgeVLANAdd usage
  • lxd/acme: Add acme package
  • shared/cert: Add function to get CertInfo from bytes
  • lxd: Add updateClusterCertificate function
  • lxd: Add ACME support
  • lxd/api: Add ACME endpoint
  • lxd: Run server certificate renewal on config change
  • api: Add acme extension
  • doc: Add acme config keys
  • test: Add test for certificate reversion in clusters
  • doc: Add ACME
  • doc/authentication: add http-{301,403} backends to HAProxy example
  • shared/version: Fix regression in useragent string
  • lxd/db/warningtype: Add UnableToUpdateClusterCertificate
  • lxc/file: Fix symlink following in cmdFilePull
  • lxd/metrics: Add internal metrics
  • lxd: Add internal metrics
  • lxd: Add warning if cluster certificate cannot be updated
  • test: Check warning of cluster certificate test
  • doc/server: alpha sort the config namespace list
  • doc/server: add network and storage to the config namespace list
  • api: Add internal_metrics API extension
  • .sphinx: Add goroutines and uptime to wordlist
  • doc/clustering: create new structure
  • doc/clustering: move content into new pages
  • doc/clustering: move content out of old page
  • doc/clustering: reorder content in About clustering
  • doc/clustering: whitespace changes
  • lxd/main/interactive: Remove user facing "node" references
  • lxd-agent/exec: Improve support for detect fork exec errors
  • lxd/instance/drivers/driver/common: Adds ErrExecCommandNotFound and ErrExecCommandNotExecutable constants
  • lxd/instance/drivers/driver/lxc/cmd: Updates Wait to convert special exit statuses into errors
  • lxd/instance/drivers/driver/qemu/cmd: Updates Wait to convert special exit statuses into errors
  • lxd/instance/exec: Improve logging
  • lxd/exec: Set c.global.ret to exit status even on error in cmdExec.Run
  • lxd/main: Exit with custom exit status even on error
  • lxd/instance/exec: Ensure that non-interactive commands still return status code on error in instanceExecPost
  • lxd/list: Fixes filtering of raw input in showInstances
  • lxc/list: Rename container references to instance references
  • doc/api-extensions: /1.0 doesn't accept a trailing "/"
  • doc/clustering: clean up "About clustering"
  • doc/clustering: clean up "How to form a cluster"
  • doc/clustering: clean up "How to manage a cluster"
  • doc/clustering: clean up "How to recover a cluster"
  • doc/clustering: clean up "How to manage instances in a cluster"
  • doc/clustering: clean up "How to configure storage"
  • doc/clustering: clean up "Cluster member configuration"
  • doc/clustering: clean up "How to configure networks"
  • doc/clustering: clean up "How to set up cluster groups"
  • doc: Update metrics
  • doc/explanation: Fix reference to metrics page
  • lxd/device/nic: Adds nicCheckDNSNameConflict function
  • lxd/device/nic: Adds case insensitive instance name conflict check for bridged and ovn NICs
  • test: Fix bridged NIC tests to accomodate duplicate instance name detection
  • doc/rest-api: Add missing Ready state
  • doc: add a link to the development process YouTube video
  • lxd/main/init/interactive: Export cluster token decode helper
  • Rename GetSnapshotExpiry to GetExpiry
  • shared/util: Allow seconds in GetExpiry
  • lxd/cluster/config: Add cluster.join_token_expiry
  • lxd: Add expiry date to cluster join token
  • lxd: Check expiry date of cluster join token
  • lxd/db/operationtype: Add RemoveExpiredClusterJoinTokens
  • lxd: Add cluster task to remove expired cluster join tokens
  • doc: Add cluster.join_token_expiry
  • shared/api: Add expiry date to ClusterMemberJoinToken
  • lxc: Show expiry date in lxc cluster list-tokens
  • api: Add cluster_join_token_expiry API extension
  • i18n: Update translations
  • test/suites: Test cluster token expiry
  • lxd/cluster/config: Add core.remote_token_expiry
  • doc: Add core.remote_token_expiry
  • lxd: Add expiry date to remote token meta data
  • lxd: Check expiry date of remote add tokens
  • shared/api: Add expiry date to CertificateAddToken
  • lxc: Show expiry date in lxc config trust list-tokens
  • test/suites: Test remote token expiry
  • api: Add remote_token_expiry API extension
  • i18n: Update translations from weblate
  • gomod: Update dependencies
  • lxd/instance/drivers/driver/qemu: Remove incorrect comment about handle caching in getAgentClient
  • lxd/instance/drivers/driver/qemu: Do not attempt to mount & unmount in generateAgentCert
  • lxd/instance/drivers/driver/qemu: Make sure instance is running before trying file operations in FileSFTPConn

試用環境

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

ダウンロード

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

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

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

LXD 5.6 リリースのお知らせ

23rd of September 2022

はじめに

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

LXD を使ってコンテナや仮想マシンを実行しているか、クラスタリングとプロジェクトを使っているかどうかに関わらず、このリリースはあらゆる面で改良されている、色々なことがある LXD リリースです。

Enjoy!

新機能とハイライト

Grafana Loki サポート

LXD はログメッセージやライフサイクルイベントを、中央の Grafana Loki サーバーに送ることができるようになりました。今回の初期実装は HTTP の Basic 認証をサポートしており、ラベルとして送られるフィールドに関してある程度の柔軟性があります。

仕様 : https://discuss.linuxcontainers.org/t/lxd-stream-lifecycle-and-log-events-to-loki/14992
ドキュメント : https://linuxcontainers.org/lxd/docs/latest/server/

ローカルストレージプール上のオブジェクトストレージ

LXD 5.5 での Ceph を使ったストレージバケットの初期実装に続き、このリリースでは機能が拡張され、他のストレージドライバーすべてで動作するようになりました。

これはローカルストレージドライバーから直接 S3 互換 API を提供できる MinIO project の素晴らしい成果にもとづいています。

仕様 : https://discuss.linuxcontainers.org/t/lxd-object-storage-s3-api/14579
ドキュメント : https://linuxcontainers.org/lxd/docs/latest/howto/storage_buckets/

仮想マシンでの Infiniband サポート

コンテナと仮想マシンが同じように動くようにするための作業が続いています。今回は LXD VM に Infiniband のサポートを追加しました。

これは、infiniband デバイスタイプを使うことでコンテナと同様に動作します。physicalsriov の両方をサポートします。この場合 SR-IOV が機能するためには、システム上で IOMMU が有効になっており、Mellanox ドライバーで "unprobed" の状態のままの SR-IOV バーチャルファンクションが多数存在していることを確認する必要があります。

ドキュメント : https://linuxcontainers.org/lxd/docs/latest/instances/#type-infiniband

プロジェクト内での制限されたネットワークアクセス

LXD のプロジェクトで設定できるオプションや制限の数はまだ増えています。今回は新たに restricted.networks.access を追加しました。このオプションは管理ネットワークをカンマ区切りのリストで指定します。

設定した場合、制限されたプロジェクトはこれらのネットワークの使用とリストのみを許可します。この機能は特にネットワークとして ovn を使っていないけれども、プロジェクトごとに 1 つのネットワークを分離して使っているような環境で特に有用です。

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

instance-ready ライフサイクルイベント

LXD 5.5 で、/dev/lxd ゲスト API を通してトリガーできる、新たにインスタンスの状態として READY を導入しました。LXD 5.6 では、新たに instance-ready ライフサイクルイベントを追加しました。これはインスタンスが利用可能状態になったときに発行されます。

有効な CPU の総数を示すメトリック

最後に、新たなメトリックを LXD のメトリクス API に追加しました。

lxd_cpu_effective_total は、インスタンスで利用できる CPU の総数をレポートします。これは CPU の使用率を正確に計算するのに役立ちます。

すべての変更点(翻訳なし)

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

すべてのChangeLogを見る
  • Doc: Fix typo in howto/storage_backup
  • gomod: Update dependencies
  • Makefile: Pin xgettext-go to working version
  • doc: backquote true and NO_PROXY in doc/server.md
  • doc: backquote mac in doc/api-extensions.md
  • doc: backquote instance types in events.md
  • doc: backqoute cloud-init in doc/cloud-init.md
  • Doc: replace Pongo with Pongo2 in doc/image-handling.md
  • doc: Capitalize fuse to FUSE in doc/instances.md
  • doc: Capitalize candid in doc/api-extensions.md
  • doc: Use more backquotes in documents
  • doc: Capitalize MAC filtering in doc/instances.md
  • doc: Improve uses of backquotes in documents
  • Doc: update using backquotes by review suggestions
  • lxd/instance/drivers: Adds storage pool to instance-created lifecycle context.
  • doc: Correct typo in cephobject.radosgw.endpoint*
  • lxd: Correct typo in cephobject.radosgw.endpoint*
  • test: Correct typo in cephobject.radosgw.endpoint*
  • lxd/db/cluster/update: Adds patch to correct typo in cephobject.radosgsw.endpoint*
  • doc: Note AIO requirement
  • lxd/db/generate/db/stmt: Add braces around WHERE clause
  • lxd/db/cluster/devices: Add Filter structs to Config/Devices
  • lxd/db/generate/db/parse: Generate queries with multiple filters
  • lxd/db/cluster/mapper: Update generated code
  • lxd/instance/instancetype/instance/type: Add instancetype.Filter
  • lxd: Remove usage of empty filter structs
  • doc/storage: small cleanup to the storage bucket documentation
  • doc/storage: group the pool/volume/bucket information
  • doc: remove FAQ about live migration
  • api: Adds storage_buckets_create_credentials extension
  • lxd-generate: Catch 'type' and change to 'entityType'.
  • lxd/db/cluster/schema: Apply schema patch version for bucket config typo fix
  • doc/migration: add link to lxd-migrate tutorial on Discourse
  • doc/upgrading: clarify database updates
  • doc/storage/btrfs: add YouTube link
  • doc/storage/lvm: add YouTube link
  • client: Update CreateStoragePoolBucket to return create-time admin key
  • lxc/storage/bucket: Display generated admin key in cmdStorageBucketCreate
  • lxd/storage/buckets: Generate admin key on bucket creation
  • test: Update storage buckets tests to check for initial credentials
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • doc/storage: make navigation titles more consistent
  • lxd/storage/buckets: Handle missing URL in storagePoolBucketsGet
  • api: metric: lxd_cpu_seconds_total: fix help text, floats
  • lxd/db/generate/db/method: Fix external package support
  • lxd/db/generate/db/stmt: Add joinon tag
  • lxd/db/generate/db/stmt: Don't allow joins and leftjoins at the same time
  • lxd/db/generate/db/stmt: Use joinon tag for ID query generation
  • lxd-generate: Adds method to get table and column from join config.
  • lxd-generate: Use join table in order by clause.
  • lxd-generate: Use join table config in create statement subselect.
  • lxd-generate: Use join table config in update statement subselect.
  • lxd-generate: Updates whereClause to use join config.
  • lxd/db/generate: Use joinTable
  • lxd: Change project rename response to operation in swagger.
  • doc: Regenerate swagger.
  • lxd/storage/buckets: Detect missing bucket URL in storagePoolBucketGet
  • lxd/storage/utils: Improve errors
  • lxd/storage/utils: Return explicit nil on error in VolumeDBGet
  • lxd/storage/utils: Prevent using VolumeDBCreate to create bucket volume records
  • lxd/storage/drivers/volume: Adds VolumeTypeBucket type
  • lxd/storage/drivers/interface: Use Volume type for bucket functions
  • lxd/storage/drivers/driver/common: Updates bucket functions to accept Volume type
  • lxd/storage/drivers/driver/cephobject/buckets: Use consistent minio s3 client context names
  • lxd/storage/drivers/driver/cephobject: Improved comments
  • lxd/storage/drivers/driver/cephobject/buckets: Updates to use Volume type for bucket config
  • lxd/storage/utils: Adds BucketDBCreate and BucketDBDelete functions
  • lxd/storage/backend/lxd: Switch to using Volume for buckets
  • lxd/storage/backend/lxd: Removes unused GetBucket
  • lxd/storage/drivers/bucket: Removes unused Bucket type
  • doc/requirements: correct statement about AIO
  • lxd/cgroup: Add GetEffecticeCPUs
  • lxd/metrics: Add lxd_cpu_effective_total
  • api: metrics_cpu_effective_total
  • lxd/db/storage/buckets: Allow cross-pool bucket listing in GetStoragePoolBuckets
  • lxd/storage/buckets: tx.GetStoragePoolBuckets usage
  • lxd/storage/storage: tx.GetStoragePoolBuckets usage
  • lxd/storage/drivers/driver/zfs: Adds ensureInitialDatasets function
  • lxd/storage/drivers/driver/cephobject/buckets: Ensure context cancel is run after revert.Fail
  • doc: improve systemd-resolved integration by adding stop command
  • doc: resolvectl status doesn't require sudo
  • doc: remove sentence about disk support for VMs
  • doc/network: add note that static leases require MAC as identifier
  • doc/storage/volumes: add --all-projects to documentation
  • lxd/apparmor: Deref compress commands
  • shared/api/event/lifecycle: Add instance ready constant
  • lxd/lifecycle: Add InstanceReady lifecycle event
  • lxd/devlxd: Send InstanceReady lifecycle event
  • doc/events: Add instance-ready lifecycle event
  • test: Test InstanceReady lifecycle event
  • doc: add configuration and script for markdownlint
  • doc: add a target for running markdownlint
  • doc: add an action to run markdownlint on the docs
  • doc: fix markdown errors for MD022
  • doc: fix markdown errors for MD004-MD007
  • doc: fix markdown errors for MD034
  • doc: fix markdown errors for MD032
  • doc: fix markdown errors for MD012
  • doc: fix markdown errors for MD031
  • doc: fix markdown errors for MD027
  • doc: do not use emphasis
  • doc: fix markdown errors for MD026
  • doc: fix markdown errors for MD038
  • doc: fix markdown errors for MD010
  • doc: fix markdown errors for MD038
  • doc: fix markdown errors for MD002
  • lxd/device: Support physical infiniband for VMs
  • doc: add related links to the start page
  • test: Add 60s timeout to lxc commands
  • test: Add clean up of storage buckets in kill_lxd
  • scripts/empty-lxd.sh: Add emptying of storage buckets
  • test: Allow automatic removal of loop devices in deconfigure_loop_device
  • lxd/db/networks: Removes unused NetworkNodes function
  • lxd/db/storage/pools: Removes unused StoragePoolNodes function
  • lxd/instance/drivers/driver/lxc: Removes profiles argument from lxcLoad
  • lxd/instance/drivers/driver/common: Removes profiles argument from expandConfig
  • lxd/instance/drivers/driver/qemu: Removes profiles argument from qemuLoad
  • lxd/instance: Removes profiles argument from load
  • lxd: instance.Load usage
  • lxd/profiles/utils: instance.Load usage in doProfileUpdateInstance
  • lxd-agent/server: Log original error during write error in createCmd
  • lxd/daemon: Log original error during write error in createCmd
  • lxd/operations/websocket: Don't return close errors in Render
  • lxd/instance/drivers: Change common.Project from string to api.Project type
  • lxd/instance: Updates instance load functions to accept api.Project
  • lxd/device/disk: instance.Load usage
  • lxd/project/permissions: Update AllowSnapshotCreation to accept api.Project
  • lxd/instance: instance.Load and project.AllowSnapshotCreation usage
  • lxd/instance/snapshot: project.AllowSnapshotCreation usage
  • lxd/instances: instance.Load usage
  • lxd/storage/backend/lxd: instance.Load usage
  • lxd/storage/utils: Updates VolumeUsedByProfileDevices to pass api.Project to callback function
  • lxd/storage/volumes/utils: storagePools.VolumeUsedByProfileDevices and instance.Load usage
  • lxd/profiles/utils: Updates profile management functions to load projects
  • lxd/profiles/utils: Fix incorrect handling of error in doProfileUpdate
  • lxd/storage/volumes/snapshot: project.AllowSnapshotCreation usage
  • lxd/storage/volumes: instance.Load usage
  • lxd/project/project: Updates ProfileProject to return effective api.Project info
  • lxd/profiles: project.ProfileProject usage
  • lxd/project/project: Updates NetworkProject to return requested project's info
  • lxd/networks: NetworkProject usage
  • lxd/project/project: Align StorageBucketProject with StorageVolumeProject return values
  • lxd/storage/buckets: project.StorageBucketProject usage
  • lxd/instance: Change Project() to return api.Project
  • lxd/instance: inst.Project() usage
  • lxd/device/disk: inst.Project() usage
  • lxd/device/proxy: inst.Proxy() usage
  • lxd/device: inst.Project() usage
  • lxd/backup: inst.Project() usage
  • lxd/seccomp: inst.Project() usage
  • lxd/maas: inst.Project() usage
  • lxd/lifecycle: inst.Project() usage
  • lxd/network: inst.Project() usage
  • lxd/storage/backend/lxd: inst.Project() usage
  • lxd/apparmor: inst.Project() usage
  • lxd: inst.Project() usage
  • lxc-to-lxd: Handle linux32 and linux64 arch personalities
  • doc/network/bgp: add some clarifications to the BGP docs
  • doc/metrics: add a list of provided metrics
  • lxd/instance/drivers/driver/qemu: Adds support for multi-queue macvlan NICs in VMs
  • lxd/backup: Add Profiles field do Config struct
  • lxd/storage: Add profiles to backup data
  • lxd/db/generate/db/parse: Add ParseStmt
  • lxd/db/generate/db/stmt: Parse 'objects' directive result to create 'objects-by'
  • lxd/db/cluster/instance/profiles: Add 'objects' directive for instance_profiles and certificate_projects
  • lxd/db/generate/README: Add lxd-generate README
  • lxd/db/cluster/mapper: Update generated code
  • doc/migration: Document lxc-to-lxd tool
  • api: Adds projects_networks_restricted_access extension
  • doc/projects: Documents restricted.networks.access
  • lxd/api/project: Adds restricted.networks.access
  • lxd/project/project: Adds NetworkAllowed function
  • lxd/network: Uses project.NetworkAllowed to check access to networks
  • lxd/networks: Prevent creation of managed networks not accessible by project
  • doc/storage/dir: add link to the YouTube video
  • lxd/project/permissions: Updates checkRestrictions to check NICs against restricted.networks.access setting
  • test: Updates project restrictions tests to check for restricted.networks.access setting
  • lxd/apparmor: allow rw access to /sys/fs/bpf
  • api: Adds storage_buckets_local extension
  • shared/util: Adds HTTPSStorageBucketsDefaultPort constant
  • lxd/endpoints: StorageBucketsServer listener
  • lxd/api/1.0: Updates doApi10UpdateTriggers to handle core.storage_buckets_address
  • scripts/bash/lxd-client: Adds core.storage_buckets_address
  • lxd/node/config: Adds core.storage_buckets_address support
  • lxd/storage/s3/types: Add S3 types
  • lxd/storage/s3/headers: Adds AuthorizationHeaderAccessKey function
  • lxd/storage/s3/policy: Adds policy generator
  • lxd/storage/s3/miniod: Adds miniod package
  • gomod: Adds github.com/minio/madmin-go
  • lxd/db/storage/buckets: Adds GetStoragePoolLocalBucket function
  • lxd/db/storage/buckets: Adds GetStoragePoolLocalBucketByAccessKey function
  • lxd/db/storage/buckets: Uses GetStoragePoolLocalBucketByAccessKey in CreateStoragePoolBucketKey and UpdateStoragePoolBucketKey
  • lxd/storage/pool/interface: Adds ActivateBucket
  • lxd/storage/pool/interface: Adds GetBucketURL definition
  • lxd/storage/backend/mock: Adds ActivateBucket
  • lxd/storage/backend/mock: Adds GetBucketURL
  • lxd/storage/backend/lxd: Implements local bucket support
  • lxd/storage/drivers: Renames BucketURL to GetBucketURL for consistency
  • lxd/storage/drivers/driver/dir: Add bucket support
  • lxd/storage/drivers/driver/lvm: Add bucket support
  • lxd/storage/drivers/driver/btrfs: Add bucket support
  • lxd/storage/drivers/driver/zfs: Add bucket support
  • lxd/storage/buckets: Use pool.GetBucketURL()
  • lxd/api: Adds storageBucketsServer
  • lxd/daemon: Initialise StorageBucketsServer listener in init
  • lxd/daemon: Shutdown minio processes during Stop
  • doc: Updates docs for local storage bucket support
  • test: Update storage buckets tests
  • lxd/db/generate/db/mapping: Add field-to-sql clause conversion helpers
  • lxd/db/generate/db/stmt: Rework statement generation
  • lxd/db/cluster/nodes: Generate ID statement for nodes
  • lxd/db/cluster/snapshots: Remove 'via' tag and replace with 'joinon' tag
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/generate/db/stmt: Expect full database package path in arguments
  • lxd/db/generate/db/stmt: Fallback to database package for parsing existing variables
  • lxd/db/generate/README: Update lxd-generate README
  • lxd/network/driver/bridge: Consider a dnsmasq start failure as a network start failure
  • lxd/warnings: Fix lxc warning show
  • doc: move live migration content
  • doc: cosmetic changes
  • lxc/config/default: Change DefaultConfig to a function
  • lxc/config: DefaultConfig usage
  • test: Add tests to check for lxc warning show functionality
  • doc/migration: clarify how to enable live migration for VMs
  • GetAllXattr: handle overlay filtering
  • lxd/db: Remove GetLocalStoragePoolVolumes and storagePoolVolumesGet functions
  • lxd/db/storage/pools: Removes GetStoragePoolVolume
  • lxd/storage/utils: Updates VolumeDBGet to return *db.StorageVolume and use tx.GetStoragePoolVolume
  • lxd/storage/backend/lxd: Replace b.state.DB.Cluster.GetLocalStoragePoolVolume with VolumeDBGet usage
  • lxd/api/internal: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/cluster/connect: Replace s.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/daemon/storage: Replace s.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volume/snapshots: Replace c.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volumes: Replace c.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/device/disk: Replace d.state.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/pool/load: Replace state.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/backup: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/snapshot: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/state: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volumes: Removes inefficient storagePoolVolumeGetType and associated functions
  • lxd/db: Removes storageVolumeIDsGet and storagePoolVolumeReplicateIfCeph
  • lxd/db/generate/db/mapping: Use 'join' tag to deduce column name
  • lxd/db/generate/db/mapping: Override joined column name with 'joinon' tag
  • lxd/storage/s3/miniod: Use a sub-directory for minio on storage volume
  • shared/subprocess/proc: Adds context support
  • shared/subprocess/manager: Removes redundant error return value from NewProcessWithFds
  • lxd/archive/archive: subprocess usage
  • lxd/device: subprocess usage
  • lxd/instance/drivers/driver/qemu: subprocess usage
  • lxd/network/driver/bridge: subprocess usage
  • lxd/apparmor/archive: Use non-deferenced outputPath to derive profile name in archiveProfile
  • gomod: Updates dependencies
  • shared/logger/log: Don't modify the global logrus standard logger
  • shared/util/linux: Update GetAllXattr implementation using github.com/pkg/xattr
  • gomod: Adds github.com/pkg/xattr
  • shared/idmap/idmapset/linux: Improve errors in doUidshiftIntoContainer
  • shared/idmap/idmapset/linux: Go vet fixes in doUidshiftIntoContainer
  • lxd: Fix calls to inst.Project().Name when used in fmt.Sprintf and related functions
  • Makefile: Fix shellcheck version detection
  • Makefile: Use same pinned version of golangci-lint as github workflows
  • lxd/db/generate/db/method: Use QueryRowContext for one-row queries
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/query/objects: Include context in db query helpers
  • lxd/db/generate/db/method: Pass context to query helpers
  • lxd/db/cluster/mapper: Update generated code
  • lxd: Pass transaction ctx through to query helpers
  • lxd/test: Update tests
  • lxd/db/db: Include context in node Transaction
  • lxd: Update node.Transaction usages
  • lxd: Pass node transaction ctx to query helpers
  • lxd/db/schema/schema: Add context to schema updates
  • lxd/firewall/drivers/drivers/nftables: Pass rules via stdin rather than as command arguments
  • lxd/networks: Don't log all networks initialized if they weren't yet
  • gomod: go mod tidy
  • lxd/networks: Start deferred networks depending on physical interfaces before logical ones
  • lxd/storage/backend/lxd: Log pool names in Mount and Unmount
  • lxd/db/query/retry: Don't log not found errors in Retry
  • lxd/network/openvswitch/ovn: Check that the chassis is a member of the correct chassis group in ChassisGroupChassisDelete
  • lxd/db/images: Adds project support to UpdateImageLastUseDate
  • lxd/db/images: Adds project and custom last used date support to SetImageCachedAndLastUseDate
  • lxd/db/images: Make CreateImage project argument and explicit string type
  • lxd/images: d.db.Cluster.SetImageCachedAndLastUseDate usage
  • lxd/daemon/images: d.db.Cluster.SetImageCachedAndLastUseDate usage
  • lxd/daemon/images: Ensure cached property is maintained when using existing image from another project
  • lxd/instance: s.DB.Cluster.UpdateImageLastUseDate usage
  • test/README: Use backticks for test env var options
  • test/README: Clarify options which enable tests
  • test/README: Removes unused LXD_SKIP_STATIC
  • test: Adds LXD_SKIP_TESTS env var option
  • lxd/db: Replace usage of QueryRow with QueryRowContext
  • lxd/db: Add context arg to more tx methods
  • lxd/db: Replace tx.Query with tx.QueryContext
  • lxd: Pass transaction ctx to QueryContext
  • lxd/patches: Use context.TODO for db patch calls to query helpers
  • lxd/test: Update tests
  • lxd/db/generate/db/method: Remove superfluous error check for GetID
  • lxd/db/cluster/mapper: Update generated code
  • lxd/device: Support sr-iov infiniband for VMs
  • doc/instances: Add VM to supported instance types for infiniband devices
  • build(deps): bump actions/checkout from 2 to 3
  • build(deps): bump actions/setup-go from 2 to 3
  • doc/performance: create new pages
  • doc/performance: move content from production setup
  • shared/osarch: Improve 32bit arm handling
  • shared/validate/validate: Add IsX509Certificate validator
  • shared/validate/validate: Remove List validators
  • lxd/network/driver/physical: Update usages
  • lxd/network/driver/physical: Fix ipv4.routes validation
  • lxd/storage/drivers/driver/dir/volumes: Don't allow creating a volume that already exists on disk
  • lxd/storage/backend/lxd: Delete local volume if bucket creation fails
  • lxd/storage/drivers/volume: Create bucket local storage volumes using same permissions as custom volumes
  • lxd/storage/s3/miniod/miniod: Run MinIO as LXD's unprivilged user
  • lxd/storage/backend/lxd: miniod.EnsureRunning usage
  • doc: update footer to display correctly
  • test: Adds LXD_REQUIRED_TESTS support
  • test: Updates test_storage_buckets to check for minio command
  • lxd/device/device/common: Fix project name in device logger
  • doc/security: edit information about name leakage
  • doc/performance: clean up information about txqueuelen
  • doc/performance: clean up page about production setup server settings
  • doc/performance: move production setup page
  • doc/metrics: make part of the Metrics documentation reusable
  • doc/performance: update the performance tuning information
  • doc/spellcheck: add benchmarking to wordlist
  • Drop replace directive in go.mod
  • Update gomod
  • client: Handle nil args in CopyImage
  • doc/performance: add how-to guide for benchmarking
  • doc/lxc-to-lxd: update installation command
  • doc/storage: add information about special custom volumes
  • doc/storage: add link to YouTube video about storage volumes
  • doc/storage: add links between storage documentation
  • doc/instance API: add link to YouTube video
  • lxd/events: Add simpleListenerConnection
  • lxd/cluster/config: Add Loki config keys
  • lxd/events: Remove closed listeners
  • lxd/events: Add internal listener
  • lxd/daemon: Add internal event listener to Daemon
  • Update gomod
  • lxd/loki: Support Loki server
  • lxd: Support Loki server
  • doc/server: Add Loki config
  • api: Add loki API extension
  • i18n: Update translations from weblate
  • gomod: Update dependencies

試用環境

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

ダウンロード

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

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

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

Older news