LXC/LXD-контейнеры в продакшене: полный гайд — АйТи Фреш
· 17 мин чтения

LXC/LXD-контейнеры в продакшене: кластеры, сети, снапшоты и миграция для серьёзных инсталляций

LXC/LXD-контейнеры в продакшене: кластеры, сети, снапшоты и миграция для серьёзных инсталляций

Привет! Это Евгений Семенов, директор ITFresh. У меня за плечами больше пятнадцати лет в линукс-инфраструктуре, и поверьте, за это время я повидал всякое. Мы начинали с ранних OpenVZ в начале десятых, работали с чистым LXC, а теперь уверенно разворачиваем мощные промышленные LXD-кластеры на Ubuntu Server LTS. Вот, например, у нас в дата-центре МТС стоят два узла Dell Xeon Platinum 8280 с 40G Mellanox. Они объединены в единый, крепкий LXD-кластер, который без труда держит нагрузку от сотни с лишним клиентских сервисов. И знаете, что самое интересное? Эта система порой стабильнее многих K8s-инсталляций того же масштаба. Просто бомба!

LXC, LXD, Incus — что именно ставить в 2026 году

В мире LXD произошли кое-какие пертурбации, после того как проект перешёл под крыло Canonical. Сообщество не стало мириться с этим, и в 2023 году ребята сделали форк – так родился Incus, теперь им рулит организация Linux Containers. Что в итоге? Оба проекта живут и здравствуют, развиваются параллельно. По части CLI они вполне совместимы, но, конечно, в деталях есть свои нюансы и отличия. Стоит их знать!

На наших новых проектах мы всегда ставим LXD из snap. Только Ubuntu Server 22.04 LTS! Это уже проверенный стандарт, обкатанный на миллионах инсталляций по всему миру.

Установка и первичная инициализация

# Ubuntu 22.04 LTS
sudo apt update
sudo snap install lxd --channel=5.21/stable
sudo usermod -aG lxd $USER
newgrp lxd

# Инициализация
lxd init

# Ключевые вопросы lxd init:
# - Configure the storage pool: zfs
# - Pool device: /dev/sdb (отдельный диск под данные)
# - Configure a new local network bridge: yes, lxdbr0
# - Subnet: 10.100.0.0/24
# - IPv6: none

Завершили init – и что дальше? Получаете готовую инсталляцию: тут вам и storage pool на ZFS, и дефолтный профиль, и сетевой бридж. А вот на продакшене мы всегда физически разделяем rootfs хоста и storage pool. Rootfs летит на SSD, а контейнеры — строго на отдельный пул из NVMe или SAS-дисков в raidz. Так надёжнее, и производительность выше.

Создание контейнеров и запуск

# Список доступных образов
lxc remote list
lxc image list ubuntu: | head -20

# Создать контейнер
lxc launch ubuntu:22.04 web01
lxc launch ubuntu:22.04 web02

# Запустить команду внутри
lxc exec web01 -- apt update
lxc exec web01 -- apt install -y nginx

# Получить оболочку
lxc shell web01

# Список, статус, сеть
lxc list
lxc info web01 --show-log

Профили: правильный способ управления конфигурацией

Профиль в LXD — это набор настроек (сеть, диск, лимиты, security), который можно применить к любому контейнеру. Это главный инструмент DRY в LXD. У нас на практике я создаю профили под типовые роли: web, db, mail-relay, worker — и новые контейнеры получают настройки мгновенно.

# Создать профиль
lxc profile create web

# Задать лимиты через YAML
cat <<EOF | lxc profile edit web
config:
  limits.cpu: "2"
  limits.memory: 2GB
  limits.memory.swap: "false"
  boot.autostart: "true"
  security.nesting: "false"
devices:
  eth0:
    type: nic
    network: lxdbr0
  root:
    type: disk
    pool: default
    path: /
    size: 10GB
EOF

# Применить профиль
lxc profile add web01 web
lxc launch ubuntu:22.04 web03 -p default -p web

Сети: bridge, macvlan, OVN

LXD умеет работать с тремя сетевыми моделями. Какую выбрать? Всё зависит от ваших требований, конечно.

ТипКогда использоватьПлюсыМинусы
bridge (lxdbr0)Дефолт, dev-средыПростота, NAT, DHCPНужен проброс портов
macvlanКонтейнер в сети офисаПрямой IP, видно по L2Нельзя с хостом общаться
OVNКластеры, overlayL3-сегменты, ACL, VRFСложность настройки
# macvlan
lxc network create officenet --type=macvlan parent=eno1
lxc config device add web01 eth0 nic nictype=macvlan parent=eno1

