Talk: LXD configuration for OSM Release TWO: Difference between revisions
Line 6: | Line 6: | ||
As illustrated below, your Host System (a laptop, a virtual machine, etc), you launch the Host Container, with nesting enabled. Inside the Host Container, we'll launch the containers for OSM: SO, RO, and VCA. | As illustrated below, your Host System (a laptop, a virtual machine, etc), you launch the Host Container, with nesting enabled. Inside the Host Container, we'll launch the containers for OSM: SO, RO, and VCA. | ||
+--------------------------------------------------------------------------------+ | +--------------------------------------------------------------------------------+ | ||
| Host System | | | Host System | | ||
| | | | | | ||
| eth0: 192.168.1.173 | | | eth0: 192.168.1.173 | | ||
| | | | | | ||
| +----------------------------------------------------------------------------+ | | | +----------------------------------------------------------------------------+ | | ||
| | +----------v-----------+ | | | | | +----------v-----------+ | | | ||
| | | Host Container | | | | | | | Host Container | | | | ||
| | | | | | | | | | | | | | ||
| | | eth0: 10.0.3.59 | | | | | | | eth0: 10.0.3.59 | | | | ||
| | | lxdbr0: 10.143.142.1 | | | | | | | lxdbr0: 10.143.142.1 | | | | ||
| | +-------------+----------+-----------+------------+ | | | | | +-------------+----------+-----------+------------+ | | | ||
| | | | | | | | | | | | | | | | ||
| | | | | | | | | | | | | | | | ||
| | +----------v-----------+ +----------v-----------+ +----------v-----------+ | | | | | +----------v-----------+ +----------v-----------+ +----------v-----------+ | | | ||
| | | SO-ub | | RO | | VCA | | | | | | | SO-ub | | RO | | VCA | | | | ||
| | | | | | | | | | | | | | | | | | | | | | ||
| | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | | | | | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | | | ||
| | | | | | | lxdbr0: 10.44.127.1 | | | | | | | | | | | lxdbr0: 10.44.127.1 | | | | ||
| | +----------------------+ +----------------------+ +----------------------+ | | | | | +----------------------+ +----------------------+ +----------------------+ | | | ||
| +----------------------------------------------------------------------------+ | | | +----------------------------------------------------------------------------+ | | ||
+--------------------------------------------------------------------------------+ | +--------------------------------------------------------------------------------+ | ||
== Prepare the host system == | == Prepare the host system == |
Revision as of 17:19, 26 May 2017
Summary
LXD is a pure container hypervisor that runs unmodified Linux guest operating systems with VM-style operations at incredible speed and density. This makes it particularly well-suited for developing complex systems. This can be used to install OSM without tainting your host system with its dependencies. This is called nesting, where our host container can launch containers within itself.
As illustrated below, your Host System (a laptop, a virtual machine, etc), you launch the Host Container, with nesting enabled. Inside the Host Container, we'll launch the containers for OSM: SO, RO, and VCA.
+--------------------------------------------------------------------------------+ | Host System | | | | eth0: 192.168.1.173 | | | | +----------------------------------------------------------------------------+ | | | +----------v-----------+ | | | | | Host Container | | | | | | | | | | | | eth0: 10.0.3.59 | | | | | | lxdbr0: 10.143.142.1 | | | | | +-------------+----------+-----------+------------+ | | | | | | | | | | | | | | | | | | +----------v-----------+ +----------v-----------+ +----------v-----------+ | | | | | SO-ub | | RO | | VCA | | | | | | | | | | | | | | | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | eth0: 10.143.142.216 | | | | | | | | | | lxdbr0: 10.44.127.1 | | | | | +----------------------+ +----------------------+ +----------------------+ | | | +----------------------------------------------------------------------------+ | +--------------------------------------------------------------------------------+
Prepare the host system
Installing LXD
At a minimum, you'll need to install LXD. We highly recommend also installing ZFS to use as LXD's storage backend.
Ubuntu
sudo apt-get update sudo apt-get install zfs sudo apt -t xenial-backports install lxd newgrp lxd # required to log the user in the lxd group if lxd was just installed
Routing
All containers within the osmr2 container will be assigned an IP address from the lxdbr0 interface inside the Host Container. The steps below will route traffic destined for the OSM containers through the osmr2 container's primary interface.
Get the bridge and network IP of osmr2
The osmr2 container should have two IPV4 addresses: one for the lxdbr0 interface inside the Host Container, and one from the Host Machine. This tells us where t
We want to get the IP address of the Host Container (in this case, on eth0).
lxc list osmr2 +-------+---------+--------------------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------+---------+--------------------------------+------+------------+-----------+ | osmr2 | RUNNING | 10.143.142.1 (lxdbr0) | | PERSISTENT | 0 | | | | 10.0.3.59 (eth0) | | | | +-------+---------+--------------------------------+------+------------+-----------+
==== Get the IP of lxdbr0 inside osmr2
lxc exec osmr2 -- ip route show dev lxdbr0 protocol kernel|awk '{print $1}' 10.143.142.0/24
- Route traffic from the Host Machine to the Host Container
route add -net 10.143.142.0/24 gw 10.0.3.59
Advanced
If you want finer-grain control of how LXD is configured, you can omit the `--auto` flag and change the default options:
sudo lxd init Name of the storage backend to use (dir or zfs) [default=zfs]: Create a new ZFS pool (yes/no) [default=yes]? Name of the new ZFS pool [default=lxd]: Would you like to use an existing block device (yes/no) [default=no]? Size in GB of the new loop device (1GB minimum) [default=15]: Would you like LXD to be available over the network (yes/no) [default=no]? Do you want to configure the LXD bridge (yes/no) [default=yes]?
ZFS
Network Bridge
By default, LXD creates a bridge named lxdbr0. You can modify this bridge, such as changing the MTU, and these changes will be reflected on the interfaces of the containers managed by the host container.
Although further customization is possible, default options for LXD bridge configuration will work.
Check the MTU of the LXD bridge (lxdbr0) and the MTU of the default interface. If they are different, adjust the MTU of the LXD bridge accordingly to have the same MTU:
lxc list # This will drive initialization of lxdbr0 ip address show ens3 # In case ens3 is the default interface ip address show lxdbr0 sudo ifconfig lxdbr0 mtu 1446 # Use the appropriate MTU value sudo sed -i '/ifconfig lxdbr0 mtu/d' /etc/rc.local # To make MTU change persistent between reboots sudo sed -i "$ i ifconfig lxdbr0 mtu 1446" /etc/rc.local # To make MTU change persistent between reboots. Use the appropriate MTU value.
Launch the host container
Launch a container to host the OSM installation:
lxc launch ubuntu:16.04 osmr2 -c security.privileged=true -c security.nesting=true lxc exec osmr2 bash
Prepare your host container
Before we install OSM, we want to make sure LXD is installed and configured.
LXD
On Ubuntu Xenial, we want to enable backports to install the latest stable version of LXD.
sudo add-apt-repository -u "deb http://archive.ubuntu.com/ubuntu $(lsb_release -cs)-backports main restricted universe multiverse" sudo apt update sudo apt upgrade sudo apt -t xenial-backports install lxd
Next, initialize LXD inside the host container. Unless otherwise noted, the defaults will work fine. ZFS won't work inside a container, but that's okay; we've set it up on the host machine.
sudo 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, zfs) [default=zfs]: dir 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]? none LXD has been successfully configured.
Resource Limits
Configuration
And then continue with the Release 2 installation.