multipass-compose

В данной заметке речь пойдёт о “настоящих” виртуальных машинах, и никак не про контейнерную виртуализацию. Поэтому мысль вида “да всё ж можно в докер запихнуть” тут немного неуместна.

Строя облачные сервисы, мы в своей работе постоянно используем виртуальные машины. В продакшине — гипервизоры первого типа, которые, говоря простым языком, ставятся на “голое железо”; на своих локальных машинах — второго типа, это привычные нам всем VirtualBox, qemu и, возможно, Parallels Desktop.

С переходом большого количества разработчиков на новые процессоры M1 от одной фруктовой компании, мы испытали необходимость найти замену привычному нам всем VirtualBox и нашему незаменимому инструменту vagrant. Причина простая: на данный момент нет способа запустить в нём виртуалку x86_64 на машине с aarm64.

Для нас важно проверять манифесты, которые мы пишем для развёртывания новых облачных сервисов локально, ещё до того, как мы передали их под СКВ и дожидаемся пайплайна CI.

Простым решением оказался проект multipass, разрабатываемый компанией Canonical — разработчиком ОС Ubuntu. Он работает как на привычных всем процессорах Intel, так и на новых M1. Под капотом он может использовать подходящий гипервизор: VirtualBox, qemu или hyperkit. Это решает проблемы совместимости архитектур.

Но наши инсталляции чаще всего используют не одну, а сразу несколько машин. И нам потребовался способ запускать и останавливать одновременно сразу несколько виртуалок, чтобы имитировать настоящую систему на своём рабочем ноутбуке.

Так появилась идея создать проект multipass-compose — некий аналог docker-compose, который бы оркестрировал несколько машин в локальном окружении. Сейчас проект находится в самом начале пути, но мы уже используем его в процессе разработки.

В конце статьи приведены ссылки на все проекты и отдельный репозиторий с примерами использования multipass-compose.

Здесь я приведу короткую инструкцию, как пользоваться инструментом.

Всё начинается с манифеста multipass-compose.yaml, в котором описываются необходимые для работы виртуальные машины. Для краткости опущу необязательные параметры cpu, mem , disk, а так же cloud-init, позволяющий передать секцию user-data:

services:
  web-server:
    image: focal
  database:
    image: focal
  backend:
    image: focal

Все машины запускаются с помощью одной команды:

multipass-compose up

Остановка и полное удаление виртуальных машин производятся с помощью команды down:

multipass-compose down

Команда ip позволяет узнать выделенный машине ip-адрес, это бывает полезно при генерации динамических inventory для ansible:

multipass-compose ip <name>

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

multipass-compose находится на ранней стадии развития и адаптации, ждите дальнейших новостей о развитии проекта.

Ссылки