Weekly status for the week of the 2nd March to the 8th of March.
Introduction
This past week the LXD team was meeting in Frankfurt for an engineering sprint.
On the LXD front there were several new features added and a selection of fixes and improvements:
LXD Storage
Most of the remaining legacy storage code has now been removed from the LXD code base and patches have been modified to use the new storage framework.
For the Ceph driver, the GetVolumeUsage
function has now been implemented, meaning you can see usage information for ceph volumes.
Additionally a calculation error in the same function in the ZFS driver has now been fixed.
LXD VMs
Directories from the host machine can now be mounted inside the VM and access can be shared concurrently between host and VM guest. In order to use this functionality you will need the lxd-agent
running inside the VM.
This feature is accessed using the familiar disk device concept from containers, e.g.
lxc config device add v1 test disk source=/some/host/dir path=/some/vm/dir
It uses the 9p protocol between the VM and the host and runs a proxy process to access the files on the host so that the VM process still does not need to be run as a privileged user.
We have also added support for cloud-init template files.
As we continue to build additional VM guest images for different operating systems we have needed to fix some issues that have been revealed. Firstly we now explicitly mount 9p shares using the trans=virtio
option, which is the default in newer distributions, however some older versions of CentOS did not use this option.
Additionally in order to support more ARM64 architectures we now set the gic-version
explicitly in Qemu.
LXD Containers
We have added hugetlbfs and hugepages support for containers, and a fix for the unix-hotplug
device that caused LXD to crash in certain circumstances has been added.
Additionally, now that the legacy storage framework has been removed we have now completed the instance drivers code reorganisation and moved the containerLXC
type out of the main
package and into the instance/drivers
package as the lxc
type to sit with the existing qemu
type. This allows us to share common functionality between the different instance types.
LXD Cluster
An improvement to the voter logic has been added so that now nodes are promoted if the number of voters drops below three.
LXD 3.22
And lastly for LXD, we wrapped up the week by releasing LXD 3.22.
LXC
The router
network type has been modified to not rely on the ip
command and instead use the netlink protocol to add IP neighbour proxy entries. Additionally an intermittent issues with IP neighbour proxy entries not being registered with the kernel in certain circumstances has been worked around.
LXCFS 4.0 LTS
LXCFS saw a lot of work this past week that culminated in the 4.0 LTS (Long Term Support) release. For more information please see the LXCFS 4.0 Release notes.
Distrobuilder
We continue to make improvements and fixes to distrobuilder in order to allow it to build more VM distribution images. This past week has seen the addition of CentOS 7 and 8 VM images being added.
Please keep an eye on Initial set of distrobuilder VM images to see when we had new VM images
Contribute to LXD
Ever wanted to contribute to LXD but not sure where to start?
We’ve recently gone through some effort to properly tag issues suitable for new contributors on Github: https://github.com/lxc/lxd/labels/Easy
You can also find a slightly longer, more detailed list here: Contributing to LXD
Ongoing projects
The list below is feature or refactoring work which will span several weeks/months and can’t be tied directly to a single Github issue or pull request.
- Virtual machine support
- Distrobuilder virtual machine support
- Storage database cleanup/rework
- Various kernel work
- Stable release work for LXC, LXCFS and LXD
Upstream changes
The items listed below are highlights of the work which happened upstream over the past week and which will be included in the next release.
LXD
- Instance: Moves containerLXC to instance/drivers package as lxc type
- Storage: Move legacy code removal/reorg
- Instance: CGroupGet remove
- Implement template files for VMs
- doc: Typo and formatting improvements
- add hugetlbfs and hugepages handling for containers
- Promote nodes if for whatever reason the n of voters drops below 3
- lxd/vm: Set gic-version on arm64
- VM: 9p disk device shares
- Project: Rename Prefix() to Instance()
- lxd/instance/drivers: Add trans=virtio to 9p mount
- Missing bootstrap error check
- VM fixes
- Tweaks to 9p VM mounts
- lxd/storage/ceph: Implement GetVolumeUsage
- doc: Tweak markdown format for itemization
- VM: Add support for pool volumes attach for disk directory share
- unix-hotplug: fix device removal and zero padding
- lxd/storage/zfs: Fix usage calculation
- Add go 1.14.x check
- lxd: Rename container to instance
LXC
- API extension doc fixes
- utils: only move_fd() when fdopen() has been successful
- network: Uses netlink for IP neighbour proxy management
- network: Adds short sleep between veth setup and neighbour proxy add
LXCFS
- meminfo: fix used/cache memory calculation under cgroup2
- cleanups
- fixes
- bugfixes
- tree-wide: switch default visibility to hidden
- macro: add and use lxcfs_info()
- lxcfs: use lxcfs_info()
- repo reorg
- autotools: fix Makefile
- man: fix manpage generation
- autotools: cleanup
- bugfixes
- bugfixes
- fixes
- sysfs_fuse: cleanup
- utils: cleanup
- fixes
- lxcfs: fix help output
- Bugfixes
- fixes
- travis: Enable all architectures
- proc_{cpuview,loadavg}: fix signed/unsigned check
- fixes
- Unified cgroup fixups
Distrobuilder
- main: Fix build-lxd for VMs
- chroot: Unmount /dev/fuse
- chroot: Don’t bind-mount /dev
- shared: Differentiate between build-dir and others
- chroot: Fix mode for special files in /dev
- shared/definition: Fix early packages
- main: Fix file generators
- generators/lxd-agent: Add trans=virtio option
- chroot: Remove obsolete code
Distribution work
This section is used to track the work done in downstream Linux distributions to ship the latest LXC, LXD and LXCFS as well as work to get various software to work properly inside containers.
Ubuntu
- Nothing to report this week
Snap
- Pushed 3.22 to the candidate channel