LXC debian 8
Настройка GRUB для LXC
В /etc/default/grub изменить параметр
GRUB_CMDLINE_LINUX="cgroup_enable=memory"
Хотя официально [1] сказано, что делать ничего не надо.
Настройка ядра для LXC
В /etc/sysctl.conf [2]
net.ipv4.ip_forward=1 net.ipv4.conf.all.forwarding=1 net.ipv4.conf.all.proxy_arp=1
grub_updare, reboot
Настройка сети для LXC
На хост-машине:
apt-get install bridge-utils
Если планируется использовать виртуальные сети, дополнительно:
apt-get install vlan
В /etc/network/interfaces:
#allow-hotplug eth0 #auto eth0 #iface eth0 inet static auto br0 iface br0 inet static address 192.168.150.30 netmask 255.255.255.0 network 192.168.150.0 broadcast 192.168.150.255 gateway 192.168.150.1 dns-nameservers 192.168.150.1 bridge_ports eth0 bridge_fd 0 bridge_maxwait 0
Создание контейнера
Создаем контейнер [3]
lxc-create -t debian -n nodejs
Сразу меняем пароль root на свой.
старт в режиме консоли (не очень удобно, точнее вообще неудобно) lxc-start -n nodejs или старт в режиме демона и присоединяется к консоли контейнера, для выхода из консоли exit lxc-start -dn nodejs lxc-attach -n nodejs
Настройка параметров контейнера
Конфигурируем контейнер /var/lib/lxc/nodejs/config. Обязательно обратить внимание на lxc.network.veth.pair [4] - это имя интерфейса в хост машине. Здесь про это не сказано, и работать с сетью сможет только один контейнер.
lxc.rootfs = /var/lib/lxc/nodejs/rootfs lxc.include = /usr/share/lxc/config/debian.common.conf lxc.mount = /var/lib/lxc/nodejs/fstab lxc.utsname = nodejs lxc.arch = amd64 lxc.autodev = 1 lxc.kmsg = 0 #Количество /dev/tty lxc.tty = 6 # Autostart lxc.start.auto = 1 lxc.start.delay = 5 lxc.start.order = 100 # eth0 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.veth.pair= br0-1 lxc.network.name = eth0 lxc.network.hwaddr = 00:11:12:00:88:99 #mount папка на хост-машине папка в контейнере, относительно хост-машины #lxc.mount.entry = /home/debs /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0
Настройка параметров сети внутри LXC контейнера
Настраиваем сеть не через конфигурацию, а в контейнере (можно и так, и так) /var/lib/lxc/nodejs/rootfs/etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback # The primary network interfac allow-hotplug eth0 auto eth0 iface eth0 inet static address 192.168.150.33 netmask 255.255.255.0 network 192.168.150.0 broadcast 192.168.150.255 gateway 192.168.150.1 dns-nameservers 192.168.150.1
Настройка репозитариев и обустройство контейнера
Правим /var/lib/lxc/nodejs/rootfs/etc/apt/sources.list
#deb file:/home/debs / deb http://mirror.mephi.ru/debian/ jessie main deb-src http://mirror.mephi.ru/debian/ jessie main deb http://security.debian.org/ jessie/updates main contrib deb-src http://security.debian.org/ jessie/updates main contrib # jessie-updates, previously known as 'volatile' deb http://mirror.mephi.ru/debian/ jessie-updates main contrib deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib deb http://ftp.ru.debian.org/debian/ jessie main contrib non-free deb http://http.debian.net/debian jessie-backports main contrib non-free #deb http://www.deb-multimedia.org jessie main non-free #deb http://www.deb-multimedia.org jessie-backports main
Изначально контейнер пустой (установлено 136 пакетов). Даже ping отсутствует.
apt-get update apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget
Если нет сети в LXC контейнере
Если интернета в контейнере не появилось, ping отсутствует, то как вариант можно создать локальный репозитарий, подмонтировать его в контейнер, в sources.list добавить ссылку на него и поставить bind9 и resolvconf.
- качаем один или все три установочные диска с сайта
- создаем папку на хост-машине /home/debs
- из каталога pool каждого диска копируем в /home/debs каталоги main и contrib
- создаем индекс репозитория
cd /home/debs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
- В sources.list контейнера добавить первой строкой (остальные #)
deb file:/home/debs /
- В конфигурацию контейнера добавить
lxc.mount.entry = /home/debs /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0
- Запустить контейнер и в нем поставить пакеты
lxc-start -dn nodejs lxc-attach -n nodejs apt-get update apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget resolvconf apt-get install bind9 exit lxc-stop -n nodejs lxc-start -dn nodejs
После этого, при правильном конфигурировании gateway и dns-nameservers все должно заработать
Настройка vlan для LXC
Пример для двух vlan. На хост-машине /etc/network/interfaces:
auto lo iface lo inet loopback auto eth0.1 iface eth0.1 inet manual vlan_raw_device eth0 auto eth0.2 iface eth0.2 inet manual vlan_raw_device eth0 ######### Интерфейсы для хост-машины auto br0_1 iface br0_1 inet static address 192.168.10.90 netmask 255.255.255.0 broadcast 192.168.102.255 bridge_ports eth0.1 bridge_fd 0 bridge_maxwait 0 auto br0_2 iface br0_2 inet static address 9.23.3.169 netmask 255.255.255.128 network 9.23.3.128 broadcast 9.23.3.255 gateway 9.23.3.129 dns-nameservers 9.23.3.13 9.23.4.2 bridge_ports eth0.2 bridge_fd 0 bridge_maxwait 0
Настройки контейнера:
lxc.rootfs = /var/lib/lxc/nodejs/rootfs lxc.include = /usr/share/lxc/config/debian.common.conf lxc.mount = /var/lib/lxc/nodejs/fstab lxc.utsname = nodejs lxc.arch = amd64 lxc.autodev = 1 lxc.kmsg = 0 #Количество /dev/tty lxc.tty = 6 # Autostart lxc.start.auto = 1 lxc.start.delay = 5 lxc.start.order = 100 # eth0 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0_1 # имя устройства внутри контейнера lxc.network.name = eth0 lxc.network.veth.pair= br0_1-1 lxc.network.hwaddr = 00:11:22:33:88:99 # eth1 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0_2 lxc.network.veth.pair= br0_2-1 # имя устройства внутри контейнера lxc.network.name = eth1 lxc.network.hwaddr = 00:11:62:77:88:00
В контейнере /etc/network/interfaces:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.102.91 netmask 255.255.255.0 broadcast 192.168.102.255 auto eth1 iface eth1 inet static address 9.23.3.170 netmask 255.255.255.128 network 9.23.3.128 broadcast 9.23.3.255 gateway 9.23.3.129 dns-nameservers 9.23.3.13 9.23.4.2
Для каждого следующего контейнера меняется в конфигурации имя устройства например так:
lxc.network.veth.pair= br0_1-1 lxc.network.veth.pair= br0_2-1
следующий контейнер
lxc.network.veth.pair= br0_1-2 lxc.network.veth.pair= br0_2-2
Главное, чтобы не совпадали имена интерфейсов, создаваемых на хост-машине. Количество мостов соответствует количеству vlan. По одному на каждый vlan.