Top.Mail.Ru

Немного о Firecracker

Немного о Firecracker

Не так давно появилась система виртуализации, авторы которой обещают, что с ней «в доли секунды можно запускать легковесные микровиртуальные машины (microVMs) в невиртуализированной среде, получив преимущества и традиционных ВМ — в виде безопасности и изоляции рабочих нагрузок, и контейнеров — в виде эффективного использования ресурсов».

Об этой полезной разработке мы узнали практически случайно, но она уже нарисовала не плохие перспективы. Огромное спасибо автору материала, который будет опубликован чуть ниже. Мы так же будем тестировать эту систему и периодически выкладывать нубские и не только посты с нашими эспериментам. А пока начнем с ее установки и первого запуска Микро ВМ

В рамках заметки мы попробуем запустить тестовую VM. В качестве хоста будем использовать сервер с поддержкой KVM виртуализации, а в качестве ОС у нас будет работать Fedora. Стоит отметить, что запускать виртуаьные машины стоит в пределах окружения, созданного с помощью утилиты jailer, однако мы для тестов этот момент опустим в рамках данной заметки.

Установка Firecracker.

1. Для начала, ставим всё необходимое для работы виртуализации:

# dnf install @virtualization

2. Далее, проверяем, что в нашей системе есть всё необходимое для запуска firecracker (одна команда):

err=""; [ "$(uname) $(uname -m)" = "Linux x86_64" ] || err="ERROR: your system is not Linux x86_64."; [ -r /dev/kvm ] && [ -w /dev/kvm ] || err="$err\nERROR: /dev/kvm is innaccessible."; (( $(uname -r | cut -d. -f1)*1000 + $(uname -r | cut -d. -f2) >= 4014 )) || err="$err\nERROR: your kernel version ($(uname -r)) is too old."; dmesg | grep -i "hypervisor detected" && echo "WARNING: you are running in a virtual machine. Firecracker is not well tested under nested virtualization."; [ -z "$err" ] && echo "Your system looks ready for Firecracker." || echo -e "$err"

Эта команда проверит, не работаем ли мы в виртуальной машине, подходит ли для работы текущая версия ядра, и имеется ли доступ к /dev/kvm устройству. Если проверка пройдёт хорошо, мы получим сообщение:

Your system looks ready for Firecracker.

3. Мы не будем собирать утилиты из исходников, а воспользуемся готовым для работы бинарником. Так же, для работы нам потребуется скачать заранее подготовленные ядро и корневую файловую систему (для тестов уже подготовлен дистрибутив Alpine:

# wget https://github.com/firecracker-microvm/firecracker/releases/download/v0.11.0/firecracker-v0.11.0
# wget -O hello-vmlinux.bin https://s3.amazonaws.com/spec.ccfc.min/img/hello/kernel/hello-vmlinux.bin
# wget -O hello-rootfs.ext4 https://s3.amazonaws.com/spec.ccfc.min/img/hello/fsfiles/hello-rootfs.ext4

Запуск виртуальной машины.

Работа с firecracker у нас будет проходить с помощью api через файл сокет. Так же, для тестов нам потребуется два шелла (либо tmux, например, с двумя панелями).

4. В первом шелле, мы выполняем команду (и оставляем его открытым):

./firecracker-v0.11.0 --api-sock /tmp/firecracker.sock

5. Переходим во второй шелл, откуда и запускаем непосредственно VM. Для этого…

— Задаём ядро гостевой ОС:

# curl --unix-socket /tmp/firecracker.sock -i \
    -X PUT 'http://localhost/boot-source' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "kernel_image_path": "./hello-vmlinux.bin",
        "boot_args": "console=ttyS0 reboot=k panic=1 pci=off"
}'

— Задаём файловую систему гостевой ОС:

# curl --unix-socket /tmp/firecracker.sock -i \
    -X PUT 'http://localhost/drives/rootfs' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "drive_id": "rootfs",
        "path_on_host": "./hello-rootfs.ext4",
        "is_root_device": true,
        "is_read_only": false
}'

— Задаём параметры виртуальной машины — процессор и память:

# curl --unix-socket /tmp/firecracker.sock -i \
    -X PUT 'http://localhost/machine-config' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "vcpu_count": 2,
        "mem_size_mib": 2048
}'

— И запускаем саму виртуальную машину:

# curl --unix-socket /tmp/firecracker.sock -i \
    -X PUT 'http://localhost/actions' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
        "action_type": "InstanceStart"
}'

6. Возвращаемся к первому шеллу и видим там приглашение для ввода логина и пароля нашей гостевой ОС. Для тестовой VM это будут root и root соответственно.

firecracker

И знакомимся с нашей свежесозданной виртуалкой:

firecracker

7. Выключить инстанс из тестовых ядра и ФС можно, например, командой reboot, так же нужно удалить и сокет, созданный для теста VM.

Что в итоге? Один бинарник, весьма доступный API, изоляция инстансов. На мой взгляд, это как минимум неплохая альтернатива тому же LXC. Для ряда задач не хватает графического интерфейса, но думаю что это дело времени. В общем и целом — за развитием firecracker буду следить и дальше.

Контактная информация:

Политика конфиденциальности

Наш адрес:

403345, Россия, Волгоградская область, г. Михайловка, ул. Вишневая, 90

Наши реквизиты:

  • ИНН: 3437012267 КПП; 343701001
  • Расчетный счет: 40702810702500052004
  • БИК: 044525999
  • Наименование банка: Филиал Точка Публичного акционерного общества Банка «Финансовая Корпорация Открытие»
  • Корр. счет: 30101810845250000999
Мы – ЗАЧЕСТНЫЙБИЗНЕС
Яндекс.Метрика