Incus

Материал из ALT Linux Wiki

Incus — это форк проекта LXD, который был создан после того, как компания Canonical (разработчик Ubuntu) объявила о прекращении активной разработки и поддержки LXD в версии 4.0. Incus — это современная, безопасная и мощная система управления контейнерами и менеджер виртуальных машин, предлагающая удобный и высокоуровневый интерфейс для работы с контейнерами, основанными на технологии LXC. Он поддерживает контейнеризацию, виртуализацию, настройки сетей и хранилищ, а также предоставляет REST API для автоматизации и интеграции. Incus стремится быть открытым и независимым от Canonical, сохраняя совместимость с LXD.

Установка и настройка

  1. Установить сам incus, агент для запуска виртуальных машин incus-agent и эмулятор аппаратного обеспечения qemu:
    # apt-get install -y incus incus-agent qemu
    
  2. Включить сервис incus:
    # systemctl enable --now incus
    
    После установки создаcтся две группы:
    incus — предоставляет базовый пользовательский доступ,
    incus-admin — обеспечивает полный контроль над Incus.
  3. Создать пользователя для управления Инкусом, например testuser и предоставить ему полный контроль:
    # useradd testuser
    # usermod -aG incus-admin testuser
    
  4. Переключиться на пользователя testuser:
    # su - testuser
    
  5. Incus требует некоторой начальной настройки сети и хранилища.
    Это можно сделать в интерактивном режиме:
    $ incus admin init
    
    Или же базовая автоматизированная конфигурация:
    $ incus admin init --minimal
    

Запуск

Посмотреть доступные образы ALT (для архитектур x86_64 и aarch64) на images.linuxcontainers.org:

$ incus image list images:alt

Примерный вывод:

alt/Sisyphus (3 more) a6bb3268c7a1 yes Alt Sisyphus amd64 (20241227_01:17) x86_64 CONTAINER 227.27MB 2024/12/27 00:00 UTC
alt/Sisyphus/arm64 (1 more) 4d860461a016 yes Alt Sisyphus arm64 (20241227_01:17) aarch64 CONTAINER 177.23MB 2024/12/27 00:00 UTC
alt/Sisyphus/cloud (1 more) 62d0664ce372 yes Alt Sisyphus amd64 (20241227_01:17) x86_64 CONTAINER 183.37MB 2024/12/27 00:00 UTC
alt/Sisyphus/cloud/arm64 143672c92ab2 yes Alt Sisyphus arm64 (20241227_01:17) aarch64 CONTAINER 183.72MB 2024/12/27 00:00 UTC
alt/p10 (3 more) b6674565b63b yes Alt p10 amd64 (20241227_01:17) x86_64 CONTAINER 231.58MB 2024/12/27 00:00 UTC
alt/p10/arm64 (1 more) 864957bdb260 yes Alt p10 arm64 (20241227_01:17) aarch64 CONTAINER 182.66MB 2024/12/27 00:00 UTC
alt/p10/cloud (1 more) 262a6ff9259c yes Alt p10 amd64 (20241227_01:17) x86_64 CONTAINER 226.51MB 2024/12/27 00:00 UTC
alt/p10/cloud/arm64 7643261d1273 yes Alt p10 arm64 (20241227_01:17) aarch64 CONTAINER 176.94MB 2024/12/27 00:00 UTC
alt/p11 (3 more) 4faf887493d7 yes Alt p11 amd64 (20241227_01:17) x86_64 CONTAINER 183.38MB 2024/12/27 00:00 UTC
alt/p11/arm64 (1 more) df49ca8bf30a yes Alt p11 arm64 (20241227_01:17) aarch64 CONTAINER 182.81MB 2024/12/27 00:00 UTC

Запустить первый контейнер:

$ incus launch images:alt/p11 first

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

$ incus launch images:alt/Sisyphus second

Сделать третий контейнер из копии первого.

$ incus copy first third

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

$ incus start third

Зайти в контейнер:

$ incus exec first bash

Остановить первый контейнер:

$ incus stop first

И удалить его:

$ incus rm first

Принудительно удалить запущенный контейнер:

$ incus rm second --force

Вывести список образов:

$ incus image ls

В дополнение к контейнерам, Incus позволяет запускать виртуальные машины, используя образы, имеющие тип "VIRTUAL-MACHINE". Запустить виртуальную машину с названием alt-vm, используя образ Alt Sisyphus:

$ incus launch images:alt/Sisyphus alt-vm --vm

Вывести список всех созданных контейнеров и виртуальных машин:

$ incus ls

Запросить дополнительную информацию о каждом экземпляре:

$ incus info first
$ incus info second
$ incus info third
$ incus info alt-vm

Настройка экземпляров

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

  1. Запустить контейнер и ограничить его одним виртуальным процессором и 192 МБ оперативной памяти.
    $ incus launch images:alt/p11 limited --config limits.cpu=1 --config limits.memory=192MiB
    
  2. Проверить текущую конфигурацию и сравнить её с конфигурацией первого (неограниченного) контейнера:
    $ incus config show limited
    $ incus config show first
    
  3. Проверить объем свободной и используемой памяти в хост-системе и в двух контейнерах:
    $ free -m
    $ incus exec first -- free -m
    $ incus exec limited -- free -m
    
    Общий объем памяти идентичен для родительской системы и первого контейнера, поскольку по умолчанию контейнер наследует ресурсы из своей родительской среды. В то же время, ограниченный контейнер имеет только 192 МБАЙТ.
  4. Проверить количество процессоров, доступных в родительской системе и в двух контейнерах:
    $ nproc
    $ incus exec first -- nproc
    $ incus exec limited -- nproc
    
    Опять же, это число идентично для хост-системы и первого контейнера, но у ограниченного контейнера процессор всего один.

