Установка LXC контейнеров через Libvirt

Прежде чем импортировать контейнер в Libvirt, его нужно создать средствами LXC.

Можно также использовать уже существующий контейнер LXC. В таком случае вы можете перейти к шагу "Импорт контейнера в Libvirt".

Контейнеры LXC расположены в папке /var/lib/lxc.

Скачать контейнер Ubuntu 18.04 можно командой:

lxc-create -t download -n test-ubuntu -- --dist ubuntu --release bionic --arch amd64

Centos 7 командой:

lxc-create -t download -n test-centos -- --dist centos --release 7 --arch amd64

Создание файла libvirt-lxc

Создайте файл lxc, выполнив команду 

nano /usr/bin/libvirt-lxc

Вставьте следующий текст, в этот файл

#!/bin/bash
virsh -c lxc:/// $@

Установите права на выполнение данного файла командой

chmod +x /usr/bin/libvirt-lxc

Импорт контейнера в Libvirt

Конфигурация LXC Контейнера хранится в файле config в папке самого контейнера. Чтобы импортировать, нужно сначала сконвертировать конфиг в формат libvirt. Делается это следующей командой:

cd /var/lib/lxc/<название контейнера>
libvirt-lxc domxml-from-native lxc-tools config > config-libvirt.xml

Если выдает ошибку, создайте файл вручную. Если ошибки нет, то отредактируйте его командой nano config-libvirt.xml

Содержимое файла xml:

<domain type='lxc'>
  <name>test-ubuntu</name>
  <memory unit='KiB'>65536</memory>
  <currentMemory unit='KiB'>65536</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64'>exe</type>
    <init>/sbin/init</init>
  </os>
  <idmap>
    <uid start='0' target='100000' count='65536'/>
    <gid start='0' target='100000' count='65536'/>
  </idmap>
  <features>
    <capabilities policy='allow'>
    </capabilities>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/lib/libvirt/libvirt_lxc</emulator>
    <filesystem type='mount' accessmode='passthrough'>
      <source dir='/var/lib/lxc/test-ubuntu/rootfs'/>
      <target dir='/'/>
    </filesystem>
    <interface type='network'>
      <source network='default'/>
      <mac address='00:16:3e:5f:34:10'/>
      <ip address='172.30.0.10' family='ipv4' prefix='24'/>
      <route family='ipv4' address='0.0.0.0' gateway='172.30.0.1'/>
      <guest dev='eth0'/>
      <link state='up'/>
    </interface>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='lxc' port='0'/>
      <alias name='console0'/>
    </console>
  </devices>
</domain>

Обратите внимание на секции memory, idmap, interface, console. Задайте в них корректные значения. Поменяйте mac адрес и пропишите статический IP адрес. Размер памяти можно узнать командой free.

Импортируйте конфигурацию:

libvirt-lxc define config-libvirt.xml

Выполните команду, показать список всех lxc контейнеров. Ваш контейнер должен быть в списке.

libvirt-lxc list --all

Запустите тестовый контейнер:

libvirt-lxc start test-ubuntu 

Проверьте сеть:

ping 172.30.0.10

Включения автозапуска контейнера

Включить автозапуск:

libvirt-lxc autostart test-ubuntu

Выключить автозапуск:

libvirt-lxc autostart --disable test-ubuntu

Подключение к контейнеру через консоль

По умолчанию в контейнере не будет установлен root пароль. Поэтому, его нужно установить принудительно. Для этого отредактируйте файл shadow командой

nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadow

Для root можно прописать строчку:

root:$6$jOJaaad3$213aac5XXw7XMVrtI8dPuwyJazAeMOoaq5QOvo.uf/7V70lA3PIsV7WAiM3d1SWPyDkPiVTvizRHta1P7ZyKs/:17541:0:99999:7:::

Это хэш пароля qwerty!2

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

libvirt-lxc console test-ubuntu

Введите логин root и пароль qwerty!2.

Чтобы отключиться от терминала нужно нажать клавиши Ctrl+5

Установка SSH

Установите ваш публичный сертификат в контейнер:

mkdir -p /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/
cat ~/.ssh/id_rsa.pub >> /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/authorized_keys
chown -R lxc-root:lxc-root /var/lib/lxc/test-ubuntu/rootfs/root/.ssh
chmod 700 /var/lib/lxc/test-ubuntu/rootfs/root/.ssh
chmod 400 /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/authorized_keys

Подключитесь к контейнеру через консоль командой:

libvirt-lxc console test-ubuntu

Установите SSH сервер.

Для Ubuntu:

apt install openssh-server -y

Для Centos:

yum install openssh-server -y
systemctl enable sshd

Завершите текущий сеанс в контейнере:

logout

Отключитесь от терминала нажав клавиши Ctrl+5

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

ssh root@172.30.0.10

Сбросьте root пароль контейнера

Отредактируйте файл shadow командой

nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadow

Для root пропишите строчку:

root:!:17541:0:99999:7:::

Остановка контейнера

Чтобы остановить контейнер, нужно выполнить комманду:

libvirt-lxc destroy test-ubuntu

Если возникает ошибка permission denied при остановке контейнера, то нужно настроить apparmor

Далее

  1. Настройка сети и iptables

Материалы

  1. LXC Getting Started
  2. Русскоязычная документация по LXC
  3. Libvirt LXC
  4. LXC Server Guide

Остались вопросы?

Если вы хотите получить консультацию или оставить комментарий, опубликуйте свой вопрос на нашем форуме.