Установка, настройка и работа с 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

Монтирование каталога в контейнер

# lxc config device add srv-lxc-web-01 backup disk source=/backup path=/backup

Прочие команды управления 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

Похожие записи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS