Установка и настройка LXC в CentOS 7

Feb 16, 2017 11:14 · 851 words · 4 minute read lxc

LXC (Linux Containers) — система виртуализации уровня ОС, позволяющая внутри основной операционной системы запускать изолированные дочерние ОС (с отдельными файловыми системами, сетевым стеком и памятью, но общим ядром).

Давайте разберемся на конкретном примере установки Linux Containers (LXC) в операционной системе CentOS 7!

На сегодняшний день установка LXC недоступна из базового репозитория CentOS 7, поэтому нужно добавить в систему EPEL репозиторий командой:

yum -y install epel-release

LXC-контейнеры используют сетевой мост для взаимодействия с хостом, между собой и доступом в интернет, поэтому перед созданием контейнеров следует настроить сеть как описано в этой статье.

После настройки сети приступаем к установке необходимых пакетов:

yum -y install lxc lxc-templates libcap-devel libcgroup wget bridge-utils dnsmasq iptables-services

После установки убедимся, что все готово к созданию и запуску контейнеров:

lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-514.2.2.el7.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: 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

--- 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

Благодаря установленному пакету lxc-templates мы получили готовые шаблоны, которые можно использовать для быстрого создания LXC-контейнеров. Просмотреть список шаблонов можно так:

ls -la /usr/share/lxc/templates/
total 344
drwxr-xr-x. 2 root root  4096 Jan 12 02:43 .
drwxr-xr-x. 6 root root   106 Jan 12 02:43 ..
-rwxr-xr-x. 1 root root 10579 Dec  3 14:09 lxc-alpine
-rwxr-xr-x. 1 root root 13534 Dec  3 14:09 lxc-altlinux
-rwxr-xr-x. 1 root root 10839 Dec  3 14:09 lxc-archlinux
-rwxr-xr-x. 1 root root  9677 Dec  3 14:09 lxc-busybox
-rwxr-xr-x. 1 root root 29491 Dec  3 14:09 lxc-centos
-rwxr-xr-x. 1 root root 10486 Dec  3 14:09 lxc-cirros
-rwxr-xr-x. 1 root root 18306 Dec  3 14:09 lxc-debian
-rwxr-xr-x. 1 root root 17781 Dec  3 14:09 lxc-download
-rwxr-xr-x. 1 root root 49435 Dec  3 14:09 lxc-fedora
-rwxr-xr-x. 1 root root 28253 Dec  3 14:09 lxc-gentoo
-rwxr-xr-x. 1 root root 13962 Dec  3 14:09 lxc-openmandriva
-rwxr-xr-x. 1 root root 14046 Dec  3 14:09 lxc-opensuse
-rwxr-xr-x. 1 root root 35540 Dec  3 14:09 lxc-oracle
-rwxr-xr-x. 1 root root 12233 Dec  3 14:09 lxc-plamo
-rwxr-xr-x. 1 root root  6851 Dec  3 14:09 lxc-sshd
-rwxr-xr-x. 1 root root 23976 Dec  3 14:09 lxc-ubuntu
-rwxr-xr-x. 1 root root 11641 Dec  3 14:09 lxc-ubuntu-cloud

Создать контейнер можно командой lxc-create, указав после опции -n имя контейнера, а после -t шаблон ОС для его создания. Результат выполнения команды сильно сокращен:

lxc-create -n Lxc0 -t centos
Host CPE ID from /etc/os-release: cpe:/o:centos:centos:7
Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ...
Cache found. Updating...
Loaded plugins: fastestmirror
...
...
...
Complete!
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
0 package files removed
Update finished
Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/Lxc0/rootfs ...
Copying rootfs to /var/lib/lxc/Lxc0/rootfs ...
sed: can't read /var/lib/lxc/Lxc0/rootfs/etc/init/tty.conf: No such file or directory
Storing root password in '/var/lib/lxc/Lxc0/tmp_root_pass'
Expiring password for user root.
passwd: Success
sed: can't read /var/lib/lxc/Lxc0/rootfs/etc/rc.sysinit: No such file or directory
sed: can't read /var/lib/lxc/Lxc0/rootfs/etc/rc.d/rc.sysinit: No such file or directory

Container rootfs and config have been created.
Edit the config file to check/enable networking setup.

The temporary root password is stored in:

        '/var/lib/lxc/Lxc0/tmp_root_pass'


The root password is set up as expired and will require it to be changed
at first login, which you should do as soon as possible.  If you lose the
root password or wish to change it without starting the container, you
can change it from the host by running the following command (which will
also reset the expired flag):

        chroot /var/lib/lxc/Lxc0/rootfs passwd

Контейнер будет создан с паролем по умолчанию, который можно подсмотреть в файле /var/lib/lxc/Lxc0/tmp_root_pass:

cat /var/lib/lxc/Lxc0/tmp_root_pass
Root-Lxc0-d3OLnh

Этот автоматически созданный рутовый пароль сразу же меняем на более удобный. Сделать это можно так:

chroot /var/lib/lxc/Lxc0/rootfs passwd

Существует также вариант создания контейнеров в более интерактивном режиме (возможность выбрать дистрибутив/релиз/архитектуру), например:

lxc-create -t download -n Lxc1
...
Distribution: centos
Release: 7
Architecture: amd64

Для запуска LXC-контейнера в фоновом режиме следует использовать команду:

lxc-start -n Lxc1 -d

Если же вы не укажете опцию -d, то после старта контейнера автоматически попадете в его консоль. При первом подключении к контейнеру вы увидите что-то типа:

Type  to exit the console,  to enter Ctrl+a itself

— в моем случае это не заработало, поэтому я всегда запускаю контейнеры с опцией -d.

Для подключения к контейнеру можно использовать команду:

lxc-attach -n Lxc0

На этом этапе следует установить внутри контейнера все необходимые для комфортной работы системные утилиты.

Для управления контейнерами чаще всего используются такие команды как остановка контейнера:

lxc-stop -n Lxc0

получение дополнительной информации о контейнере:

lxc-info -n Lxc0

клонирования контейнеров:

lxc-clone Lxc0 Lxc2

создания снепшотов (работает при остановленном контейнере):

lxc-snapshot -n Lxc0

восстановления из снепшотов:

lxc-snapshot -r snap0 -n Lxc0

и удаления контейнеров:

lxc-destroy -n Lxc0

Для более тонкой настройки контейнера можно использовать конфигурационный файл /var/lib/lxc/{имя_контейнера}/config.

tweet Share