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
находится на ранней стадии развития и адаптации, ждите
дальнейших новостей о развитии проекта.