Покрокова інструкція налаштування lxd на ubuntu, linuxspace

LXD - це гипервизор контейнерів, який базується на LXС [1]. Основна відмінність від LXC полягає в тому, що LXD вводить поняття образу контейнера, і будує інфраструктуру навколо цих двох понять. Простіше кажучи, LXD - це Docker для віртуальних ОС. Принцип такий же: образ ОС можна скачувати з репозиторіїв і розгортати екземпляри на хості як контейнери. Один образ можна «клонувати» на кілька віртуальних машин.

Дана інструкція містить покроковий алгоритм установки і настройки LXD. Інструкція розглядає наступні теми:

Відмінності від Docker:

Інші можливості LXD:

  1. Можна інтегрувати з OpenStack через плагін nova-lxd.
  2. Є можливість сплячого режиму (гібернація) контейнера.
  3. Є API управлінням контейнерами [4].
  4. Можна запускати Docker всередині LXD [5].

LXD на поточний момент нормально працює на Ubuntu 16.04 LTS. Можна запустити і на інших системах, але можуть виникнути складності або щось буде працювати не так як треба. Наприклад, на Centos 7 контейнери запускаються тільки в привілейованому режимі, відсутні готові збірки lxd і потрібно їх компілювати вручну.

У свіжої Ubuntu версії, за замовчуванням, вже вбудований lxd. Якщо він не встановлений, то поставити можна так:

aptitude install lxd

Оновлення систему і встановіть необхідні для роботи пакети:

aptitude update aptitude upgrade aptitude install lxd zfs zfsutils-linux

ініціалізація LXD

Ініціалізацію LXD потрібно робити до того як ви почнете користуватися контейнерами.

Перед тим як робити ініціалізацію потрібно вирішити, яке backend сховище буде використовуватися. Backend сховищ - це місце, де знаходяться всі контейнери і образи. Виділяють два основних типів сховища: ZFS і Dir.

  • ZFS дозволяє моментально створювати і відновлювати знімки контейнерів, створювати контейнери з образів. Завдяки ZFS, знімки LXD займають значно менше місця, ніж сам контейнер.
  • Dir зберігає образи звичайним способом на диску. Кожен знімок буде займати стільки ж, як і сам контейнер.

ZFS монтується в файл як loop device, тому потрібно стежити за розміром сховища і збільшувати місце, якщо його мало залишилося. ZFS має сенс використовувати, якщо у вас є приватне віддалене сховище образів, куди ви відправляєте, час від часу, знімки контейнерів в якості резервних копій, а потім завантажуєте їх від туди для установки нових версій або для відновлення контейнерів з резервних копій.

Я на продакшн сервер вирішив поставити Dir. ZFS протестують у себе на локалке. Бекапи буду робити звичайними скриптами - упаковувати їх в tar і відправляти їх на Amazon S3.

Після того як ви вирішили яке backend сховище використовувати, починайте процес ініціалізації. Робиться це командою:

Утиліта буде задавати питання, на які вам потрібно буде відповісти. Першим питанням утиліта запитає: який тип сховища використовувати?

Name of the storage backend to use # 40; dir or zfs # 41 ;. dir

Якщо ваша відповідь Dir, то утиліта відразу перейде до налаштування мережі. Якщо ваша відповідь ZFS, то система буде задавати такі питання:

Create a new ZFS pool # 40; yes / no # 41 ;. yes Name of the new ZFS pool: lxd Would you like to use an existing block device # 40; yes / no # 41 ;. no Size in GB of the new loop device # 40; 1GB minimum # 41 ;. 10

«Size in GB of the new loop device» - це розмір сховища ZFS. Всі образи і контейнери будуть зберігатися в цьому сховищі, тому якщо ви збираєтеся зберігати багато образів або контейнерів, то потрібно збільшити це число.

Потім утиліта запитає: чи потрібно відкривати доступ до LXD із зовні? Відповідаємо «ні». Якщо ви хочете створити публічний або приватний репозиторій, то потрібно відповісти «так».

Would you like LXD to be available over the network # 40; yes / no # 41 ;. no

Налаштування LXD bridge

Після настройки типу сховища, утиліта запитає: «Чи бажаєте ви сконфігурувати LXD bridge?». Відповідаємо «так».

