Перейти к содержанию

Incus

В этой статье

Информация

Incus - это менеджер системных контейнеров и виртуальных машин с открытым исходным кодом. Он представляет собой форк LXD и предоставляет простой и мощный инструмент для управления контейнерами Linux и виртуальными машинами на единой платформе.

Incus. Основные возможности

  • Управление контейнерами и ВМ: Incus позволяет запускать системные контейнеры Linux и полноценные виртуальные машины на базе QEMU/KVM через единый интерфейс.
  • Изоляция процессов: контейнеры работают в изолированном окружении с собственной файловой системой, сетевыми интерфейсами и процессами.
  • Сетевые возможности: встроенная поддержка различных типов сетей - мосты, NAT, VLAN, overlay-сети для контейнеров.
  • Управление хранилищем: гибкая система storage pools с поддержкой различных бэкендов - dir, btrfs, ZFS, LVM.
  • Снимки и миграция: создание снимков состояния контейнеров, live-миграция между хостами без остановки сервисов.
  • Профили конфигурации: переиспользуемые профили для быстрого развертывания контейнеров с заданными параметрами.
  • Ограничение ресурсов: точный контроль CPU, памяти, дискового I/O и сетевой пропускной способности для каждого контейнера.
  • REST API: полнофункциональный HTTP API для автоматизации и интеграции с внешними системами.
  • Веб-интерфейс: встроенная веб-панель управления для визуального контроля над инфраструктурой.
  • Библиотека образов: доступ к обширной коллекции готовых образов различных Linux-дистрибутивов.
  • Кластеризация: возможность объединения нескольких хостов в единый кластер для распределенного управления.

Особенности сборки

ID

Основные пути и файлы Incus:

  • Файл основных настроек: /etc/default/incus
  • Директория данных: /var/lib/incus
  • Пулы хранения: /var/lib/incus/storage-pools/
  • Контейнеры: /var/lib/incus/containers/
  • Образы: /var/lib/incus/images/
  • Файл логов: /var/log/incus/incusd.log
  • Системные сервисы: /usr/lib/systemd/system/incus*.service
  • Конфигурация sysctl: /etc/sysctl.d/50-incus.conf
  • Конфигурация пользователя: /root/.config/incus/

Примечание

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

Начало работы после развертывания Incus

После оплаты заказа на указанную при регистрации электронную почту придет уведомление о готовности сервера к работе. В нем будет указан IP-адрес VPS, а также логин и пароль для подключения. Управление оборудованием клиенты нашей компании осуществляют в панели управления серверами и APIInvapi.

Данные для авторизации, которые можно найти или во вкладке Информация >> Тэги панели управления сервером или в присланном e-mail:

  • Ссылка для доступа к веб-интерфейсу Incus: в теге webpanel (порт 8443, HTTPS)

Важно

Для доступа к веб-интерфейсу необходимо использовать HTTPS и принять самоподписанный сертификат в браузере.

При первом обращении к веб-интерфейсу Incus браузер предупредит о незащищенном соединении из-за самоподписанного сертификата. Необходимо принять сертификат для продолжения работы:

После принятия сертификата откроется страница входа в систему. Нажмите кнопку Login with TLS для начала процесса аутентификации:

Система перенаправит на страницу добавления существующего сертификата:

Выберите вкладку Trust token и следуйте инструкциям:

  1. В терминале сервера выполните команду для генерации токена:

    incus config trust add myclient
    

  2. Система сгенерирует токен, который необходимо скопировать:

  3. Вставьте полученный токен в соответствующее текстовое поле на странице аутентификации и нажмите Import.

После успешной аутентификации откроется главная страница веб-интерфейса со списком экземпляров.

Создание нового контейнера через веб-интерфейс

Для создания нового контейнера нажмите кнопку Create instance в правом верхнем углу интерфейса:

Откроется форма создания экземпляра с несколькими разделами конфигурации. Для выбора базового образа нажмите кнопку Browse images. Откроется окно выбора образа с фильтрами по дистрибутиву, релизу, варианту, архитектуре и типу:

Доступны следующие разделы конфигурации:

  • Main configuration — основные параметры контейнера: имя, описание, тип экземпляра (контейнер или виртуальная машина), базовый образ и назначенные профили;
  • Devices — управление устройствами контейнера:
  • Disk — настройка дисковых устройств и точек монтирования;
  • Network — конфигурация сетевых интерфейсов;
  • GPU — подключение графических ускорителей;
  • Proxy — настройка проброса портов между хостом и контейнером;
  • Other — дополнительные типы устройств;
  • Resource limits — ограничение ресурсов: процессор (CPU), оперативная память (RAM), дисковые операции ввода-вывода;
  • Security policies — политики безопасности: настройка изоляции, привилегий и профилей безопасности (AppArmor, SELinux);
  • Snapshots — управление снимками состояния контейнера для резервного копирования и восстановления;
  • Migration — параметры миграции контейнера между хостами;
  • Boot — настройки загрузки: порядок загрузочных устройств, автозапуск при старте системы;
  • Cloud init — конфигурация автоматической инициализации контейнера через cloud-init (пользователи, сеть, пакеты, скрипты).

