1.Установка LXC
1 |
# apt-get install lxc |
При установке LXC автоматически установятся необходимые пакеты, такие как
1 |
bridge-utils debootstrap cgmanager |
и др.
Базовая конфигурация сети, которая применяется к контейнерам при их создании находится в файле
/etc/lxc/default.conf
Например
1 |
# cat /etc/lxc/default.conf |
1 2 3 4 |
lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx |
После установки LXC на хосте автоматически поднимается интерфейс типа Bridge lxcbr0
Когда USE_LXC_BRIDGE установлена в true в файле /etc/default/lxc (как устанавливается по умолчанию), мост с именем lxcbr0 создается в процессе старта. Этот мост получает частный адрес 10.0.3.1, а контейнеры его использующие получат адреса из диапазона 10.0.3.0/24
1 |
# grep -vE '^#|^$' /etc/default/lxc-net |
1 2 3 4 5 6 7 |
USE_LXC_BRIDGE="true" LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" |
Кроме того, добавляется правило в цепочку POSTROUTING таблицы NAT для «маcкарадинга» внутренней сети -10.0.3.0/24 – для выпуска контейнеров в Интернет
1 |
# iptables -t nat -L |
1 2 3 4 5 6 7 8 9 |
Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 10.0.3.0/24 !10.0.3.0/24 |
Проверка наличия смонтированного cgroup
1 |
# mount -l | grep cgroup |
1 2 |
none on /sys/fs/cgroup type tmpfs (rw) systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd) |
Проверка параметров LXC-конфигурации
1 |
# lxc-checkconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-4.2.0-42-generic --- 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 |
Просмотр шаблонов операционных систем доступных для установки
1 |
# ls -l /usr/share/lxc/templates/ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
total 340 -rwxr-xr-x 1 root root 10557 Nov 18 2015 lxc-alpine -rwxr-xr-x 1 root root 13534 Nov 18 2015 lxc-altlinux -rwxr-xr-x 1 root root 10556 Nov 18 2015 lxc-archlinux -rwxr-xr-x 1 root root 9878 Nov 18 2015 lxc-busybox -rwxr-xr-x 1 root root 29149 Nov 18 2015 lxc-centos -rwxr-xr-x 1 root root 10486 Nov 18 2015 lxc-cirros -rwxr-xr-x 1 root root 17354 Nov 18 2015 lxc-debian -rwxr-xr-x 1 root root 17757 Nov 18 2015 lxc-download -rwxr-xr-x 1 root root 49319 Nov 18 2015 lxc-fedora -rwxr-xr-x 1 root root 28253 Nov 18 2015 lxc-gentoo -rwxr-xr-x 1 root root 13962 Nov 18 2015 lxc-openmandriva -rwxr-xr-x 1 root root 14046 Nov 18 2015 lxc-opensuse -rwxr-xr-x 1 root root 35540 Nov 18 2015 lxc-oracle -rwxr-xr-x 1 root root 11868 Nov 18 2015 lxc-plamo -rwxr-xr-x 1 root root 6851 Nov 18 2015 lxc-sshd -rwxr-xr-x 1 root root 23494 Nov 18 2015 lxc-ubuntu -rwxr-xr-x 1 root root 11349 Nov 18 2015 lxc-ubuntu-cloud |
Изменим тип сети для создаваемых контейнеров с veth на empty (чтобы при создании контейнера поднимался/создавался только localhost-интерфейс)
1 |
# cat /etc/lxc/default.conf |
1 2 3 4 5 |
lxc.network.type = empty #lxc.network.type = veth #lxc.network.link = lxcbr0 #lxc.network.flags = up #lxc.network.hwaddr = 00:16:3e:xx:xx:xx |
Отключаем использование дефолтного бриджа lxcbr0
1 |
# nano /etc/default/lxc-net |
1 |
USE_LXC_BRIDGE="false" |
Правило iptables в цепочке POSTROUTING таблицы NAT будет удалено автоматически после отключения дефолтного бриджа и перезагрузки ноды
Перегружаем ноду
1 |
# reboot |
После перезагрузки проверяем,что отсутствут дефолтный бридж
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
eth0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:503 errors:0 dropped:0 overruns:0 frame:0 TX packets:456 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:52192 (52.1 KB) TX bytes:48775 (48.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
2.Создание контейнера
Самый простой способ создать контейнер — использовать lxc-create. Этот сценарий использует специфические для дистрибутива шаблоны в
1 |
/usr/share/lxc/templates/ |
для установки дружественных контейнеру настроек chroots в
1 |
/var/lib/lxc/<имя_контейнера>/rootfs |
и инициализации конфигурации в
1 |
/var/lib/lxc/<имя_контейнера>/fstab |
и
1 |
/var/lib/lxc/<имя_контейнера>/config |
Шаблоны создания контейнеров также могут воспринимать аргументы. Они могут быть перечислены после сиволов —
Установка Ubuntu 14 LTS в контейнере
Команда lxc-create будет использовать шаблон ubuntu (-t ubuntu) и создаст контейнер с именем ubuntu14.kamaok.org.ua с операционной системой Ubuntu 14.04 LTS(кодовое имя trusty)
Поскольку не указан файл настроек (что можно сделать с помощью параметра ‘-f file’), будет использован файл настроек по умолчанию /usr/share/lxc/config/ubuntu.common.conf
1 |
# lxc-create -t ubuntu -n ubuntu14.kamaok.org.ua -- -r trusty |
Если не указывать релиз, то по умолчанию будет использоваться тот же релиз, что и на хостовой ноде и той же архитектуры
Например, для установки контейнера с Centos7
1 |
# lxc-create -n centos7.kamaok.org.ua -t centos -- --release=7 |
После установки Ubuntu в контейнeре пользователь для подключения к контейнеру ubuntu и пароль ubuntu (пользователь состоит в группе sudo)
Файл конфигурации контейнера размещается по пути
1 |
/var/lib/lxc/<container_name>/config |
1 |
# ls -l /var/lib/lxc/ubuntu14.kamaok.org.ua/ |
1 2 3 4 |
total 8 -rw-r--r-- 1 root root 524 Jul 29 01:31 config -rw-r--r-- 1 root root 0 Jul 29 01:31 fstab drwxr-xr-x 21 root root 4096 Jul 29 01:06 rootfs |
1 |
# lxc-ls -f |
1 2 3 |
NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------------------ ubuntu14.kamaok.org.ua STOPPED - - NO |
Автозапуск контейнера
Первый способ
Согласно файлу /etc/default/lxc
достаточно создать символьную ссылку с конфигурационного файла контейнера в каталог /etc/lxc/auto
Если переменная LXC_AUTO установлена в true, то происходит поиск в /etc/lxc/auto контейнеров, которые должны запускаться автоматически
Т.е для автоматического запуска контейнера необходимо создать символьную ссылку,указывающую на конфигурационный файл контейнера
1 |
# ln -s /var/lib/lxc/ubuntu14.kamaok.org.ua/config /etc/lxc/auto/ubuntu14.kamaok.org.ua.conf |
1 |
# grep -vE '^#|^$' /etc/default/lxc |
1 2 3 4 |
LXC_AUTO="true" USE_LXC_BRIDGE="false" # overridden in lxc-net [ -f /etc/default/lxc-net ] && . /etc/default/lxc-net LXC_SHUTDOWN_TIMEOUT=120 |
Второй способ – через настройку файла конфигурации контейнера
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 2 3 |
lxc.start.auto = 1 # включение автозапуска lxc.start.delay = 5 # задержка запуска в секундах lxc.start.order = 50 # приоритет запуска – чем выше значение, тем раньше запуск |
3.Настройка сети на ноде и в контейнере для выпуска контейнеров в Интернет
Использование сетевого стека хост-системы (type = veth)
При запуске контейнера с таким типом сети, на хост-машине создается специальный виртуальный интерфейс (в примере ниже, он называется veth-01). Этот виртуальный интерфейс фактически и использует контейнер для взаимодействия с внешней средой.
Включение маршрутизации
1 |
# nano /etc/sysctl.conf |
1 |
net.ipv4.ip_forward=1 |
1 |
# sysctl -p |
Если сеть котейнеров использует т.н. серую(частную) подсеть
NAT-режим
На ноде добавляем настройки для создания нового интерфейса
1 |
# nano /etc/network/interfaces |
1 2 3 4 5 6 7 |
auto lxc-bridge-nat iface lxc-bridge-nat inet static bridge_ports none bridge_fd 0 bridge_maxwait 0 address 192.168.10.1 netmask 255.255.255.0 |
1 |
# /etc/init.d/networking restart |
Проверка наличия нового интерфейса
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
eth0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:598 errors:0 dropped:0 overruns:0 frame:0 TX packets:521 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:61125 (61.1 KB) TX bytes:60633 (60.6 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lxc-bridge-nat Link encap:Ethernet HWaddr 92:f8:8b:1e:2a:75 inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
Настройка iptables на ноде
1 |
# apt-get install iptables iptables-persistent |
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 192.168.1.84 |
Или, если внешний адрес нода получает динамически
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE |
1 |
# service iptables-persistent save && service iptables-persistent restart |
Настройка конфигурационного файла контейнера(предварительно останавливаем контейнер)
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# тип сети, veth если используется bridge lxc.network.type = veth # bridge, через который будет работать виртуальный интерфейс lxc.network.link = lxc-bridge-nat # имя сетевого адаптера для этого контейнера на хостовой машине lxc.network.veth.pair = veth-01 # поднимать сетевой интерфейс при запуске системы lxc.network.flags = up # интерфейс внутри контейнера lxc.network.name = eth0 # сетевой адрес хоста lxc.network.ipv4 = 192.168.10.10/24 # шлюз lxc.network.ipv4.gateway = 192.168.10.1 # мак-адрес хоста lxc.network.hwaddr = 00:16:3e:77:52:21 Добавим автозагрузку контенйера # включение автозапуска lxc.start.auto = 1 # задержка запуска в секундах lxc.start.delay = 5 # приоритет запуска – чем выше значение, тем раньше запуск lxc.start.order = 50 |
В результате, данный контейнер должен получить при старте ip=192.168.10.10 и через шлюз 192.168.10.1, и далее через 192.168.1.84 — выход в сеть.
Запускаем контейнер и проверяем наличие запущенного контейнера и добавление его в автозагрузку
1 |
# lxc-start -d -n ubuntu14.kamaok.org.ua |
1 |
# lxc-ls -f |
1 2 3 |
NAME STATE IPV4 IPV6 AUTOSTART --------------------------------------------------------------- ubuntu14.kamaok.org.ua RUNNING 192.168.10.10 - YES |
На ноде появляется интерфейс
1 2 3 4 5 6 |
veth-01 Link encap:Ethernet HWaddr fe:22:41:9f:be:fa UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:79 errors:0 dropped:0 overruns:0 frame:0 TX packets:48 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12205 (12.2 KB) TX bytes:4247 (4.2 KB) |
Просмотр интерфейсов, которые используют созданный мост lxc-bridge-nat
1 |
# brctl show |
1 2 |
bridge name bridge id STP enabled interfaces lxc-bridge-nat 8000.fe22419fbefa no veth-01 |
Проверка доступности контейнера с ноды
1 |
# ping 192.168.10.10 |
1 2 3 |
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.118 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.057 ms |
Подключаемся к контейнеру и проверяем наличие доступа в Интернет с контейнера
1 |
# lxc-console -n ubuntu14.kamaok.org.ua |
Логин ubuntu и пароль ubuntu, которые были созданы при установке контейнера
1 |
ubuntu@ubuntu14:~$ ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
eth0 Link encap:Ethernet HWaddr 00:16:3e:77:52:21 inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::216:3eff:fe77:5221/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:43 errors:0 dropped:0 overruns:0 frame:0 TX packets:74 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3822 (3.8 KB) TX bytes:11818 (11.8 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
1 |
ubuntu@ubuntu14:~$ netstat -rn |
1 2 3 4 |
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 |
1 |
ubuntu@ubuntu14:~$ ping i.ua |
1 2 3 |
PING i.ua (91.198.36.14) 56(84) bytes of data. 64 bytes from www.i.ua (91.198.36.14): icmp_seq=1 ttl=56 time=8.07 ms 64 bytes from www.i.ua (91.198.36.14): icmp_seq=2 ttl=56 time=7.68 ms |
Если сеть котейнеров использует т.н. белую(публичную) подсеть
Bridge-интерфейс
Настройка ноды
1 |
# nano /etc/network/interfaces |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#auto eth0 #iface eth0 inet static auto br0 iface br0 inet static address 192.168.1.84 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 |
1 |
# /etc/init.d/networking restart |
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
br0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1144 errors:0 dropped:0 overruns:0 frame:0 TX packets:914 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:103565 (103.5 KB) TX bytes:118859 (118.8 KB) eth0 Link encap:Ethernet HWaddr 00:0c:29:5a:c2:60 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3121 errors:0 dropped:0 overruns:0 frame:0 TX packets:828 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:474717 (474.7 KB) TX bytes:115562 (115.5 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
Настройка конфигурационного файла контейнера(предварительно останавливаем контейнер)
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 2 3 4 5 6 7 8 |
lxc.network.type = veth lxc.network.link = br0 lxc.network.veth.pair = veth-01 lxc.network.flags = up lxc.network.name = eth0 lxc.network.ipv4 = 192.168.1.10/24 lxc.network.ipv4.gateway = 192.168.1.1 lxc.network.hwaddr = 00:16:3e:77:52:21 |
Запуск контейнера и проверка доступности его по сети
1 |
# lxc-start -n ubuntu14.kamaok.org.ua -d |
Просмотр интерфейсов, которые используют созданный мост br0
1 |
# brctl show |
1 2 3 |
bridge name bridge id STP enabled interfaces br0 8000.000c295ac260 no eth0 veth-01 |
1 |
# ping 192.168.1.10 |
1 2 |
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.367 ms |
Вход по сети на контейнер и проверки наличия доступа в Интернет с контейнера
1 |
root@ubuntu141:~# ssh ubuntu@192.168.1.10 |
1 2 |
ubuntu@192.168.1.10's password: ubuntu@ubuntu14:~$ |
1 |
ubuntu@ubuntu14:~$ ping i.ua |
1 2 3 4 5 6 7 |
PING i.ua (91.198.36.14) 56(84) bytes of data. 64 bytes from www.i.ua (91.198.36.14): icmp_seq=1 ttl=57 time=7.49 ms 64 bytes from www.i.ua (91.198.36.14): icmp_seq=2 ttl=57 time=7.47 ms ^C --- i.ua ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 7.471/7.485/7.499/0.014 ms |
1 |
ubuntu@ubuntu14:~$ netstat -rn |
1 2 3 4 |
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 |
4.Полезные команды LXC
Подразумевается, что имя контейнера ubuntu14.kamaok.org.ua
Создать новый контейнер LXC
1 |
# lxc-create -n ubuntu14.kamaok.org.ua |
В команду lxc-create можно передать параметры, в том числе желаемую версию дистрибутива. Чтобы узнать, какие параметры принимает шаблон следует выполнить
Для установки Debian
1 |
# lxc-create --template debian --help |
Для установки Centos
1 |
# lxc-create --template centos --help |
Для установки Ubuntu
1 |
# lxc-create --template ubuntu --help |
Запуск контейнера в фоновом режиме(без подключения к консоли)
1 |
# lxc-start -n ubuntu14.kamaok.org.ua -d |
Запуск контейнера с логированием для диагностики проблемы при запуске контейнера
1 |
# lxc-start -n ubuntu14.kamaok.org.ua -l debug -o /var/log/lxc/ubuntu14.kamaok.org.ua.log |
Проверка состояния контейнеров
1 |
# lxc-ls -f |
1 2 3 |
NAME STATE IPV4 IPV6 AUTOSTART -------------------------------------------------------------- ubuntu14.kamaok.org.ua RUNNING 192.168.1.10 - YES |
Просмотр подробной информации о контейнере
1 |
# lxc-info -n ubuntu14.kamaok.org.ua |
1 2 3 4 5 6 7 8 9 10 11 |
Name: ubuntu14.kamaok.org.ua State: RUNNING PID: 2977 IP: 192.168.1.10 CPU use: 1.15 seconds Memory use: 3.77 MiB KMem use: 0 bytes Link: veth-01 TX bytes: 2.40 KiB RX bytes: 4.21 KiB Total bytes: 6.62 KiB |
Вход в контейнер/подключение к консоли контейнера
1 |
# lxc-console -n ubuntu14.kamaok.org.ua |
Остановка контейнера
1 |
# lxc-stop -n ubuntu14.kamaok.org.ua |
Удаление контейнера
1 |
# lxc-destroy -n ubuntu14.kamaok.org.ua |
Создание клона контейнера(предварительно оригинальный контейнер должен быть остановлен)
1 |
# lxc-clone -o ubuntu14.kamaok.org.ua -n ubuntu142.kamaok.org.ua |
1 |
Created container ubuntu142.kamaok.org.ua as copy of ubuntu14.kamaok.org.ua |
Заморозка/разморозка контейнера:
1 |
# lxc-freeze -n ubuntu14.kamaok.org.ua |
1 |
# lxc-unfreeze -n ubuntu14.kamaok.org.ua |
Создание снапшота(контейнер должен быть остановлен предварительно)
1 |
# lxc-snapshot -n ubuntu14.kamaok.org.ua |
1 2 3 4 |
lxc_container: lxccontainer.c: lxcapi_snapshot: 2879 Snapshot of directory-backed container requested. lxc_container: lxccontainer.c: lxcapi_snapshot: 2880 Making a copy-clone. If you do want snapshots, then lxc_container: lxccontainer.c: lxcapi_snapshot: 2881 please create an aufs or overlayfs clone first, snapshot that lxc_container: lxccontainer.c: lxcapi_snapshot: 2882 and keep the original container pristine. |
Список снапшотов
1 |
# lxc-snapshot -n ubuntu14.kamaok.org.ua -L |
1 |
snap0 (/var/lib/lxcsnaps/ubuntu14.kamaok.org.ua) 2016:07:30 00:23:38 |
Восстановление из снепшота
1 |
# lxc-snapshot -n ubuntu14.kamaok.org.ua -r snap0 |
Выполнить указанную команду внутри контейнера
1 |
# lxc-attach -n ubuntu14.kamaok.org.ua uptime |
1 |
22:37:43 up 22 min, 1 user, load average: 0.00, 0.00, 0.02 |
Мониторинг состояния контейнеров
Отслеживает один или более контейнеров на любые изменения статусов. Она как правило получает имя контейнера с помощью опции -n, однако в этом случае имя контейнера может быть регулярным выражением posix, чтобы позволять отслеживать желаемые наборы контейнеров.
lxc-monitor продолжает выполнение пока выводит статусы контейнеров
1 |
# lxc-monitor -n ubuntu14.kamaok.org.ua |
Ждать определённого состояния контейнера; завершаться, когда состояние достигнуто
Например, ожидать пока контейнер ubuntu14.kamaok.org.ua не войдет в состояния STOPPED или FROZEN и затем завершится.
1 |
# lxc-wait -n ubuntu14.kamaok.org.ua -s 'STOPPED|FROZEN' |
Управление cgroup-группами контейнера
1 |
# lxc-cgroup |
5.Ограничение ресурсов контейнера с помощью cgroup
lxc-cgroup получает или устанавливает значения cgroup ассоциированных с именем контейнера
RAM/SWAP
Ограничения применяемые на лету сбрасываются после перезагрузки контейнера
Просмотр доступной памяти контейнеру
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua memory.limit_in_bytes |
1 |
9223372036854771712 |
Ограничим размер оперативной пямяти для контейнера в размере 1024MB
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua memory.limit_in_bytes 1024M |
Проверяем наши изменения
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua memory.limit_in_bytes |
1 |
1073741824 |
Для того, чтобы изменения сохранялись при перезагрузке контейнера необходимо добавить их в файл с настройками контейнера
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 |
lxc.cgroup.memory.limit_in_bytes = 1024M |
Изменения в этом файле вступят в силу после перезагрузки контейнера
Проверка размера доступной для контейнера оперативной памяти
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua memory.limit_in_bytes |
1 |
1073741824 |
Либо можно воспользоваться запуском контейнера с логированием и фильтрацией лога запуска контейнера
1 |
# lxc-start -n ubuntu14.kamaok.org.ua -l debug -o /var/log/lxc/ubuntu14.kamaok.org.ua.log |
1 |
# grep -i memory /var/log/lxc/ubuntu14.kamaok.org.ua.log |
Либо с помощью cgroup
1 |
# cat /sys/fs/cgroup/memory/lxc/ubuntu14.kamaok.org.ua /memory.limit_in_bytes |
1 |
536870912 |
Ограниечение на swap-раздел
Например, установлен лимит на использование оперативной памяти 1024MB
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 |
lxc.cgroup.memory.limit_in_bytes = 1024M |
Для установки лимита на использование суммы оперативной памяти и swap используется параметр memory.memsw.limit_in_bytes, который ОБЯЗАТЕЛЬНО должен быть указан после параметра memory.limit_in_bytes.
Например, ограничим размер swap-раздела 1024M
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 2 |
lxc.cgroup.memory.limit_in_bytes = 1024M lxc.cgroup.memory.memsw.limit_in_bytes = 2048M |
CPU
1 |
lxc.cgroup.cpuset.cpus |
— выделение конкретного ядра/ядер
1 |
lxc.cgroup.cpu.shares |
— приоритет (по умолчанию равно 1024)
В конфигурационном файле контейнера (выделяем под контейнер первых два ядра процессора):
Чтобы изменения сохранились после перезагрузки
1 |
# nano /var/lib/lxc/ubuntu14.kamaok.org.ua/config |
1 2 |
lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 512 |
Чтобы изменения применились до перезагрузки
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua cpuset.cpus 0,1 |
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua cpu.shares 1024 |
Проверка значений
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua cpu.shares |
1 |
1024 |
1 |
# lxc-cgroup -n ubuntu14.kamaok.org.ua cpuset.cpus |
1 |
0-1 |
Источник:
http://eax.me/lxc/
http://xgu.ru/wiki/LXC
http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/lxc
http://serverfault.com/questions/444232/limit-memory-and-cpu-with-lxc-execute/471276#471276
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/index.html