Установка, настройка и работа с LXD в Linux

Оцените статью

Последний раз с LXC/LXD я работал около пяти лет назад и последнее время работал или с полноценной виртуализацией на базе VmWare или Proxmox, или контейнерами Docker и система оркестрации контейнеров такими как Kubernetes.

Сейчас возникла необходимость разделить небольшой VPS-сервер на несколько внутренних виртуальных машин. Причем докер мне там не подойдет из-за специфичных задач сетевой организации проекта, а полноценные VM я, во-первых, не смогу реализовать так как это и так VPS, во вторых это огромный оверхэд для моей миниатюрной VPS.

Как написано в официальной документации:

LXD is an open source solution for managing virtual machines and system containers. It provides a secure and scalable environment with minimal overhead. Manage your workloads with ease and configure them to suit your use case via a user-friendly web interface.

И вот тут нас все устраивает и мы получим почти полноценные виртуальные машины (некоторые ограничения там все же есть, так как используется общее ядро хоста), минимальный overhead и даже какой-то веб-интерфейс которого как я помню раньше не было.

Установка LXD

Как я уже говорил, сервачок у меня маленький и хиленький.

Операционная система Ubuntu 24.04.2.

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.2 LTS
Release:        24.04
Codename:       noble

Установка происходит при помощи SNAP. И если snap у вас на сервере не установлен, то выполняем следующие операции.

# apt install snapd

Собственно установка.

# snap install lxd

Запускаем мастер инициализации конфигурации и вносим базовые настройки.

# lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: 
Name of the storage backend to use (zfs, btrfs, ceph, dir, lvm, powerflex) [default=zfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: 
Would you like the LXD server to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: yes
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

Итого при такой настройке мы имеем:

  • Отключена кластеризация
  • Хранилище default просто файловое
  • MAAS отключен
  • Доступ к управляющему интерфейсу по сети отключен
  • Включено авто обновление базовых образов

Управление LXD из консоли

Запуск первого LXC контейнера в LXD

# lxc launch ubuntu:22.04 test-container

Таким образом создаем контейнер с именем test-container содержащий ubuntu:22.04 образ которой будет загружен с официального зеркала LXC. Дополнительно можно указать лимиты по потребляемым ресурсам -c limits.cpu=2 -c limits.memory=8GiB

Список и статус LXC контейнеров на локальном узле LXD

# lxc ls
+----------------+---------+------+------+-----------+-----------+
|      NAME      |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+----------------+---------+------+------+-----------+-----------+
| test-container | RUNNING |      |      | CONTAINER | 0         |
+----------------+---------+------+------+-----------+-----------+

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

# lxc stop test-container

Принудительная остановка.

# lxc stop -f test-container

Запуск контейнера

# lxc start test-container

Удаление контейнера

# lxc delete test-container

Подключиться к консоли контейнера

# lxc console test-container

Выход из консоли <ctrl>+a q

Запуск команды в контейнере

# lxc exec test-container /bin/bash

Прочие команды управления LXD-узлом

Все команды более чем логичные и с подробной справкой на каждую команду.

  •  alias – Manage command aliases
  •  auth – Manage user authorization
  •  cluster – Manage cluster members
  •  completion – Generate the autocompletion script for the specified shell
  •  config – Manage instance and server configuration options
  •  console – Attach to instance consoles
  •  copy – Copy instances within or in between LXD servers
  •  delete – Delete instances and snapshots
  •  exec – Execute commands in instances
  •  export – Export instance backups
  •  file – Manage files in instances
  •  help – Help about any command
  •  image – Manage images
  •  import – Import instance backups
  •  info – Show instance or server information
  •  init – Create instances from images
  •  launch – Create and start instances from images
  •  list – List instances
  •  monitor – Monitor a local or remote LXD server
  •  move – Move instances within or in between LXD servers
  •  network – Manage and attach instances to networks
  •  operation – List, show and delete background operations
  •  pause – Pause instances
  •  profile – Manage profiles
  •  project – Manage projects
  •  publish – Publish instances as images
  •  query – Send a raw query to LXD
  •  rebuild – Rebuild instances
  •  remote – Manage the list of remote servers
  •  rename – Rename instances and snapshots
  •  restart – Restart instances
  •  restore – Restore instances from snapshots
  •  snapshot – Create instance snapshots
  •  start – Start instances
  •  stop – Stop instances
  •  storage – Manage storage pools and volumes
  •  version – Show local and remote versions
  •  warning – Manage warnings

Настройка сети для LXD-узла

Как вы наверное обратили внимание, на этапе инициализации я отменил настройку сети и теперь у меня при инициализации контейнера появляется предупреждение.

Launching test-container
                                                     
The instance you are starting doesn't have any network attached to it.
  To create a new network, use: lxc network create
  To attach a network to an instance, use: lxc network attach

В моем случае это нормально, так как сеть у меня будет немного хитрее, чем сеть по умолчанию. Сеть можно создать через удобный Web-интерфейс установку и настройку которого мы рассмотрим чуть позже, а пока мы создадим нужную мне сеть руками.

Установим дополнительные пакеты.

# apt install net-tools bridge-utils

Сеть будет типа мост без выделения пула адресов и адресация контейнеров будет статическая, как и адрес на сетевом мосту.

Конфигурация интерфейса типа мост без входящих в него по умолчанию интерфейсов, но с назначенным ip-адресом.

  bridges:
    lxd-br:
      addresses:
      - "10.101.5.1/24"

Проверяем и применяем.

# netplan try --config-file ./50-cloud-init.yaml

Создаем интерфейс в контейнере и подключаем его к созданному нами мосту.

 # lxc config device add test-container eth0 nic nictype=bridged parent=lxd-br name=eth0

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

# lxc exec test-container /bin/bash
# ip a add 10.101.5.2/255.255.255.0 dev eth0
# ping 10.101.5.1
# exit
# ping 10.101.5.2

Следующим этапом необходимо настроить шлюз по умолчанию в контейнере, настроить на хосте необходимую связь с моей инфраструктурой и NAT в интернет, что бы можно было выходить из контейнера в интернет и получать доступ к контейнерам из моей инфраструктуры, но это уже выходит за рамки этой заметки.

Настройка WEB-интерфейса для LXD

В современных версиях LXD web-интерфейс уже входит в поставку и его надо лишь настроить.

# snap set lxd ui.enable=true
# lxc config set core.https_address 127.0.0.1:8443
# systemctl reload snap.lxd.daemon

Веб-интерфейс я сделал доступным только на localhost и внешний доступ через проброс портов ssh.

$ ssh -L 8443:127.0.0.1:8443 root@92.246.129.81
LXD Web UI

Из минусов самоподписанные сертификаты.

Настройка авторизации по сертификатам

Генерируем сертификат через Web-интерфейс.

Создание сертификата

Загружаем сформированный сертификат копируем его на LXD хост и импортируем.

$ scp ./Downloads/lxd-ui-127.0.0.1.crt root@92.246.129.81:/tmp/
$ ssh root@92.246.129.81
# lxc config trust add /tmp/lxd-ui-127.0.0.1.crt
# exit

Загружаем PFX и импортируем его в браузер по инструкции.

Импорт в Chrome по адресу chrome://certificate-manager/clientcerts/platformclientcerts

Загрузка PFX

Используем сертификат для авторизации.

Выбор сертификата для авторизации

Радуемся удобному WEB-интерфейсу.

Удобный WEB-интерфейс для LXD

Related Posts

Настройка WP Mail SMTP для работы с Yandex 360 (WordPress)

Я уже рассказывал как настроить различные способы отправки электронной почты используя разного рода локальные почтовые сервера или mail-relay, но это скажем так небольшой overhead и если вам надо настроить разного…

Сброс MikroTik до заводских настроек

Казалось бы, что может быть проще и для этого нам понадобится только карандаш, но как всегда есть небольшие нюансы. Стоит отметить, что: Дополнительно выкладываю небольшую видео-инструкцию.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Возможно вы пропустили

Настройка WP Mail SMTP для работы с Yandex 360 (WordPress)

Настройка WP Mail SMTP для работы с Yandex 360 (WordPress)

Сброс MikroTik до заводских настроек

Сброс MikroTik до заводских настроек

Полезные плагины для VsCode

Полезные плагины для VsCode

Маленькое путешествие в Томск

Маленькое путешествие в Томск

Настройка Proxy/VPN сервера (Часть вторая SOCKS5)

Настройка Proxy/VPN сервера (Часть вторая SOCKS5)

Ого! На этой версии реинкарнации моего блога я написал уже 150 статей.

Ого! На этой версии реинкарнации моего блога я написал уже 150 статей.