Выберите нужный образ, нажав кнопку Select напротив него:

После выбора образа заполните основные параметры:

  • Instance name — имя контейнера;
  • Description — описание (необязательно);
  • Instance type — тип экземпляра (Container или Virtual Machine);
  • Profiles — профили конфигурации.

Для запуска контейнера сразу после создания нажмите Create and start. Для создания без запуска используйте кнопку Create.

Мониторинг состояния контейнеров

Во время развертывания контейнера отображается прогресс загрузки образа. Статус "Setting up" с индикацией процесса загрузки показывает текущий прогресс создания экземпляра. После завершения установки статус изменится на "Running" с зеленым индикатором:

Управление сервисом

Проверка статуса:

systemctl status incus

Перезапуск сервиса:

systemctl restart incus

Остановка сервиса:

systemctl stop incus

Запуск сервиса:

systemctl start incus

Просмотр логов:

journalctl -u incus -f
tail -f /var/log/incus/incusd.log

Первоначальная настройка инфраструктуры

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

Создание пула хранения

Пул хранения определяет, где будут храниться данные контейнеров:

incus storage create default dir source=/var/lib/incus/storage-pools/default

Проверка созданных пулов хранения:

incus storage list

Для просмотра подробной информации о пуле:

incus storage show default

Настройка сети

Создание NAT-моста для контейнеров с автоматической IPv4-адресацией:

incus network create incusbr0 ipv4.address=auto ipv6.address=none

Проверка сетевых настроек:

incus network list

Просмотр конфигурации сети:

incus network show incusbr0

Настройка профиля по умолчанию

Профиль default определяет базовую конфигурацию для новых контейнеров. Добавление root-диска в профиль:

incus profile device add default root disk path=/ pool=default

Добавление сетевого интерфейса в профиль:

incus profile device add default eth0 nic network=incusbr0

Проверка конфигурации профиля:

incus profile show default

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

Создание контейнера

Пример создания контейнера Debian 12 с ограничением ресурсов:

incus launch images:debian/12 deb12 --profile default \
  -c limits.cpu=2 -c limits.memory=2GiB

Параметры команды: - images:debian/12 - образ из публичного репозитория - deb12 - имя контейнера - --profile default - использование профиля по умолчанию - -c limits.cpu=2 - ограничение на 2 ядра CPU - -c limits.memory=2GiB - ограничение памяти 2 ГБ

Просмотр контейнеров

Список всех инстансов:

incus list

Вывод будет содержать информацию о состоянии, IP-адресах и типе каждого контейнера.

Управление состоянием контейнеров

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

incus start <name>

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

incus stop <name>

Перезапуск контейнера:

incus restart <name>

Удаление контейнера (требуется остановка):

incus delete <name>

Принудительное удаление работающего контейнера:

incus delete <name> --force

Доступ к контейнеру

Подключение через bash:

incus exec deb12 -- bash

Подключение к консоли TTY:

incus console deb12

Для выхода из консоли используйте комбинацию клавиш Ctrl+a q.

Проброс портов

Для доступа к сервисам внутри контейнера из внешней сети используется механизм проброса портов через proxy-устройство:

incus config device add deb12 web proxy \
  listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80

Эта команда пробрасывает порт 8080 хоста на порт 80 контейнера.

Пример для нескольких портов:

HTTP:

incus config device add mycontainer http proxy \
  listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80

HTTPS:

incus config device add mycontainer https proxy \
  listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443

SSH:

incus config device add mycontainer ssh proxy \
  listen=tcp:0.0.0.0:2222 connect=tcp:127.0.0.1:22

Управление конфигурацией контейнеров

Просмотр конфигурации

Просмотр полной развернутой конфигурации контейнера:

incus config show <name> --expanded

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

incus config show <name>

Изменение параметров

Установка параметров конфигурации:

Ограничение CPU:

incus config set <name> limits.cpu=4

Ограничение памяти:

incus config set <name> limits.memory=4GiB

Ограничение дискового I/O:

incus config set <name> limits.disk.priority=5

Автозапуск контейнера:

incus config set <name> boot.autostart=true

Добавление устройств

Общий синтаксис добавления устройств:

incus config device add <name> <device-name> <type> key=value

Примеры:

Добавление дополнительного диска:

incus config device add mycontainer data disk \
  source=/data/mycontainer pool=default

Добавление дополнительного сетевого интерфейса:

incus config device add mycontainer eth1 nic \
  network=incusbr1 name=eth1

Монтирование директории хоста в контейнер:

incus config device add mycontainer shared disk \
  source=/host/path path=/container/path

Удаление устройства:

incus config device remove <name> <device-name>

Работа со снимками и миграция

Создание снимков

Снимки позволяют сохранить состояние контейнера для последующего восстановления:

incus snapshot <name> <snapshot-name>