Можно менять настройки контейнеров прямо в процессе их работы:

  1. Настроить ограничение памяти контейнера:
    $ incus config set limited limits.memory=128MiB
    
  2. Проверить, что конфигурация изменилась:
    $ incus config show limited
    
  3. Проверить объем памяти, доступный контейнеру:
    $ incus exec limited -- free -m
    

В зависимости от типа экземпляра и используемых драйверов хранилища, можно указать дополнительные параметры конфигурации. Например, настроить размер корневого диска для виртуальной машины.

  1. Проверить текущий размер корневого диска виртуальной машины alt-vm:
    $ incus exec alt-vm -- df -h
    Filesystem      Size  Used Avail Use% Mounted on
    tmpfs            94M  2.0M   92M   3% /run
    /dev/sda2       9.6G  780M  8.8G   9% /
    tmpfs           469M     0  469M   0% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs            50M   15M   36M  29% /run/incus_agent
    /dev/sda1        99M  8.3M   91M   9% /boot/efi
    
  2. Переопределить размер корневого диска:
    $ incus config device override alt-vm root size=30GiB
    
  3. Перезапустить виртуальную машину:
    $ incus restart alt-vm
    
  4. Снова проверить размер корневого диска:
    $ incus exec alt-vm -- df -h
    Filesystem      Size  Used Avail Use% Mounted on
    tmpfs            94M  748K   94M   1% /run
    /dev/sda2        29G  780M   29G   3% /
    tmpfs           469M     0  469M   0% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs            50M   15M   36M  29% /run/incus_agent
    /dev/sda1        99M  8.3M   91M   9% /boot/efi
    

Взаимодействие с экземплярами

  1. Запуск интерактивной оболочки bash в экземпляре:
    $ incus exec first -- bash
    
    Теперь можно выполнять команды внутри контейнера.
  2. Выйти из контейнера:
    $ exit
    
  3. Вместо входа в экземпляр и запуска команд внутри, можно запускать команды непосредственно с хоста. Например, установить монитор ресурсов btop в контейнер и запустить его:
    $ incus exec first -- apt-get update
    $ incus exec first -- apt-get install btop -y
    $ incus exec first -- btop
    
  4. Также можно получить доступ к файлам из экземпляра и взаимодействовать с ними.
    • Извлечь файл из контейнера:
      $ incus file pull first/etc/hosts
      
    • Добавить запись в файл.
      $ echo "1.2.3.4 my-example" >>hosts
      
    • Поместить файл обратно в контейнер.
      $ incus file push hosts first/etc/hosts
      
    • Пример просмотра файлов журналов внутри контейнера.
      $ incus file pull first/var/log/syslog - | less
      

Сеть

Incus использует сетевой интерфейс incusbr для управления экземплярами.

  1. Посмотреть список интерфейсов:
    $ incus network ls
    
    Из вывода команды видно, что интерфейс incusbr0 является bridge (мостом), который управляется системой Incus. Этот интерфейс используется для сетевого взаимодействия между контейнерами, работающими в Incus, и внешним миром. Мост создает виртуальную сеть, к которой подключаются контейнеры, и обеспечивает их связь с внешними сетями через интерфейс хоста.
  2. Посмотреть свойства интерфейса incusbr0:
    $ incus network show incusbr0
    config:
      ipv4.address: 10.147.209.1/24
      ipv4.nat: "true"
      ipv6.address: fd42:f766:678d:9af3::1/64
      ipv6.nat: "true"
    description: ""
    name: incusbr0
    type: bridge
    used_by:
    - /1.0/instances/first
    - /1.0/instances/alt-vm
    - /1.0/instances/limited
    - /1.0/profiles/default
    managed: true
    status: Created
    locations:
    - none
    project: default
    
  3. Изменить конфигурацию интерфейса incusbr0:
    $ incus network edit incusbr0
    

Управление снимками (снапшотами)

Incus позволяет делать снимки экземпляров для сохранения их текущего состояния.

  1. Создать снимок с названием clean:
    $ incus snapshot create first clean
    
  2. Убедиться, что снимок сделан:
    $ incus ls first
    $ incus info first
    
  3. Сломать контейнер:
    $ incus exec first -- rm /bin/bash
    
  4. Убедиться, что контейнер сломан:
    $ incus exec first -- bash
    
    Shell не запустится, так как bash был удален.
  5. Восстановить состояние контейнера из снимка:
    $ incus snapshot restore first clean
    
  6. Убедиться, что с контейнером снова всё в порядке:
    $ incus exec first -- bash
    $ exit
    
  7. Удалить снимок:
    $ incus snapshot delete first clean
    

Web-интерфейс

Пока в репозиторий не собран пакет incus-ui-canonical, вебку можно добавить так:

  1. Установить стороннюю .deb-сборку отсюда:
    $ epmi -y repack incus-ui-canonical_6.17-ubuntu24.04-202510101506_arm64.deb);
  2. Создать конфиг /etc/systemd/system/incus.service.d/ui.conf с путём до веб-каталога:
    [Service]
    Environment = INCUS_UI=/opt/incus/ui/
    
  3. Задать порт для веб-интерфейса, например: # incus config set core.https_address :8443;
  4. Перечитав настройки (# systemctl daemon-reload), перезапустить службу: # systemctl restart incus;
  5. Зайти на хост, где поднят сервис, по заданному выше порту: https://ip.add.re.ss:8443/;
  6. Осваиваться и пользоваться.