# OVN (требует предустановленного OVN-кластера)
lxc network create ovn1 --type=ovn network=UPLINK
lxc network set ovn1 ipv4.address=10.200.0.1/24

Кластеризация: объединяем три узла

LXD-кластер – это просто киллер-фича для по-настоящему серьёзных инсталляций. Представьте: один набор команд, а управляет всеми узлами! Контейнеры распределяются сами, как по волшебству. Плюс ZFS-снапшоты всегда под рукой для миграции.

# На первом узле
lxc cluster enable node01

# На втором и третьем — повторить lxd init,
# указав "Are you joining an existing cluster? yes"
# и введя trust token, полученный через
lxc cluster add node02
# Скопировать join-token и вставить при инициализации

# Посмотреть узлы
lxc cluster list

# Создать контейнер с выбором узла
lxc launch ubuntu:22.04 db01 --target node02

Вот тут будьте внимательны: в кластере storage pool типа dir или zfs обязательно должен быть локальным на каждом отдельном узле. А если вам нужно общее хранилище, тогда ваш выбор – Ceph или любой remote storage.

Снапшоты и бэкапы

ZFS-снапшоты в LXD – это просто копейки! Мы всегда настраиваем автоматическую ротацию прямо перед любыми апдейтами. Удобно, быстро и безопасно.

# Создать снапшот
lxc snapshot web01 before-upgrade-2026-04-17

# Откатиться
lxc restore web01 before-upgrade-2026-04-17

# Автоматические снапшоты через профиль
lxc config set web01 snapshots.schedule "0 3 * * *"
lxc config set web01 snapshots.expiry "14d"

# Экспорт контейнера в tar.gz
lxc export web01 /backup/web01-$(date +%F).tar.gz

# Импорт на другой узел
lxc import /backup/web01-2026-04-17.tar.gz

Миграция между узлами

# Stopped-миграция между узлами кластера
lxc move web01 --target node03

# Cross-cluster с другим LXD
lxc remote add remote-hq 192.168.50.10 --password SECRET
lxc copy web01 remote-hq:web01-copy

# Live migration (экспериментально, нужен CRIU)
lxc move web01 --target node02 --mode=pull

Кейс: консолидация 22 сервисов на двух-узловой кластер

История из нашей практики: осенью 2025 года к нам обратилось проектное бюро. Представляете, 65 рабочих мест и 22 (!) разрозненных линукс-сервиса, всё это болталось на восьми старых HP DL360 G7. Цель была амбициозной: собрать всё на паре свежих узлов и, конечно, предусмотреть запас на будущее. Что мы сделали? Взяли два мощных Dell Xeon Platinum 8280, на каждый по 256 ГБ DDR4, плюс по 8 NVMe U.2 в raidz2. Связали их 40G Mellanox в кросс-соединении, накатили Ubuntu 22.04 LTS и LXD 5.21. Решение было элегантным.

Архитектура:

Что в итоге? Все 22 сервиса мы перенесли всего за 6 рабочих дней, при этом uptime во время миграций ни разу не опускался ниже 99,8%! Клиент получил колоссальную экономию: 140 000 рублей в год только на электричестве, плюс освободили 8 юнитов стойки. А цикл развёртывания нового сервиса? Вместо двух дней — теперь 20 минут! Весь проект обошёлся в 320 000 рублей. Неплохо, правда?

Мониторинг и типовые грабли

Развёртывание LXD-кластеров под ключ

Проектирую и настраиваю LXD/Incus-кластеры на Ubuntu Server LTS с ZFS и OVN, миграцию с виртуалок, интеграцию с системой бэкапов. Работа с хостингом в дата-центре МТС или на собственном железе клиента.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — LXC/LXD в продакшене

Чем LXD отличается от LXC?
LXC — низкоуровневая библиотека. LXD — демон поверх LXC с REST API, кластеризацией, профилями и удобной CLI.
Какой storage pool выбрать?
Для продакшена ZFS — снапшоты, сжатие, репликация.
Сколько контейнеров помещается на узел?
На Dell Xeon Platinum 8280 с 256 ГБ RAM — до 180 рабочих контейнеров. Узкое место — лимиты ядра.
Работает ли live migration?
Да, через CRIU, но с ограничениями. Для stateful-сервисов надёжнее stopped-миграция с репликацией ZFS.
Можно ли Windows внутри LXD?
Нет, только Linux. Для Windows используйте LXD Virtual Machines (KVM под управлением LXD).

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды, которые будут по-настоящему полезны руководителям IT и системным администраторам. Что там? Всё, что волнует: безопасность, тонкости работы с 1С, успешные миграции, надёжные резервные копии и, конечно, живые лайфхаки прямо из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.