LXC w Debian 9

By | 24 lipca 2018

LXC jest lekką metodą wirtualizacji opartą na kontenerach. W niektórych sytuacjach jest bardziej zalecana niż np. Xen. Ma to miejsce szczególnie w przypadku architektury mikroserwisów. Najważniejsze, że ma mały narzut wydajnościowy i jeśli wszystko jest dobrze skonfigurowane, nie sprawie większych problemów. „Ojczystą” dystrybucją omawianego rozwiązania jest Ubuntu. Zakładamy, że chcemy korzystać z lvm i systemu plików xfs. Przystępujemy o instalacji.

apt install lxc libvirt-clients debootstrap xfsprogs dnsmasq-base lxcfs yum

Edytujemy „/etc/lxc/default.conf”

vim /etc/lxc/default.conf

lxc.network.type = empty
i zastępujemy powyższy wpis, tym znajdującym się poniżej:
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:FF:AA:xx:xx:xx

Następnie edytujemy plik „/etc/default/lxc-net”

vim /etc/default/lxc-net

Ustawiemy:
USE_LXC_BRIDGE="true"

Kolejny krokiem jest włączenie forwardowania plików:
/etc/sysctl.conf
net.ipv4.ip_forward=1

Aby można było tworzyć kontenery z wykorzystaniem LVM i systemu XFS, musimy ładować odpowiedni moduł jądra przy starcie systemu. W tym celu dodajemy do poniższego pliku odpowiedni wpis.

vim /etc/modules

xfs

Już prawie ostatnim krokiem jest uruchomienie skryptu sprawdzającego, czy wszystkie ustawienia są prawidłowe.

lxc-checkconfig

Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.9.0-7-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
FUSE (for use with lxcfs): enabled

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Wszystko wygląda dobrze, ale dla pewności uruchommy ponownie system:

reboot

Czas na pierwszy test, tworzymy kontener.

lxc-create -n specadmin -t centos -B lvm --vgname=vg0 --lvname=specadmin --fssize=5G --fstype=xfs

WARNING: xfs signature detected on /dev/vg0/specadmin at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg0/taxstory6.
Logical volume "taxstory6" created.
Host CPE ID from /etc/os-release:
'yum' command is missing
lxc-create: lxccontainer.c: create_run_template: 1297 container creation template for taxstory6 failed
Logical volume "taxstory6" successfully removed
lxc-create: tools/lxc_create.c: main: 318 Error creating container taxstory6

Aby utworzyć kontener z CentOS-em na Debianie 9, trzeba zainstalować pakiet yum.

apt-get install yum

Po poprawnym utworzeniu kontenera wyświetli się nam m.in. informacja o położeniu pliku z pierwszym – rozruchowym hasłem użytkownika root.

The temporary root password is stored in:

'/var/lib/lxc/specadmin/tmp_root_pass'

Aby wystartować nasz nowo utworzony kontener, wydajemy komendę:

lxc-start -n specadmin -d