: | : |
‹ | › | |||||
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
2017-11-14 09:42:17 4659 0
Установка и настройка гипервизора контейнеров LXD на Ubuntu16.04
LXD — это гипервизор контейнеров, который базируется на LXС. Основное отличие от LXC состоит в том, что LXD вводит понятия образа контейнера, и строит инфраструктуру вокруг этих двух понятий.
Образ ОС можно скачивать из репозиториев и разворачивать экземпляры на хосте как контейнеры. Один образ можно «клонировать» на несколько виртуальных машин.
Установка LXD
LXD на текущий момент нормально работает на Ubuntu 16.04 LTS. Можно запустить и на других системах, но могут возникнуть сложности или что-то будет работать не так как надо. К примеру, на Centos 7 контейнеры запускаются только в привилегированном режиме, отсутствуют готовые сборки lxd и нужно их компилировать вручную.
В свежей Ubuntu версии, по умолчанию, уже встроен lxd. Его можно установить:
apt-get install lxd
Настройка LXD
Обновляем систему и ставим необходимые пакеты
apt-get update
apt-get upgrade
apt-get install zfs zfsutils-linux lxd-bridge
Инициализация LXD
Инициализацию LXD нужно делать до того как вы начнете пользоваться контейнерами.
Перед тем как делать инициализацию нужно решить, какое backend хранилище будет использоваться. Backend хранилищ – это место, где находятся все контейнеры и образы. Выделяют два основных типов хранилища: ZFS и Dir.
ZFS позволяет моментально создавать и восстанавливать снимки контейнеров, создавать контейнеры из образов. Благодаря ZFS, снимки LXD занимают значительно меньше места, чем сам контейнер. Dir хранит образы обычным способом на диске. Каждый снимок будет занимать столько же, как и сам контейнер.
ZFS монтируется в файл как loop device, поэтому нужно следить за размером хранилища и увеличивать место, если его мало осталось. ZFS имеет смысл использовать, если у вас есть приватное удаленное хранилище образов, куда вы отправляете, время от времени, снимки контейнеров в качестве бэкапов, а затем скачиваете их от туда для установки новых версий или для восстановления контейнеров из бэкапов.
После того как вы решили какое backend хранилище использовать, начинайте процесс инициализации. Делается это командой:
lxd init
Указываем какой тип хранилища будет использоваться
Name of the storage backend to use (dir or zfs): dir
Если выбрать использование директории (dir) то сразу переходим на настройку сети, если выбрать zfs то будет предложена настройка :
Create a new ZFS pool (yes/no)? yes Name of the new ZFS pool: lxd-zfs Would you like to use an existing block device (yes/no)? no Size in GB of the new loop device (1GB minimum): 20
«Size in GB of the new loop device» — это размер хранилища ZFS
Далее следует настройка сети : Нужен ли доступ к LXD из вне (доступ нужен если вы собираетесь создавать публичный или приватный репозиторий)
Would you like LXD to be available over the network (yes/no)? no
Далее будет запрос желаете ли вы настраивать LXD bridge
Do you want to configure the LXD bridge (yes/no)? yes
Запуститься интерфейс настройки сети.
Would you like to setup a network bridge for LXD containers now? Yes Bridge interface name: lxdbr0 Do you want to setup an IPv4 subnet? Yes IPv4 address: 10.45.91.1 IPv4 CIDR mask: 24 First DHCP address: 10.45.91.100 Last DHCP address: 10.45.91.200 Max number of DHCP clients: 100 Do you want to NAT the IPv4 traffic? Yes Do you want to setup an IPv6 subnet? No
Для сети будет использоваться мост с интерфейсом lxdbr0.
Запустить повторно утилиту настройки LXD bridge можно командой:
dpkg-reconfigure -p medium lxd
Настройка NAT
Для того, чтобы заработал NAT, выполнив команды:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
Установка и запуск образа виртуальной машины
Добавляем репозиторий (по умолчанию images уже добавлен):
lxc remote add images images.linuxcontainers.org:8443
Скачиваем образ:
lxc image copy images:gentoo/amd64 local: --alias=gentoo-amd64
gentoo-amd64 – синоним образа, можно придумать любой
Запуск образ:
lxc launch local:gentoo-amd64 gentoo-lxc
gentoo-lxc — название будущего контейнера
Можно сначала создать контейнер, а потом запустить его:
lxc init local:gentoo-amd64 gentoo-lxc
lxc start gentoo-lxc
Cтатус запущенных контейнеров
lxc list
+------------+---------+---------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------------+---------+---------------------+------+------------+-----------+ | gentoo-lxc | RUNNING | 10.45.91.128 (eth0) | | PERSISTENT | 0 | +------- ----+---------+---------------------+------+------------+-----------+
Проброс директории
Создаем директорию, которую будем монтировать
mkdir -p /data/gentoo/
chown 100000:100000 /data/gentoo
Пробрасываем:
lxc config device add gentoo-lxc data disk path=/data
source=/data/gentooМонтирование папок не изменяет содержимое папок /var/lib/lxd/containers/test, а монтируется в отдельную папку /var/lib/lxd/devices/test. Поэтому бэкапы и снимки контейнера не будут содержать примонтированные папки и файлы. Обновление контейнера из бэкапа или образа не будет затрагивать содержимое примонтированных папок.
Монтирование директорий не изменяет содержание директории /var/lib/containers/gentoo-lxc>, а монтируется в директорию /var/lib/lxc/devices/gentoo-lxc. Следовательно бэкапы и восстановления контейнера не будут содержать изменения в таких папках.
Просмотр информации о настройке:
lxc config show gentoo-lxc
Подключение к виртуальной машине
Подключение к контейнеру с запуском shell:
lxc exec gentoo-lxc /bin/bash
gentoo-lxc ~ #
Проверяем сеть:
ifconfig
eth0: flags=4163mtu 1500 inet 10.45.91.128 netmask 255.255.255.0 broadcast 10.45.91.255 inet6 fe80::216:3eff:fed3:d93a prefixlen 64 scopeid 0x20 ether 00:16:3e:d3:d9:3a txqueuelen 1000 (Ethernet) RX packets 12 bytes 1742 (1.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 14 bytes 2104 (2.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping ya.ru
PING ya.ru (87.250.250.242) 56(84) bytes of data. 64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=52 time=5.51 ms 64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=52 time=5.36 ms 64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=52 time=5.44 ms 64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=52 time=5.59 ms
далее можно проводить настройку так же как и с обычной хостовой машиной
Введите ответ:
+
=