Пример:

incus snapshot deb12 before-update

Список снимков контейнера:

incus info <name>

Восстановление из снимка

incus restore <name> <snapshot-name>

Пример:

incus restore deb12 before-update

Удаление снимка:

incus delete <name>/<snapshot-name>

Переименование и копирование

Переименование контейнера:

incus move <name> <newname>

Копирование контейнера на том же хосте:

incus copy <name> <newname>

Копирование контейнера на другой Incus-хост:

incus copy <name> <remote>:<newname>

Для работы с удаленными хостами необходимо предварительно добавить remote:

incus remote add myremote https://remote-ip:8443

Управление образами

Просмотр образов

Список локальных образов:

incus image list

Список образов в удаленном репозитории:

incus image list images:

Поиск конкретного дистрибутива:

incus image list images: debian
incus image list images: ubuntu

Копирование образов

Копирование образа из публичного репозитория с автообновлением:

incus image copy images:debian/12 local: --auto-update

Копирование образа с алиасом:

incus image copy images:debian/12 local: --alias debian12

Создание образа из контейнера

incus publish <container-name> --alias my-custom-image

Удаление образов

incus image delete <image-fingerprint>

или по алиасу:

incus image delete <alias>

Сетевое взаимодействие

Управление сетями

Список сетей:

incus network list

Просмотр конфигурации сети:

incus network show <network-name>

Создание новой сети:

# Создание bridge-сети
incus network create mybr0 \
  ipv4.address=10.10.10.1/24 \
  ipv4.nat=true \
  ipv6.address=none

# Создание macvlan-сети
incus network create mymacvlan \
  type=macvlan \
  parent=eth0

Редактирование сети:

incus network edit <network-name>

Удаление сети:

incus network delete <network-name>

Сетевые forwarding правила

Создание forwarding правила для проброса портов:

incus network forward create incusbr0 <external-ip>
incus network forward port add incusbr0 <external-ip> tcp 80 <container-ip> 80

Управление хранилищем

Управление пулами хранения

Список пулов:

incus storage list

Просмотр информации о пуле:

incus storage show <pool-name>

Создание пула хранения:

Dir-based пул:

incus storage create mypool dir source=/var/lib/incus/pools/mypool

Btrfs пул:

incus storage create mybtrfs btrfs source=/dev/sdb

ZFS пул:

incus storage create myzfs zfs source=/dev/sdc

Редактирование пула:

incus storage edit <pool-name>

Удаление пула:

incus storage delete <pool-name>

Управление томами

Создание пользовательского тома:

incus storage volume create <pool-name> <volume-name>

Список томов в пуле:

incus storage volume list <pool-name>

Подключение тома к контейнеру:

incus config device add <container> <device-name> disk \
  pool=<pool-name> \
  source=<volume-name> \
  path=/mount/path

Копирование тома:

incus storage volume copy <pool>/<volume> <pool>/<new-volume>

Удаление тома:

incus storage volume delete <pool-name> <volume-name>

Настройка NAT и маршрутизации

В некоторых случаях может потребоваться ручная настройка NAT и правил маршрутизации для обеспечения сетевого доступа контейнеров к внешней сети.

Переключение на nftables

update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
update-alternatives --set arptables /usr/sbin/arptables-nft
update-alternatives --set ebtables /usr/sbin/ebtables-nft

Включение IP forwarding

sysctl -w net.ipv4.ip_forward=1

Для постоянного применения добавьте в /etc/sysctl.conf:

net.ipv4.ip_forward=1

Перезапуск Incus после изменений:

systemctl restart incus

Настройка NAT таблицы

Создание NAT таблицы и цепочки POSTROUTING:

nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority srcnat; }'

Добавление правила masquerade для подсети контейнеров:

nft add rule ip nat POSTROUTING oifname "ens1" ip saddr 10.1.4.0/24 counter masquerade

Примечание

Замените ens1 на имя вашего внешнего сетевого интерфейса и 10.1.4.0/24 на подсеть вашего моста Incus.

Настройка FORWARD цепочки

Создание filter таблицы и цепочки FORWARD:

nft add table ip filter
nft add chain ip filter FORWARD '{ type filter hook forward priority 0; policy accept; }'

Добавление правил для пропуска трафика:

Разрешить трафик из контейнеров наружу:

nft insert rule ip filter FORWARD iifname "incusbr0" oifname "ens1" accept

Разрешить established/related трафик обратно:

nft insert rule ip filter FORWARD iifname "ens1" oifname "incusbr0" ct state established,related accept

Проверка правил nftables

Просмотр всех правил:

nft list ruleset

Сохранение правил (для Debian/Ubuntu):

Установка пакета для сохранения правил:

apt-get install nftables

Сохранение текущих правил:

nft list ruleset > /etc/nftables.conf

Включение автозагрузки:

systemctl enable nftables

Примечание

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

Заказ Incus с помощью API

Для установки данного ПО с использованием API следуйте этой инструкции.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×