Do you want to configure the LXD bridge # 40; yes / no # 41 ;. 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.200.0.1 IPv4 CIDR mask: 16 First DHCP address: 10.200.100.1 Last DHCP address: 10.200.255.254 Max number of DHCP clients: 25399 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

Установка статичного IP для контейнера

nano / etc / default / lxd-bridge

Раськоментіруйте рядок LXC_DHCP_CONFILE і пропишіть:

LXD_CONFILE = "/etc/lxd-dnsmasq.conf"

nano / etc / lxd-dnsmasq.conf

dhcp-host = test ,10.200.1.1

Після кожної зміни файлу /etc/lxd-dnsmasq.conf потрібно буде перезавантажувати lxd-bridge командою:

service lxd-bridge restart

Якщо це не допомагає, то потрібно зупинити контейнери з невірними IP, видалити файл dnsmasq.lxdbr0.leases, а потім перезавантажити lxd-bridge:

lxc stop test rm / var / lib / lxd-bridge / dnsmasq.lxdbr0.leases service lxd-bridge restart

Налаштування NAT

Для того, щоб запрацював NAT, виконавши команди:

echo 1> / proc / sys / net / ipv4 / ip_forward echo "Net.ipv4.ip_forward = 1" >> / etc / sysctl.conf

Налаштування Grub

nano / etc / default / grub

GRUB_CMDLINE_LINUX = "Swapaccount = 1 quiet"

Без цього рядка у мене при запуску lxd виходив warning про те що cgroup swap account не працюватиме. Я вирішив включити опцією swapaccount = 1. quiet - це тиха завантаження системи (опціонально)

Додавання LXD в автозапуск

systemctl enable lxd

перезапуск системи

Додайте репозиторій (опціонально, за замовчуванням images вже доданий):

lxc remote add images images.linuxcontainers.org: 8443

centos-image - синонім образу, щоб легше було до нього звертатися

lxc launch local : Centos-image test

test - назва майбутнього контейнера

Можна запускати образи в дві команди:

lxc init local : Centos-image test

lxc start test

Перша команда створить контейнер, а друга його запустить. Перша команда корисна, якщо ви хочете просто створити контейнер, але не запускати його.

Подивіться статус запущених контейнерів

Команда повинна показати наступну інформацію:

Монтування папок не змінює вміст папок / var / lib / lxd / containers / test, а монтується в окрему папку / var / lib / lxd / devices / test. Тому бекапи і знімки контейнера не міститимуть примонтировать папки і файли. Оновлення контейнера з резервної копії або образу не буде зачіпати вміст примонтировать папок.

lxc config show test

Підключення до віртуальної машини

Зайдіть в запущений контейнер test:

lxc exec test -- / Bin / bash

Даний метод створює бекапи контейнерів як LXD образи, готові до імпорту. В ідеалі потрібно створювати знімки і відправляти їх в приватний репозиторій LXD. Але іноді, цього зробити не можна. Наприклад, у невеликій компанії немає можливості купувати ще один сервер. В цьому випадку можна обійтися простим рішенням tar + Amazon S3.

Скачайте готові скрипти для створення і відновлення резервних копій:

wget https: // github.com / vistoyn / lxd_backup / raw / 1.1 / scripts / lxc-backup -O "/ Usr / local / bin / lxc-backup"

wget https: // github.com / vistoyn / lxd_backup / raw / 1.1 / scripts / lxc-restore -O "/ Usr / local / bin / lxc-restore"

Встановіть прапорець виконання для скриптів:

chmod + x / usr / local / Bin / lxc-restore

chmod + x / usr / local / Bin / lxc-backup

Перед створенням і відновленням бекапов потрібно зупинити працює контейнер. Можна, в принципі, робити бекап на працюючому контейнері, але при створенні бекапа можлива втрата деяких даних (залежить від встановлених програм в контейнері).

Дана команда створить бекап контейнера test, стисне файл в архів і збереже його на диску в папці / backup / lxc / test:

lxc stop test

lxc-backup test

Відновлення бекапа зі знімка:

Для ZFS після імені контейнера потрібно додавати «.zfs»

lxc stop test

Відновлення бекапа зі знімка:

lxc-stop test

На новому хості іноді потрібно створити контейнер з резервної копії. Для цього потрібно спочатку імпортувати образ, а потім його запустити як контейнер.

Команда імпорту бекапа як способу LXD:

Команда запуску образу як контейнера:

lxc launch me-new-image test 2

Схожі статті