Cloud-hypervisor

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

Что это

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="