: :

ПнВтСрЧтПтСбВс

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=4163  mtu 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

далее можно проводить настройку так же как и с обычной хостовой машиной






Введите ответ:

+

=