toc
Virtualizace
Matyáš Kroupa
FI MUNI
27.9.2021
Obsah
Motivace
- Izolace - aplikace nemůže ovlivnit běh dalších
- Lepší využití zdrojů -> nižší provozní cena
- Jednodušší replikace a migrace
- Podpora OS, které na moderním HW už neběží
Emulace
- Není třeba speciální podpora hosta
- Velká režie
- I jiné instrukční sady
- Vývoj nového HW, retro gaming
Paravirtualizace
- Speciální API pro hosta
- Vyžaduje upravené jádro/ovladače
- Často využívaná pro síťová a bloková zařízení
Virtualizace s pomocí HW
- Vyžaduje podporu procesoru
- Intel VT-x, AMD-V, Itanium - VT-i, ARMv8-A, RISC-V H
- Nevyžaduje úpravu hosta
- Výkon srovnatelný s bare-metal
Kontejerizace
- Jádro hostitele je sdíleno s hosty
- Operační systém izoluje procesy nebo skupiny procesů
- Kontejnery jsou vázané na instrukční sadu a jádro
- Proces v kontejneru sice může být privilegovaný
- Často považována jako alternativa k virtualizaci
PCI passthrough
- Předání fyzikého zařízení do správy virtuálního stroje
- Nutná podpora procesoru i základní desky
- Intel VT-d, AMD-Vi
- Je třeba přiřadit všechny zařízení z jedné IOMMU skupiny
- BIOSy desktopových základních desek špatně sdělují IOMMU informace
- Na Linuxu se použije vynucením ovladače vfio pro dané zařízení přes parametr kernelu
- ACS override patch - každé zařízení do vlastní skupiny
Example (Povolení PCI passthrough na GPU) intel_iommu=on vfio-pci.ids=10de:1c20,10de:10f1
SR-IOV
- Single-root I/O virtualization
- Jedno fyzické zařízení se zobrazuje jako několik
- Virtuální zařízení se předají pomocí PCI passthrough
- Většinou pouze na serverovém HW (nVidia Tesla, AMD Radeon Instinct)
- Intel GVT-g
- Od generace Broadwell
- I na běžných integrovaných GPU
cgroups
- Skupina procesů v Linuxu
- Omezení a měřenení využití zdrojů
- Dvě verze (v1 a v2)
- Stromová struktura
Linux namespaces
- Inspirace z Plan 9
- Procesy vidí různé sady zdrojů
- 8 druhů - pid, mnt, net, ipc, uts (hostname), user, cgroup, time
IPVS
- IP Virtual Server
- L4 load balancing
- Postaven nad Netfiltrem
- ipvsadm(8)
- Navenek hostitel nemá více IP adres
Example ipvsadm -Ln
DXGKRNL
- DirectX 12 pro Linux
- Jen pod Hyper-V
- Předává volání do hypervizoru
QEMU
- Emulátor, typ 2
- Umí nejen CPU a paměť, ale i celou řadu jiných zařízení (sériová linka, myš, klávesnice, ACPI,
...)
- Formát obrazů qcow2
- Podporuje Copy on Write
- Snapshoty přímo v obrazu
- Komprese zlib nebo zstd
- CPU hotplugging
Example (Vytvoření obrazu ) qemu-img create -f qcow2 -o cluster_size=128K
hd.qcow2 4G
KVM
- Typ 2
- Hypervizor přímo v Linuxu
- Využívá HW protředků procesoru
- Pouze v architektuře x86
- Pouze procesor a paměť
- Používá se v kombinaci s QEMU
bhyve
- Typ 2
- Pro FreeBSD a illumos
- Fork xhyve pro macOS
- Fork HyperKit odvozený od xhyve se používá pro běh Dockeru na macOS
Xen
- Typ 1
- Původně pouze paravirtualizace
- Od verze 3.0 i HW virtualizace
- Samotný hypervizor je mikrokernel
- Virtuální stroje jsou dom0 nebo domU
- dom0
- Přímý přístup k HW hostitele
- Pouze 1 instance
- domU
- Instalace se provádí konverzí existujícího systému na dom0
VMware ESXi
- Typ 1
- Silně licencovaný
- Formát disků VMFS
- Uložen jako sparse file
- Může se odkazovat na jiný jako rodičovský (CoW)
WMware Workstation (Player)
- Typ 2
- Určen pro desktop
- Varianta Player má omezenou funkcionalitu a je distribuována jako freeware
- Formát disků VMDK
- Podporován i jinými hypervizory (QEMU, VirtualBox)
- Fixní i dynamická velikost
- Migrace za běhu
VirtualBox
- Typ 2
- Plná virtualizace, dříve i emulace
- Vytvořen firmou Innotek, později koupena společností Sun, kterou koupil Oracle
- Formát disků VDI
- Fixní i dynamická velikost
chroot
- Poprvé v Unix Version 7
- Aktuálnímu procesu (a všem jeho potomkům) se změní kořenový adresář
- Vše ostatní je sdílené (např. tabulka procesů)
- Lze uniknout pomocí znovuzavolání chroot
BSD jails
- Systémové volání jail(2) i příkaz jail(8)
- Ve FreeBSD od roku 2000
- Odděleny i procesy, IP adresy
- Nemožnost otevírat raw sockety (např. přímé vytváření ICMP a IGMP paketů)
Solaris Zones
- Pro architektury x86 a SPARC
- Používá loop zařízení pro připojení souborového systému
- Integrace se ZFS - deduplikace
- BrandZ - zóna přispůsobená distribuci (Solaris, OpenSolaris, OpenIndiana, RHEL 3)
Linux-VServer
- Sada patchů pro Linux
- Pro běh celého userspace
- Používá chroot pro FS
- Sdílený /proc i /sys
- Projekt spíše stagnuje
OpenVZ
- Modifikovaný Linux
- Ploop - podobné jako loop
- Vlstní backend nebo qcow2
- Podporuje migraci a zálohy za běhu
- Kontejnery mají vlastní tabulku uživatelů/skupin a procesů, virtuální NIC a IPC
- Verze Linuxu je 2.6.32
- Dlouho používán u VPS služeb
LXC
- Evoluce OpenVZ
- Umožňuje spouštět nepriviligované kontejnery
- Využívá cgroups a namespaces
- Image je tarball s danou strukturou (rootfs, metadata a šablony)
- Vlastní repozitář obrazů
- LXD - démon nad LXC
- REST API
- Vlastní systém clusterizace
libvirt
- Démon
- Jednotná správa různých hypervizorů
- QEMU/KVM, Xen, LXC, VirtualBox, bhyve, ...
- XML konfigurace
- CLI - virsh
- GUI - virt-manager, GNOME Boxes
Vagrant
- Nástroj k rychlému spuštění virtuálních strojů
- Umí VirtualBox, Hyper-V a Docker, ostatní přes pluginy
- Konfigurační soubor Vagrantfile
- Snadný provisioning pomocí shellových skriptů
- Repozitář boxů
Example () vagrant init hashicorp/bionic64; vagrant up; vagrant ssh
Docker
Alternativní container runtime
- crun
- Napsané v C
- Od RedHatu
- Rychleji adoptuje nové standardy (cgroups v2)
- kata-containers
- Každý
kontejner ve vlastní VM
- KVM + (QEMU nebo firecracker)
Podman
- Nepoužívá démon
- Podporuje rootless kontejnery (jen s cgroups v2)
- Pro uložiště používá nativní schopnosti filesystému (btrfs a ZFS)
- Dvě předchozí vlastnosti se později dostali i do Dockeru
OpenStack
- IaaS
- Vyvinuto v Rackspace Hosting a NASA
- Modulární (vlastní marketplace)
- Virtuální stroje (Nova), kontejnery (Zun)
- SDN (Neutron)
- Blokové uložiště (Cinder)
Kubernetes
- PaaS
- Půvoně nad Dockerem, nyní rozhraní CRI
- Vyvinuto v Googlu
- Vše popsáno pomocí YAML dokumentů
- Při čisté instalaci je třeba dodat CNI, CSI, Ingress controller a LoadBalancer
Portainer
- PaaS
- Nad Dockerem
- Původně pouze single-node
- Cílem je být jednodušší než Kubernetes
- Jednoduché napojení na LDAP, AD nebo OAuth
OpenShift
- PaaS
- Od RedHatu
- Upravené Kubernetes
- Defaultně používá cri-o
- Open source verze OKD
xcp-ng
- Xen k virtualizaci
- Upravený Debian v dom0
- XenOrchestra - webová aplikace k řízení
- LVM, Ext4, ZFS a síťová uložiště
- Open vSwitch
- XOSAN - SAN složený z lokálního uložiště hostitelů
Proxmox VE
- QEMU/KVM a LXC
- Základem je Debian
- LVM, adresář, ZFS a síťová uložiště
- Open vSwitch, bridge
- Vlastní clusterizace
TrueNAS Core
- Založen na FreeBSD
- bhyve a BSD jails
- Licencovaná verze TrueNAS Enterprise
- ZFS
- Katalog aplikací (Nextcloud, Plex server, ...)
- TrueCommand - správa několika hostitelů
TrueNAS Scale
- Založen na Debianu
- Zatím ve fázi RC
- Configurace kompatibilní s TrueNAS Core
- QEMU/KVM a Docker
- Vlastní clusterizace
- Nad nimi Kubernetes
Unraid
- Založen na Slackware
- Proprietální
- QEMU/KVM a Docker
- JBOD Vypadající jako RAID
- Jednoduše zapnutelný ACS override patch
Zdroje