Cloud-hypervisor
Что это
Cloud Hypervisor — это Virtual Machine Monitor (VMM) с открытым исходным кодом, работающий поверх KVM-гипервизора и реализованный на Rust. Документация тут.
- Работает на KVM
- Минимальная эмуляция
- Низкая задержка
- Низкий объем памяти
- Низкая сложность
- Высокая производительность
- Малая поверхность атаки
- Поддержка только 64-битной версии
- Процессор, память, горячее подключение PCI
- Миграция с машины на машину
Архитектуры
Cloud Hypervisor поддерживает x86-64, AArch64 и riscv64 архитектуры, функциональность которых различается в зависимости от платформы. различия в функциональности между x86-64 и AArch64 задокументированы в #1125. Поддержка riscv64 архитектуры является экспериментальной и предлагает ограниченные возможности функциональности. Подробности и инструкции см. тут.
Установка cloud-hypervisor
[root]# apt-get install cloud-hypervisor
Сборка ядра (если не обходимо)
[root]# apt-get install libelf-devel flex bison m4 bc
$ mkdir cloud-hypervisor
$ cd cloud-hypervisor
[cloud-hypervisor]$ git clone --depth 1 https://github.com/cloud-hypervisor/linux.git -b ch-6.12.8 linux-cloud-hypervisor
[cloud-hypervisor]$ cd linux-cloud-hypervisor
[cloud-hypervisor/linux-cloud-hypervisor]$ make ch_defconfig
[cloud-hypervisor/linux-cloud-hypervisor]$ KCFLAGS="-Wa,-mx86-used-note=no" make bzImage -j `nproc` # Do native build of the x86-64 kernel
[cloud-hypervisor/linux-cloud-hypervisor]$ make -j `nproc` # Do native build of the AArch64 kernel
Подготовка образа
[cloud-hypervisor]$ wget https://ftp.altlinux.org/pub/distributions/ALTLinux/images/p10/cloud/x86_64/alt-server-10.4-p10-cloud-x86_64.qcow2
[cloud-hypervisor]$ qemu-img convert -p -f qcow2 -O raw alt-server-10.4-p10-cloud-x86_64.qcow2 alt-server-10.4-p10-cloud-x86_64.raw
Подготовка cloud-init.img
[root]# apt-get install mcopy mtools
[cloud-hypervisor]$ mkdir cloud-init && cd cloud-init
Создайте необходимые конфиги cloud-init по примеру в upstream
Создайте и выполните скрип для сборки cloud-init.img:
[cloud-hypervisor/cloud-init]$ cat >> create-cloud-init.sh <EOF
#!/usr/bin/env bash
set -x
rm -f cloudinit.img
mkdosfs -n CIDATA -C cloud-init.img 8192
mcopy -oi cloudinit.img -s user-data ::
mcopy -oi cloudinit.img -s meta-data ::
mcopy -oi cloudinit.img -s network-config ::
EOF
[cloud-hypervisor/cloud-init]$ chmod +x create-cloud-init.sh
[cloud-hypervisor/cloud-init]$ ./create-cloud-init.sh
[cloud-hypervisor/cloud-init]$ cp cloud-init.img ../
Запуск виртуальной машины
[cloud-hypervisor]$ cloud-hypervisor --kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin --disk path=alt-server-10.4-p10-cloud-x86_64.raw path=cloud-init.img --cmdline "console=hvc0 root=/dev/vda3 rw" --cpus boot=4 --memory size=4096M --net "tap=,mac=,ip=,mask="