Установка и использование LXD на Linux

Используемые термины: LXD, Linux.
В рамках данной инструкции мы рассмотрим установку LXD на различные дистрибутивы Linux, а также основные команды для работы с ним.
Установка LXD на Linux
DEB (Ubuntu / Debian)
RPM (РЕД ОС)
Сборка из исходников
Начальный запуск
Примеры команд
Для получения информации
Работа с контейнерами
Читайте также
Установка LXD
Рассмотрим несколько вариантов систем на основе DEB и RPM.
Ubuntu / Debian
Установка может быть выполнена из встроенного репозитория:
apt update
apt install lxd
РЕД ОС
Установка может быть выполнена из встроенного репозитория:
yum install lxd
Разрешаем и запускаем сервис:
systemctl enable lxd --now
Сборка из исходников (Astra Linux, Ubuntu, Rocky Linux)
В репозиториях некоторых дистрибутивов Linux может не быть пакета lxd. Например, в Rocky (RPM-base) и Astra (DEB-base).
В инструкциях по установки для этих систем рекомендуется использовать snap, но мы рассмотрим вариант установки из исходников.
Нам понадобятся некоторые пакеты для работы:
- git — для загрузки исходников с официального сайта.
- make — для сборки.
- attr — позволяет управлять расширенными атрибутами файловой системы. Нужен для запуска и работы lxd.
- dnsmasq — пакет, позволяющий развернуть DNS-сервер с дополнительными возможностями, на вроде, подмены адреса по условию, маршрутизации dns-запросов и другими. Нужен для инициализации и работы lxd.
В зависимости от дистрибутива, для установки используем разные команды:
а) RPM-base:
dnf install git make attr dnsmasq
б) DEB-base:
apt install git make attr dnsmasq
Система может вернуть ошибку запуска dnsmasq. Как правило, это из-за того, что 53 порт занят службой systemd-resolved. Отключаем ее:
systemctl disable systemd-resolved --now
Теперь можно запустить dnsmasq:
systemctl start dnsmasq
Также нам нужны пакеты для сборки.
Их мы также будем устанавливать разными командами для разных типов Linux.
а) RPM-base:
dnf install --enablerepo=powertools autoconf automake go libtool lz4-devel sqlite-devel libuv libcap-devel ShellCheck libacl-devel libudev-devel lxc-devel libuv-devel
б) DEB-base:
apt install autoconf automake golang libtool liblz4-dev libsqlite3-dev libuv1 libuv1-dev libcap-dev shellcheck libacl1-dev libudev-dev lxc-dev
Необходимые пакеты установлены. Идем дальше.
Проверяем версию go:
go version
Она должна быть выше версии 1.16.
Если версия golang ниже, то выполняем следующие действия.
На странице разработчика копируем ссылку на последнюю версию go. С помощью скопированной ссылки качаем архив:
wget https://go.dev/dl/go1.19.4.linux-amd64.tar.gz
Распакуем архив:
tar xzf go*.tar.gz -C /usr/local
Откроем на редактирование файл:
vi /etc/profile
И добавим в него:
GOROOT=/usr/local/go
GOPATH=~/.go
PATH=$PATH:$GOROOT/bin:$GOPATH/binИ применим данные настройки:
source /etc/profile
Чтобы использовался по умолчанию новый go, вводим две команды:
update-alternatives --install "/usr/bin/go" "go" "/usr/local/go/bin/go" 0
update-alternatives --set go /usr/local/go/bin/go
Снова проверяем версию go:
go version
Копируем проект:
git clone https://github.com/lxc/lxd
Переходим в загруженный каталог:
cd lxd/
Собираем зависимые файлы и библиотеки:
make deps
В итоге, мы должны увидеть просьбу использовать следующие системные переменные:
export CGO_CFLAGS="-I/root/go/deps/raft/include/ -I/root/go/deps/dqlite/include/"
export CGO_LDFLAGS="-L/root/go/deps/raft/.libs -L/root/go/deps/dqlite/.libs/"
export LD_LIBRARY_PATH="/root/go/deps/raft/.libs/:/root/go/deps/dqlite/.libs/"
export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
Данные опции могут иметь разные значения в зависимости от операционной системы. Скопируйте и вставьте те строки, которые вам вернул сборщик.
Собираем lxd:
make
В итоге, мы должны увидеть сообщение:
LXD built successfully
Скопируем полученную сборку в каталог /opt:
mv $(go env GOPATH) /opt/lxd
Создадим конфигурационный файл для добавления пути в системную переменную PATH:
vi /etc/profile.d/lxd.sh
export PATH="${PATH}:/opt/lxd/bin"
Создаем файл для добавления пути к динамическим библиотекам, нужным для работы lxd:
vi /etc/ld.so.conf.d/lxd.conf
/opt/lxd/deps/dqlite/.libs
/opt/lxd/deps/raft/.libs
Применяем настройку для динамических библиотек:
ldconfig
Для старта сервиса lxd создадим юнит:
vi /etc/systemd/system/lxd.service
[Unit]
Description=LXD Service
After=network.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/opt/lxd/bin/lxd
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Разрешим автозапуск и стартуем сервис:
systemctl enable lxd --now
Проверим состояние:
systemctl status lxd
Инициализация после установки
Если мы собирали LXD из исходников, нам нужно применить настройки PATH, которые были указаны в файле каталога profile.d. Для этого либо перезайдем под пользователем root:
sudo su -
* на конце - обязателен.
Либо вводим:
source /etc/profile.d/lxd.sh
Теперь вводим команду для инициализации lxd:
lxd init
Программа работает в интерактивном режиме и начнем задавать вопросы. Можно ответить по умолчанию, нажав Enter или дать свои ответы:
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 (dir, lvm) [default=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]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
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]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Если инициализация пройдет успешно, система должна вернуть пустую строку.
Для завершения настройки, открываем файл:
vi /etc/subuid
И добавляем:
root:1000000:1000000000
lxd:1000000:1000000000
И также с файлом:
vi /etc/subgid
root:1000000:1000000000
lxd:1000000:1000000000
Основные команды
Разобьем команды на группы.
Получение информации
1. Список контейнеров:
lxc list
2. Серверы, с которых можно получить образы:
lxc remote list
3. Список образов, доступных для загрузки и использования:
lxc image list <сервер>:
Например:
lxc image list images:
Список конкретных образов:
lxc image list <сервер>: <название образа>
Например, для Ubuntu:
lxc image list images: ubuntu
4. Получить информацию о контейнере:
lxc info <имя контейнера>
Например:
lxc info rockylinux/8
5. Посмотреть лог контейнера:
lxc info --show-log <контейнер>
Работа с контейнерами
1. Создание и запуск контейнера на основе образа:
lxc launch <сервер>:<имя образа> <как назвать контейнер>
Например:
lxc launch images:rockylinux/8 rocky
2. Запуск / Перезапуск / Остановка / Приостановка:
lxc <команда> <контейнер>
Например:
lxc start ubuntu
lxc restart rockylinux
lxc stop debian
lxc pause centos
3. Редактирование конфигурации:
lxc config edit <контейнер>
Например:
lxc config edit rocky
4. Подключиться к контейнеру:
lxc exec <контейнер> <оболочка>
Например:
lxc exec rocky bash
Читайте также
Другие инструкции по схожей тематике: