The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Difference between revisions of "LXD"
Line 129: | Line 129: | ||
{{console|body= | {{console|body= | ||
$##i## | $##i## lxd init | ||
Do you want to configure a new storage pool (yes/no) [default=yes]? | Do you want to configure a new storage pool (yes/no) [default=yes]? | ||
Name of the new storage pool [default=default]: | Name of the new storage pool [default=default]: | ||
Line 143: | Line 143: | ||
What IPv6 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? | What IPv6 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? | ||
LXD has been successfully configured. | LXD has been successfully configured. | ||
}} | |||
What this does is it creates btrfs subvolumes like this: | |||
{{console|body= | |||
$##i## btrfs sub list . | |||
ID 260 gen 1047 top level 5 path rootfs | |||
ID 280 gen 1046 top level 260 path var/lib/lxd/storage-pools/default | |||
ID 281 gen 1043 top level 280 path var/lib/lxd/storage-pools/default/containers | |||
ID 282 gen 1044 top level 280 path var/lib/lxd/storage-pools/default/snapshots | |||
ID 283 gen 1045 top level 280 path var/lib/lxd/storage-pools/default/images | |||
ID 284 gen 1046 top level 280 path var/lib/lxd/storage-pools/default/custom | |||
}} | }} |
Revision as of 11:30, August 12, 2017
LXD is a container "hypervisor" it should provide user with a new and fresh experience using LXC technology.
LXD consists of three components:
- A system-wide daemon (lxd)
- A command line client (lxc)
- An OpenStack Nova plugin (nova-compute-lxd)
A REST API that is accesible both locally and if enabled, over the network is provided from the lxd daemon.
The command line tool is designed to be a very simple, yet very powerful tool to manage all your containers. It can handle connections to multiple container hosts and easily give you an overview of all the containers on your network, let you create some more where you want them and even move them around while they're running.
The OpenStack plugin then allows you to use your lxd hosts as compute nodes, running workloads on containers rather than virtual machines.
The LXD project was founded and is currently led by Canonical Ltd and Ubuntu with contributions from a range of other companies and individual contributors.
Features
Some of the biggest features of LXD are:
- Secure by design (unprivileged containers, resource restrictions and much more)
- Scalable (from containers on your laptop to thousand of compute nodes)
- Intuitive (simple, clear API and crisp command line experience)
- Image based (no more distribution templates, only good, trusted images)
- Live migration
Relationship with LXC
LXD isn't a rewrite of LXC, in fact it's building on top of LXC to provide a new, better user experience. Under the hood, LXD uses LXC through liblxc and its Go binding to create and manage the containers.
It's basically an alternative to LXC's tools and distribution template system with the added features that come from being controllable over the network.
Licensing
LXD is free software and is developed under the Apache 2 license.
Installing LXD in Funtoo
Kernel pre-requisities
These options should be enable in your kernel to use all of the functions of LXD:
!GRKERNSEC_CHROOT_CAPS
!GRKERNSEC_CHROOT_CHMOD
!GRKERNSEC_CHROOT_DOUBLE
!GRKERNSEC_CHROOT_MOUNT
!GRKERNSEC_CHROOT_PIVOT
!GRKERNSEC_PROC
!GRKERNSEC_SYSFS_RESTRICT
!NETPRIO_CGROUP
BRIDGE
CGROUP_CPUACCT
CGROUP_DEVICE
CGROUP_FREEZER
CGROUP_SCHED
CGROUPS
CHECKPOINT_RESTORE
CPUSETS
DEVPTS_MULTIPLE_INSTANCES
DUMMY
EPOLL
EVENTFD
FHANDLE
IA32_EMULATION
INET_DIAG
INET_TCP_DIAG
INET_UDP_DIAG
INOTIFY_USER
IP_NF_NAT
IP_NF_TARGET_MASQUERADE
IP6_NF_NAT
IP6_NF_TARGET_MASQUERADE
IPC_NS
IPV6
MACVLAN
NAMESPACES
NET_IPGRE
NET_IPGRE_DEMUX
NET_IPIP
NET_NS
NETFILTER_XT_MATCH_COMMENT
NETLINK_DIAG
NF_NAT_MASQUERADE_IPV4
NF_NAT_MASQUERADE_IPV6
PACKET_DIAG
PID_NS
POSIX_MQUEUE
UNIX_DIAG
USER_NS
UTS_NS
VETH
VXLAN
Getting LXD
root # emerge -av lxd These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] dev-lang/go-1.8-r1:0/1.8::gentoo USE="-gccgo" 69,062 KiB [ebuild N ] dev-go/go-crypto-0_pre20160126:0/0_pre20160126::gentoo 881 KiB [ebuild N ] sys-fs/squashfs-tools-4.3-r2::gentoo USE="xattr xz -debug -lz4 -lzma -lzo -static" 194 KiB [ebuild N ] sys-libs/libseccomp-2.3.2::gentoo USE="-static-libs" 547 KiB [ebuild N ] net-libs/libnet-1.2_rc3-r1:1.1::gentoo USE="-doc -static-libs" 661 KiB [ebuild N ] dev-libs/libnl-3.3.0_rc1:3::gentoo USE="python -static-libs -utils" PYTHON_TARGETS="python2_7 python3_4 -python3_5" 912 KiB [ebuild N ] dev-python/ipaddr-2.1.11-r1::gentoo PYTHON_TARGETS="python2_7 python3_4 -pypy -python3_5" 29 KiB [ebuild N ] dev-go/go-text-0_pre20160211:0/0_pre20160211::gentoo 3,922 KiB [ebuild N ] sys-libs/libcap-2.25::gentoo USE="pam -static-libs" 63 KiB [ebuild N ] dev-go/go-net-0_pre20160216:0/0_pre20160216::gentoo 724 KiB [ebuild N ] net-dns/dnsmasq-2.76-r1::gentoo USE="dhcp inotify ipv6 nls -auth-dns -conntrack -dbus -dhcp-tools -dnssec -idn -lua -script (-selinux) -static -tftp" LINGUAS="-de -es -fi -fr -id -it -no -pl -pt_BR -ro" 470 KiB [ebuild N ] dev-libs/protobuf-c-1.2.1-r1:0/1.0.0::gentoo USE="-static-libs {-test}" 448 KiB [ebuild N ] sys-process/criu-2.12::gentoo USE="python -setproctitle" PYTHON_TARGETS="python2_7" 632 KiB [ebuild N ] app-emulation/lxc-2.0.7::gentoo USE="python seccomp -cgmanager -doc -examples -lua" PYTHON_TARGETS="python3_4 -python3_5" 774 KiB [ebuild N ] app-emulation/lxd-2.11::gentoo USE="daemon nls {-test}" LINGUAS="-de -el -fr -ja -nl -ru" 2,352 KiB Total: 15 packages (15 new), Size of downloads: 81,664 KiB Would you like to add these changes to your config files? [Yes/No]
Running LXD
Once installed you need to start the LXD daemon. By running:
root # service lxd start * Starting lxd server ...
First setup of LXD/Initialisation
Before using LXD for the first time as a user, you may initialize your LXD environment:
user $ lxd init Do you want to configure a new storage pool (yes/no) [default=yes]? Name of the new storage pool [default=default]: Name of the storage backend to use (dir, btrfs, lvm) [default=dir]: btrfs Create a new BTRFS pool (yes/no) [default=yes]? Would you like to use an existing block device (yes/no) [default=no]? Would you like to create a new subvolume for the BTRFS storage pool (yes/no) [default=yes]: Would you like LXD to be available over the network (yes/no) [default=no]? Would you like stale cached images to be updated automatically (yes/no) [default=yes]? Would you like to create a new network bridge (yes/no) [default=yes]? What should the new bridge be called [default=lxdbr0]? What IPv4 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? What IPv6 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? LXD has been successfully configured.
What this does is it creates btrfs subvolumes like this:
user $ btrfs sub list . ID 260 gen 1047 top level 5 path rootfs ID 280 gen 1046 top level 260 path var/lib/lxd/storage-pools/default ID 281 gen 1043 top level 280 path var/lib/lxd/storage-pools/default/containers ID 282 gen 1044 top level 280 path var/lib/lxd/storage-pools/default/snapshots ID 283 gen 1045 top level 280 path var/lib/lxd/storage-pools/default/images ID 284 gen 1046 top level 280 path var/lib/lxd/storage-pools/default/custom