• Práce s virtuálními stroji KVM. Úvod. Úvod do základů virtualizace s KVM

    Řekněme, že jste mladý, ale stále chudý student, což znamená, že ze všech možných platforem máte pouze PC na Windows a PS4. Jednoho krásného dne se rozhodnete, že se rozhodnete stát se programátorem, ale moudří lidé na internetu vám řekli, že bez Linuxu se nemůžete stát normálním inženýrem. Nemůžete nainstalovat Fedoru jako svůj hlavní a jediný systém, protože Windows je stále potřeba pro hry a vkontakte a můžete nainstalovat Linux jako druhý systém na HDD brání vám strach nebo nedostatek zkušeností.

    Nebo řekněme, že jste vyrostli, nyní jste šéfem serverů ve velké společnosti a jednoho krásného dne si všimnete, že většina serverů není ani z poloviny vytížená. Pošta Další aplikace a data na serverech, která z bezpečnostních důvodů nemůžete, a náklady na podporu a údržbu rostoucí serverové farmy raketově rostou.

    Nebo řekněme, že už máte vousy a brýle, jste technický ředitel a nejste spokojeni s tím, co vývojáři dostanou k nasazení nové aplikace nový server musíte počkat dva měsíce. Jak se v takových podmínkách rychle posunout vpřed?

    Nebo jste možná architekt, který navrhl nový komplexní systém pro zpracování business intelligence. Váš systém obsahuje věci jako ElasticSearch, Kafka, Spark a mnoho dalšího a každá komponenta musí žít samostatně, být nakonfigurována v mysli a komunikovat s ostatními komponentami. Jako správný inženýr chápete, že nestačí pouze nainstalovat celou tuto zoo přímo do vašeho systému. Musíte se pokusit nasadit produkční prostředí co nejblíže budoucnosti a pokud možno takovým způsobem, aby váš vývoj bez problémů fungoval na produkčních serverech.

    A co dělat ve všech těchto těžkých situacích? Správně: používejte virtualizaci.

    Virtualizace vám umožňuje nainstalovat mnoho operačních systémů, které jsou od sebe zcela izolované a fungují vedle sebe na stejném hardwaru.

    Trocha historie. První virtualizační technologie se objevily již v 60. letech, ale skutečná potřeba se objevila až v 90. letech, kdy se zvyšoval počet serverů. Tehdy nastal problém efektivní likvidace všech kusů železa a také optimalizace procesů aktualizace, nasazování aplikací, zajištění bezpečnosti a obnovy systémů v případě nějaké katastrofy.

    Zanechme v zákulisí dlouhou a bolestnou historii vývoje různých technologií a metod virtualizace - pro zvídavé čtenáře na konci článku budou další materiály na toto téma. Důležité je, kde to všechno skončilo: tři hlavní přístupy k virtualizaci.

    Přístupy k virtualizaci

    Bez ohledu na přístup a technologii je při použití virtualizace vždy hostitelský stroj a na něm nainstalován hypervizor, který řídí hostující stroje.

    V závislosti na použité technologii může být hypervizor buď samostatný software nainstalovaný přímo na hardware nebo součást operačního systému.

    Pozorný čtenář, který miluje hlášky, po pár odstavcích začne reptat, že jeho oblíbené kontejnery Docker jsou také považovány za virtualizaci. O kontejnerových technologiích si povíme jindy, ale ano, máte pravdu, pozorný čtenáři, kontejnery jsou také určitou virtualizací, pouze na úrovni prostředků stejného operačního systému.

    Existují tři způsoby interakce virtuálních strojů s hardwarem:

    Dynamické vysílání

    V tomto případě virtuální stroje netuší, že jsou virtuální. Hypervizor za běhu zachycuje všechny příkazy z virtuálního stroje a zpracovává je, nahradí je bezpečnými a poté je vrací zpět do virtuálního stroje. Tento přístup samozřejmě trpí určitými problémy s výkonem, ale umožňuje virtualizovat jakýkoli OS, protože hostující OS není třeba upravovat. Dynamický překlad se používá v produktech VMWare, lídra v komerčním virtualizačním softwaru.

    Paravirtualizace

    V případě paravirtualizace je zdrojový kód hostujícího OS speciálně upraven tak, aby všechny instrukce byly prováděny co nejefektivněji a bezpečně. Virtuální stroj si přitom vždy uvědomuje, že se jedná o virtuální stroj. Z výhod - zlepšený výkon. Z mínusů - tímto způsobem nelze virtualizovat například MacOS nebo Windows nebo jakýkoli jiný OS, ke kterému není přístup. Paravirtualizace v té či oné formě se používá například v Xen a KVM.

    Hardwarová virtualizace

    Vývojáři procesorů si včas uvědomili, že architektura x86 není vhodná pro virtualizaci, protože byla zpočátku přizpůsobena pro jeden operační systém najednou. Proto po objevení se dynamického překladu od VMWare a paravirtualizace od Xen začaly Intel a AMD vydávat procesory s hardwarovou podporou virtualizace.

    Zpočátku to nepřineslo zvláštní zvýšení výkonu, protože hlavním cílem prvních verzí bylo zlepšit architekturu procesoru. Nicméně nyní, více než 10 let po objevení Intel VT-x a AMD-V, není hardwarová virtualizace v žádném případě horší a dokonce v některých ohledech předčí jiná řešení.

    Hardwarová virtualizace využívá a vyžaduje KVM (Kernel-based Virtual Machine), který budeme používat i v budoucnu.

    Virtuální stroj založený na jádru

    KVM je virtualizační řešení zabudované přímo do linuxového jádra, které konkuruje ostatním řešením z hlediska funkčnosti a předčí je v jednoduchosti použití. KVM je navíc open source technologie, která však jde plnou rychlostí kupředu (jak z hlediska psaní kódu, tak z hlediska marketingu) a implementuje Red Hat do svých produktů.

    To je mimochodem jeden z mnoha důvodů, proč trváme na distribucích Red Hat.

    Tvůrci KVM se zpočátku soustředili na podporu hardwarové virtualizace a mnoho věcí znovu nevynalezli. Hypervizor je v podstatě malý operační systém, který musí být schopen pracovat s pamětí, sítí a tak dále. Linux už tohle všechno umí velmi dobře, takže použití linuxového jádra jako hypervizoru je logické a krásné technické řešení. Každý virtuální stroj KVM je jen samostatný linuxový proces, zabezpečení zajišťuje SELinux/sVirt, zdroje spravují CGroups.

    O SELinuxu a CGroups si povíme více v jiném článku, neděste se, pokud tato slova neznáte.

    KVM neběží jen jako součást linuxového jádra: od verze jádra 2.6.20 je KVM základní součástí Linuxu. Jinými slovy, pokud máte nainstalovaný Linux, pak již máte KVM. Pohodlné, že?

    Sluší se říci, že na poli veřejných cloudových platforem Xen dominuje o něco více než zcela. Například AWS EC2 a Rackspace používají Xen. Je to dáno tím, že se Xen objevil dříve než všichni ostatní a jako první dosáhl dostatečné úrovně výkonu. Je tu ale dobrá zpráva: v listopadu 2017 postupně nahradí Xen u největšího cloudového poskytovatele.

    Přestože KVM používá hardwarovou virtualizaci, pro některé ovladače I/O zařízení může KVM použít paravirtualizaci, která v určitých případech použití poskytuje zvýšení výkonu.

    libvirt

    Téměř jsme se dostali k praktické části článku, zbývá pouze zvážit jeden open source nástroj: libvirt.

    libvirt je sada nástrojů, která poskytuje jediné API pro mnoho různých virtualizačních technologií. Při použití libvirt vám v zásadě nezáleží na tom, jaký druh „backendu“ existuje: Xen, KVM, VirtualBox nebo něco jiného. A co víc, můžete použít libvirt v programech Ruby (a Python, C++ a dalších). Můžete se také vzdáleně připojit k virtuálním strojům prostřednictvím zabezpečených kanálů.

    Mimochodem, libvirt je vyvíjen společností Red Hat. Nainstalovali jste již Fedora Workstation jako svůj primární systém?

    Pojďme vytvořit virtuální stroj

    libvirt je pouze API, je na uživateli, jak s ním bude pracovat. Hromada možností. Použijeme několik standardních utilit. Připomínáme, že trváme na používání distribucí Red Hat (CentOS, Fedora, RHEL) a níže uvedené příkazy byly testovány na jednom z těchto systémů. U jiných distribucí Linuxu mohou existovat drobné rozdíly.

    Nejprve zkontrolujeme, zda je podporována hardwarová virtualizace. Ve skutečnosti bude fungovat bez jeho podpory, jen mnohem pomaleji.

    egrep --color = auto "vmx|svm|0xc0f" /proc/cpuinfo # pokud se nic nezobrazuje, tak neexistuje podpora :(

    Protože KVM je modul jádra Linuxu, musíte zkontrolovat, zda je již načten, a pokud ne, načtěte jej.

    lsmod | grep kvm # kvm, kvm_intel, kvm_amd. Pokud nic nevychází, musíte načíst potřebné moduly # Pokud modul není zaveden modprobe kvm modprobe kvm_intel # nebo modprobe kvm_amd

    Je možné, že virtualizace hardwaru je v systému BIOS zakázána. Pokud tedy nejsou načteny moduly kvm_intel/kvm_amd, zkontrolujte nastavení BIOSu.

    Nyní nainstalujme potřebné balíčky. Nejjednodušší způsob, jak toho dosáhnout, je nainstalovat skupinu balíčků najednou:

    seznam yum skupiny "Virtuální*"

    Seznam skupin závisí na operačním systému, který používáte. Mám skupinu tzv virtualizace. Obslužný program virsh se používá ke správě virtuálních strojů z příkazového řádku. Zkontrolujte, zda máte alespoň jeden virtuální počítač pomocí příkazu virsh list. S největší pravděpodobností ne.

    Pokud se vám nelíbí příkazový řádek, pak je tu virt-manager - velmi pohodlné GUI pro virtuální stroje.

    virsh umí vytvářet virtuální počítače pouze ze souborů XML, jejichž formát lze nalézt v dokumentaci libvirt. Naštěstí existuje i virt-manager a příkaz virt-install. GUI můžete zjistit sami, ale zde je příklad použití virt-install:

    sudo virt-install --name mkdev-vm-0 \ --location ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso \ --memory=1024 --vcpus=1 \ --disk size=8

    Místo zadávání velikosti disku jej můžete vytvořit předem pomocí virt-manager nebo virsh a souboru XML. Použil jsem výše uvedený minimální obrázek Centos 7, který lze snadno najít na webu Centos.

    Nyní zbývá jedna důležitá otázka: jak se připojit k vytvořenému stroji? Nejjednodušší způsob, jak to udělat, je přes virt-manager - stačí dvakrát kliknout na vytvořený stroj a otevře se okno s připojením SPICE. Zde najdete instalační obrazovku OS.

    Mimochodem, KVM může vnořit virtualizaci: virtuální stroje uvnitř virtuálního stroje. Musíme jít hlouběji!

    Po ruční instalaci OS vás okamžitě napadne, jak lze tento proces automatizovat. K tomu potřebujeme obslužný program s názvem Kickstart, určený k automatické inicializaci OS. Jedná se o jednoduchý textový soubor, ve kterém můžete specifikovat konfiguraci OS až po různé skripty, které se spouštějí po instalaci.

    Ale kde mohu získat takový soubor? Proč to nenapsat od začátku? Samozřejmě, že ne: protože jsme již nainstalovali Centos 7 do našeho virtuálního stroje, stačí se k němu připojit a najít soubor /root/anaconda-ks.cfg - toto je konfigurace Kickstart, abychom vytvořili kopii již vytvořený OS. Stačí jej zkopírovat a upravit obsah.

    Pouhé kopírování souboru je ale nuda, tak do něj přidáme něco jiného. Faktem je, že ve výchozím nastavení se nebudeme moci připojit ke konzoli vytvořeného virtuálního stroje z příkazového řádku hostitelského stroje. Chcete-li to provést, musíte upravit konfiguraci zavaděč GRUB. Proto na úplný konec souboru Kickstart přidejte následující oddíl:

    %post --log = /root/grubby.log /sbin/grubby --update-kernel = ALL --args = "console=ttyS0" %end

    %post , jak asi tušíte, bude spuštěn po instalaci OS. Příkaz grubby aktualizuje konfiguraci GRUB a přidá možnost připojení ke konzole.

    Mimochodem, možnost připojení přes konzoli můžete určit i přímo při vytváření virtuálního stroje. Chcete-li to provést, musíte příkazu virt-install předat ještě jeden argument: --extra-args="console=ttyS0" . Poté můžete nainstalovat samotný OS v interaktivním textovém režimu z terminálu vašeho hostitelského stroje a připojit se k virtuálnímu stroji přes virsh konzoli ihned po jeho vytvoření. To je zvláště výhodné, když vytváříte virtuální stroje na vzdáleném serveru železa.

    Nyní můžete použít vytvořenou konfiguraci! virt-install vám umožňuje předat další argumenty při vytváření virtuálního počítače, včetně cesty k souboru Kickstart.

    sudo virt-install --name mkdev-vm-1 \ --location ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso \ --initrd-inject /cesta/k/ks.cfg \ --extra- args ks=soubor:/ks.cfg \ --memory=1024 --vcpus=1 --velikost disku=8

    Po vytvoření druhého virtuálního stroje (zcela automaticky) se k němu můžete připojit z příkazového řádku pomocí příkazu virsh console vm_id. vm_id lze najít ze seznamu všech virtuálních strojů pomocí příkazu virsh list.

    Jednou z výhod používání KVM/libvirt je úžasná dokumentace, včetně té, kterou vytvořil Red Hat. Vážení čtenáři, zveme k jeho prostudování s náležitou zvědavostí.

    Vytvářet takové virtuální stroje s rukama v konzoli a poté je konfigurovat pouze pomocí Kickstartu samozřejmě není nejpohodlnější proces. V budoucích článcích se podíváme na spoustu skvělých nástrojů, které usnadňují a zcela automatizují konfiguraci systémů.

    Co bude dál?

    Není možné vměstnat do jednoho článku vše, co stojí za to vědět o virtualizaci. Podívali jsme se na několik možností využití virtualizace a jejích výhod, ponořili se trochu do detailů její práce a seznámili se s podle nás nejlepším řešením těchto úloh (KVM) a dokonce jsme vytvořili a nakonfigurovali virtuální stroj.

    Je důležité pochopit, že virtuální stroje jsou cihly v rozsáhlých budovách moderních cloudových architektur. Jsou to oni, kdo umožňuje aplikacím automaticky růst do neomezených velikostí, jak je to jen možné. rychlý způsob a s maximálním využitím všech zdrojů.

    Jakkoli je AWS výkonné a bohaté na služby, jeho základem jsou virtuální stroje nad Xenem. Pokaždé, když vytvoříte nový Droplet na DigitalOcean, vytvoříte virtuální stroj. Téměř všechny weby, které používáte, jsou hostovány na virtuálních počítačích. Jednoduchost a flexibilita virtuálních strojů umožňuje nejen budovat produkční systémy, ale také desítkykrát usnadňuje místní vývoj a testování, zvláště když je v systému zapojeno mnoho komponent.

    Naučili jsme se, jak postavit jeden jediný stroj – není to špatné pro testování jedné aplikace. Ale co když potřebujeme několik virtuálních strojů najednou? Jak spolu budou komunikovat? Jak se najdou? K tomu budeme muset porozumět tomu, jak sítě obecně fungují, jak fungují v kontextu virtualizace a jaké komponenty se na této práci podílejí a je třeba je nakonfigurovat – v dalším článku ze série.

    Osobně je pro mě nejjednodušší představit si KVM (Kernel-based Virtual Machine) jako takovou úroveň abstrakce nad technologiemi hardwarové virtualizace Intel VT-x a AMD-V. Vezmeme stroj s procesorem, který podporuje jednu z těchto technologií, nasadíme na tento stroj Linux, nainstalujeme KVM do Linuxu a jako výsledek dostaneme příležitost vytvářet virtuální stroje. Takto fungují cloudové hostingové služby, například Amazon Web Services. Spolu s KVM se někdy používá také Xen, ale diskuse o této technologii je nad rámec tohoto příspěvku. Na rozdíl od technologií virtualizace kontejnerů, například stejného Dockeru, vám KVM umožňuje spouštět jakýkoli operační systém jako hostující systém, ale má také Ó Vyšší režie pro virtualizaci.

    Poznámka: Níže uvedené kroky byly mnou testovány ubuntu linux 14.04, ale teoreticky bude z velké části platit pro obě další verze Ubuntu a další distribuce Linuxu. Vše by mělo fungovat jak na ploše, tak na serveru, ke kterému se přistupuje přes SSH.

    Instalace KVM

    Zkontrolujte, zda náš procesor podporuje Intel VT-x nebo AMD-V:

    grep -E "(vmx|svm)" /proc/cpuinfo

    Pokud se něco zahřeje, je to podpořeno a můžete pokračovat dále.

    Instalace KVM:

    aktualizace sudo apt-get
    sudo apt-get install qemu-kvm libvirt-bin virtinst-bridge-utils

    Kde je obvyklé ukládat:

    • /var/lib/libvirt/boot/ - ISO obrazy pro instalaci hostujících systémů;
    • /var/lib/libvirt/images/ - obrázky pevné disky hostující systémy;
    • /var/log/libvirt/ - zde byste měli hledat všechny protokoly;
    • /etc/libvirt/ - adresář s konfiguračními soubory;

    Nyní, když je nainstalován KVM, pojďme vytvořit náš první virtuální stroj.

    Vytvoření prvního virtuálního stroje

    Jako hostující systém jsem zvolil FreeBSD. Stáhněte si ISO obraz systému:

    cd /var/lib/libvirt/boot/
    sudo wget http://ftp.freebsd.org/ path/ to/ some-freebsd-disk.iso

    Ve většině případů jsou virtuální stroje spravovány pomocí nástroje virsh:

    sudo virsh --help

    Před spuštěním virtuálního stroje musíme shromáždit nějaké další informace.

    Podíváme se na seznam dostupných sítí:

    sudo virsh net-list

    Zobrazit informace o konkrétní síť(pojmenovaný výchozí):

    sudo virsh net-info výchozí

    Podíváme se na seznam dostupných optimalizací pro hostující OS:

    sudo virt-install --os-variant seznam

    Nyní tedy vytvoříme virtuální stroj s 1 CPU, 1 GB RAM a 32 GB místa na disku připojený k výchozí síti:

    sudo virt-install \
    --virt-type=kvm \
    --name freebsd10 \
    --ram 1024\
    --vcpus=1 \
    --os-variant=freebsd8 \
    --hvm\
    --cdrom=/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
    --network network=default,model=virtio \
    --graphics vnc \
    --cesta k disku =/ var/ lib/ libvirt/ images/ freebsd10.img,size=32 ,bus=virtio

    Můžeš vidět:

    VAROVÁNÍ Nelze se připojit ke grafické konzoli: virt-viewer ne
    nainstalováno. Nainstalujte si prosím balíček "virt-viewer".

    Instalace domény stále probíhá. Můžete se znovu připojit ke konzole
    k dokončení procesu instalace.

    Nevadí, tak to má být.

    Poté se podíváme na vlastnosti virtuálního stroje ve formátu XML:

    sudo virsh dumpxml freebsd10

    Tady je nejvíc úplné informace. Včetně například i MAC adresy, kterou budeme dále potřebovat. Zatím najdeme informace o VNC. V mém případě:

    S pomocí mého oblíbeného klienta (osobně používám Rammina) jedeme přes VNC, v případě potřeby pomocí SSH port forwarding. Dostaneme se přímo do instalačního programu FreeBSD. Pak je vše jako obvykle - Další, Další, Další, dostaneme nainstalovaný systém.

    Základní příkazy

    Podívejme se nyní základní příkazy pro práci s KVM.

    Získání seznamu všech virtuálních strojů:

    sudo virsh list --all

    Získání informací o konkrétním virtuálním počítači:

    sudo virsh dominfo freebsd10

    Spusťte virtuální stroj:

    sudo virsh start freebsd10

    Zastavit virtuální počítač:

    sudo virsh vypnutí freebsd10

    Těžko porazit virtuální stroj (navzdory názvu, toto Ne vymazání):

    sudo virsh zničit freebsd10

    Restartujte virtuální počítač:

    sudo virsh reboot freebsd10

    Klonovat virtuální stroj:

    sudo virt-clone -o freebsd10 -n freebsd10-clone \
    --file / var/ lib/ libvirt/ images/ freebsd10-clone.img

    Povolit/zakázat automatické spouštění:

    sudo virsh autostart freebsd10
    sudo virsh autostart --zakázat freebsd10

    Spusťte virsh v dialogovém režimu (všechny příkazy v dialogovém režimu - jak je popsáno výše):

    sudovirsh

    Úpravy vlastností virtuálního stroje v XML, včetně zde můžete změnit limit na množství paměti atd.:

    sudo virsh upravit freebsd10

    Důležité! Komentáře z upraveného XML jsou bohužel odstraněny.

    Když je virtuální počítač zastaven, lze také změnit velikost disku:

    sudo qemu-img resize / var/ lib/ libvirt/ images/ freebsd10.img -2G
    sudo qemu-img info / var/ lib/ libvirt/ images/ freebsd10.img

    Důležité! Vašemu hostujícímu OS se nejspíš nebude líbit, že se disk najednou zvětšil nebo zmenšil. V nejlepší případ, spustí se v nouzovém režimu s návrhem na nové rozdělení disku. Tohle asi dělat nechceš. Může být mnohem jednodušší spustit nový virtuální stroj a migrovat na něj všechna data.

    Zálohování a obnova jsou poměrně jednoduché. Výstup dumpxml stačí někam uložit, stejně jako obraz disku a pak je obnovit. Na youtube našel video s ukázkou tohoto procesu je vše opravdu snadné.

    Nastavení sítě

    Zajímavá je otázka, jak zjistit, jakou IP adresu virtuální stroj po načtení obdržel? V KVM se to dělá chytrým způsobem. Nakonec jsem napsal následující skript Python:

    #!/usr/bin/env python3

    # skript virt-ip.py
    # (c) 2016 Aleksander Alekseev
    # http://web/

    import sys
    import re
    import os
    podproces importu
    z xml .etree importujte ElementTree

    def print(str) :
    tisknout (str, soubor = sys.stderr)

    if len(sys.argv)< 2 :
    eprint("USAGE: " + sys.argv [ 0 ] + " " )
    eprint("Příklad: " + sys .argv [ 0 ] + " freebsd10" )
    sys.exit(1)

    if os.geteuid() != 0:
    eprint("CHYBA: musíš být root")
    eprint("Tip: spusťte `sudo " + sys .argv [ 0 ] + " ...`" ) ;
    sys.exit(1)

    if subprocess .call( "který arping 2>&1 >/dev/null", shell = True ) != 0 :
    eprint("CHYBA: arping nenalezeno" )
    tisk( "Tip: spusťte `sudo apt-get install arping`")
    sys.exit(1)

    Doména = sys.argv [1]

    pokud ne, znovu .match ("^*$" , doména):
    tisk( "CHYBA: neplatné znaky v názvu domény")
    sys.exit(1)

    Domout = subprocess .check_output ("virsh dumpxml " +doména+" || true" ,
    shell=pravda)
    domout = domout.decode("utf-8").strip()

    if domout == "" :
    # chybová zpráva již vytištěna pomocí dumpxml
    sys.exit(1)

    Doc = ElementTree.fromstring(domout)

    # 1. seznam všech síťových rozhraní
    # 2. spusťte `arping` na každém rozhraní paralelně
    #3 grep odpovědi
    cmd= "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
    "xargs -P0 -I IFACE arping -i IFACE -c 1 () 2>&1 | " + \
    "grep "bytes from") || true"

    pro dítě v doc.iter() :
    if child.tag == "mac" :
    macaddr = dítě.attrib["adresa"]
    macout = podproces .check_output(cmd .format(macaddr) ,
    shell=pravda)
    print(macout.decode("utf-8" ))

    Skript pracuje jak s výchozí sítí, tak s přemostěnou sítí, jejíž konfiguraci si probereme později. V praxi je však mnohem pohodlnější nakonfigurovat KVM tak, aby hostům přiděloval vždy stejné IP adresy. Chcete-li to provést, upravte nastavení sítě:

    sudo virsh net-edit default

    ... něco takového:

    >



    >

    Po provedení těchto změn


    >

    ...a nahraďte to něčím jako:




    >

    Restartujeme hostující systém a zkontrolujeme, že obdržel IP přes DHCP z routeru. Pokud chcete, aby měl hostovaný systém statickou IP adresu, nakonfiguruje se jako obvykle v samotném hostujícím systému.

    program virt-manager

    Také by vás mohl zajímat program virt-manager:

    sudo apt-get install virt-manager
    sudo usermod -a -G libvirtd USERNAME

    Takto vypadá jeho hlavní okno:

    Jak můžete vidět, virt-manager není pouze GUI pro virtuální stroje běžící lokálně. S ním můžete spravovat virtuální stroje běžící na jiných hostitelích a také se dívat na krásné grafy v reálném čase. Osobně považuji za obzvláště výhodné ve virt-manageru, že nemusíte prohledávat konfigurace, na kterém portu běží VNC konkrétního hostujícího systému. Virtuální stroj prostě najdete v seznamu, dvakrát kliknete a získáte přístup k monitoru.

    Je také velmi vhodné používat virt-manager k provádění věcí, které by jinak vyžadovaly pracné úpravy souborů XML a v některých případech dodatečné příkazy. Například přejmenování virtuálních strojů, nastavení afinity CPU a podobné věci. Mimochodem, použití afinity CPU výrazně snižuje vliv hlučných sousedů a vliv virtuálních strojů na hostitelský systém. Vždy jej používejte, kdykoli je to možné.

    Pokud se rozhodnete použít KVM jako náhradu za VirtualBox, mějte na paměti, že nemohou sdílet hardwarovou virtualizaci. Aby KVM fungovalo na vaší ploše, budete muset nejen zastavit všechny virtuální stroje ve VirtualBoxu a Vagrantu, ale také restartovat systém. Osobně považuji KVM za mnohem pohodlnější než VirtualBox, přinejmenším proto, že nevyžaduje spuštění příkazu nastavení sudo /sbin/rcvboxdrv po každé aktualizaci jádra funguje adekvátně s Unity a obecně umožňuje skrýt všechna okna.

    Hypervizory, virtualizace a cloud

    Analýza hypervizoru KVM

    Obsah série:

    O této sérii článků

    Tato série začíná přehledem typů hypervizorů a virtualizace systému a poté se věnuje funkcím pěti hypervizorů, jejich instalačním procesům a problémům se správou, které mohou nastat.

    Tuto sérii článků lze použít jako výchozí bod pro pochopení role hypervizoru v cloudové virtualizaci nebo jako samostatné články, které vám pomohou určit, který hypervizor je nejvhodnější pro konkrétní cloudové úlohy.

    Co potřebujete vědět, abyste mohli začít

    Kernel-based Virtual Machine (KVM) je kompletní platformově specifické virtualizační řešení pro Linux na x86 procesorech s virtualizačními rozšířeními (Intel VT nebo AMD-V). Pro hosty je k dispozici také omezená podpora paravirtualizace pro Linux a Windows ve formě paravirtuálního síťového ovladače.

    V současné době KVM komunikuje s jádrem prostřednictvím zaváděcího modulu jádra. Jsou podporovány různé hostované operační systémy, jako je Linux, BSD, Solaris, Windows, Haiku, ReactOS a operační systém AROS Research. Upravená verze KVM (qemu) může běžet na Mac OS X.

    Poznámka: KVM neprovádí žádnou samoemulaci; místo toho program uživatelského prostoru používá rozhraní /dev/kvm k nastavení adresního prostoru hostovaného virtuálního serveru, vezme jeho simulované I/O prostředky a namapuje jeho obraz na obraz hostitele.

    Architektura KVM je znázorněna na obrázku 1.

    Obrázek 1. Architektura KVM
    Paravirtualizace

    Paravirtualizace je virtualizační technika, která poskytuje virtuálním strojům softwarové rozhraní, podobný, ale ne identický se základním hardwarem. Účelem tohoto upraveného rozhraní je snížit množství času, který hostovaný operační systém stráví prováděním operací, jejichž provádění je ve virtuálním prostředí mnohem obtížnější než v prostředí nevirtualizovaném.

    Existují speciální „háky“ (háky), které umožňují systému hosta a hostitele požadovat a potvrzovat řešení těchto složitých úkolů, které by bylo možné provádět ve virtuálním prostředí, ale mnohem pomaleji.

    V architektuře KVM běží virtuální stroj jako běžný proces Linuxu naplánovaný standardním plánovačem Linuxu. Ve skutečnosti je každý virtuální procesor reprezentován jako normální proces Linuxu. To umožňuje KVM plně využít výhod linuxového jádra.

    Emulace zařízení je řízena upravenou verzí qemu, která poskytuje emulaci BIOSu, sběrnice PCI, sběrnice USB a také standardní sady zařízení, jako jsou řadiče disků IDE a SCSI, síťové karty atd.

    Funkčnost

    Hlavní funkce KVM jsou uvedeny níže.

    Bezpečnost

    Protože je virtuální stroj implementován jako proces Linux, používá k izolaci a správě prostředků standardní model zabezpečení systému Linux. S SELinux (Security-Enhanced Linux) linuxové jádro přidává povinné kontroly přístupu, vrstvené a různé kontroly zabezpečení a spravuje bezpečnostní politiku. SELinux poskytuje silnou izolaci zdrojů a omezuje mobilitu procesů běžících v linuxovém jádře.

    Projekt SVirt je snahou komunity integrovat bezpečnostní funkce a virtualizaci povinného přístupu (MAC). Na bázi Linuxu(KVM) – staví na SELinux a poskytuje rámec, který umožní správci definovat zásady izolace virtuálních strojů. SVirt je navržen tak, aby zajistil, že prostředky virtuálních strojů nebudou dostupné žádným jiným procesům (nebo virtuálním strojům); správce může tuto zásadu doplnit definováním jemně odstupňovaných oprávnění; například, aby skupina virtuálních strojů sdílela stejné prostředky.

    Správa paměti

    KVM zdědí výkonné funkce správy paměti z Linuxu. Paměť virtuální stroj uloženy stejným způsobem jako paměť jakéhokoli jiného linuxového procesu a lze je nahradit, zkopírovat velké stránky pro zlepšení výkonu, shrnuté nebo uložené v souboru na disku. Podpora technologie NUMA (Non-Uniform Memory Access, architektura paměti pro víceprocesorové systémy) umožňuje virtuálním strojům efektivní přístup k velkému množství paměti.

    KVM podporuje nejnovější funkce virtualizace paměti od výrobců procesorů, jako je Intel Extended Page Table (EPT) a AMD Rapid Virtualization Indexing (RVI), pro minimalizaci zatížení procesoru a dosažení vysoké propustnosti.

    Pomocí funkce je podporováno zobecnění paměťových stránek Jádra Sloučení stejné stránky (KSM). KSM skenuje paměť každého virtuálního stroje, a pokud jsou některé paměťové stránky virtuálních strojů identické, sloučí je do jedné stránky, která se pro tyto virtuální stroje stane společnou a je uložena v jediné kopii. Pokud se host pokusí upravit tuto sdílenou stránku, bude mu poskytnuta vlastní kopie.

    Datové úložiště

    KVM může použít jakékoli médium podporované Linuxem k ukládání obrazů virtuálních strojů, včetně místní disky s rozhraními IDE, SCSI a SATA, síť Připojené úložiště(NAS), včetně NFS a SAMBA/CIFS, nebo SAN s podporou iSCSI a Fibre Channel. Vícevláknové I/O lze použít ke zlepšení propustnosti úložiště a redundance.

    Opět, protože KVM je součástí linuxového jádra, lze použít osvědčenou a spolehlivou infrastrukturu úložiště s podporou všech předních výrobců; jeho sada úložných funkcí byla ověřena v mnoha produkčních instalacích.

    KVM podporuje obrazy virtuálních strojů na distribuovaných souborových systémech, jako je Global Souborový systém(GFS2), aby mohly být sdíleny více hostiteli nebo zobecněny pomocí logických svazků. Podpěra, podpora doladění(tenké zajišťování) diskových obrazů vám umožňuje optimalizovat využití úložných prostředků, alokovat je ne všechny najednou předem, ale pouze tehdy, když to virtuální stroj vyžaduje. Nativní formát disku pro KVM, QCOW2, poskytuje podporu pro snímky a poskytuje několik úrovní snímků, stejně jako kompresi a šifrování.

    Živá migrace

    KVM podporuje živou migraci a poskytuje možnost přesouvat běžící virtuální stroje mezi fyzickými hostiteli bez přerušení služby. Živá migrace je pro uživatele transparentní: virtuální počítač zůstává zapnutý, síťová připojení- aktivní a uživatelské aplikace pokračují v běhu, zatímco se virtuální stroj přesune na nový fyzický server.

    Kromě živé migrace podporuje KVM ukládání kopie aktuálního stavu virtuálního stroje na disk, což vám umožňuje jej uložit a později obnovit.

    Ovladače zařízení

    KVM podporuje hybridní virtualizaci, když jsou v hostujícím operačním systému nainstalovány paravirtualizované ovladače, což umožňuje virtuálním strojům používat optimalizované I/O rozhraní spíše než emulovaná zařízení, což poskytuje vysoký I/O výkon pro síťová a bloková zařízení.

    Hypervizor KVM používá standard VirtIO vyvinutý společnostmi IBM a Red Hat ve spolupráci s linuxovou komunitou pro paravirtualizované ovladače; je to rozhraní nezávislé na hypervizoru pro vytváření ovladačů zařízení, které umožňuje více hypervizorům sdílet stejnou sadu ovladačů zařízení, čímž se zlepšuje interoperabilita mezi hosty.

    Ovladače VirtIO jsou součástí moderní verze Linuxová jádra (nejnovější 2.6.25) jsou součástí Red Hat Enterprise Linux 4.8+ a 5.3+ a jsou k dispozici také pro Red Hat Enterprise Linux 3. Red Hat vyvinul ovladače VirtIO pro hostující operační systémy Microsoft Windows, které optimalizují síťové a diskové operace vstup výstup; tyto ovladače jsou certifikovány v rámci certifikačního programu Microsoft Windows Hardware Quality Labs (WHQL).

    Výkon a škálovatelnost

    KVM zdědí výkon a škálovatelnost Linuxu, podporuje virtuální stroje s 16 virtuálními procesory a 256 GB paměť s náhodným přístupem, stejně jako hostitelské systémy s 256 jádry a více než 1 TB RAM. Může poskytnout:

    • 95-135% výkon oproti holému kovu ve skutečných podnikových aplikacích, jako jsou SAP, Oracle, LAMP a Microsoft Exchange;
    • více než milion zpráv za sekundu a méně než 200 µs latence ve virtuálních strojích běžících na standardním serveru;
    • Maximální úrovně konsolidace s více než 600 virtuálními stroji provozujícími podnikové aplikace na jediném serveru.

    To znamená, že KVM umožňuje virtualizaci nejnáročnějších úloh.

    Nasazení virtualizace

    Nasazení KVM je poměrně složitý proces, plný speciálních požadavků na konfiguraci dodatečné informace viz sekce.

    Správa virtuálních strojů

    Existuje několik správců virtuálních strojů. Mezi nimi:

    • Univention virtuální manažer;
    • qemu/KVM: spusťte přímo z příkazového řádku v počítači KVM;
    • Virsh: minimální shell pro správu virtuálních strojů;
    • Virtual Machine Manager: aka virt-manager, uživatelské rozhraní pro správu virtuálních strojů.

    Výběr KVM

    Argumenty "pro":

    • navzdory skutečnosti, že KVM je relativně mladý hypervizor, jde o kompaktní modul, který v kombinaci s linuxovým jádrem poskytuje snadnou implementaci při zachování podpory pro linuxové těžké váhy;
    • KVM je flexibilní; protože hostující operační systémy komunikují s hypervizorem integrovaným do linuxového jádra, mohou vždy přistupovat k hardwaru přímo, aniž by museli měnit virtualizovaný operační systém. To dělá KVM více rychlá oprava pro virtuální stroje;
    • opravy pro KVM jsou kompatibilní s jádrem Linuxu. KVM je implementováno v samotném linuxovém jádře, což usnadňuje správu virtualizačních procesů.

    Argumenty proti:

    • výkonné nástroje pro správu serveru a virtuálních strojů KVM neexistují;
    • KVM potřebuje lepší podporu virtuální sítě A virtuální systémyúložiště dat, posílení zabezpečení, zlepšení spolehlivosti a odolnosti, správa napájení, podpora systémů HPC/real-time, škálovatelnost virtuálních procesorů, kompatibilita mezi dodavateli, přenositelnost virtuálních počítačů a budování ekosystému cloudových služeb.

    Na Ubuntu se doporučuje používat hypervisor KVM (správce virtuálních strojů) a knihovnu libvirt jako nástroj pro jeho správu. Libvirt obsahuje sadu programovacích API a vlastní aplikace správa virtuálních strojů (VM) virt-manager (grafické rozhraní, GUI) nebo virsh (příkazový řádek, CLI). Jako alternativní správce můžete použít convirt (GUI) nebo convirt2 (WEB rozhraní).

    V současnosti je v Ubuntu oficiálně podporován pouze hypervizor KVM. Tento hypervizor je součástí kódu jádra operačního systému. Linuxové systémy. Na rozdíl od Xen KVM nepodporuje paravirtualizaci, což znamená, že aby ji bylo možné používat, musí váš CPU podporovat technologie VT. Zda váš procesor podporuje tuto technologii, můžete zkontrolovat spuštěním příkazu v terminálu:

    Pokud je výsledkem zpráva:

    INFO: /dev/kvm existuje Lze použít akceleraci KVM

    takže KVM bude fungovat bez problémů.

    Pokud je výstupem zpráva:

    Váš procesor nepodporuje rozšíření KVM Akceleraci KVM NELZE použít

    pak můžete stále používat virtuální stroj, ale bude mnohem pomalejší.

      Nainstalujte jako hostující 64bitové systémy

      Přidělte hostům více než 2 GB paměti RAM

    Instalace

    sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

    Jedná se o instalaci na server bez X, tedy bez grafického rozhraní. Můžete jej nainstalovat pomocí příkazu

    sudo apt-get install virt-manager

    Poté se v nabídce objeví položka „Správce virtuálních strojů“ a s vysokou mírou pravděpodobnosti bude vše fungovat. Pokud nějaké problémy přetrvávají, budete si muset přečíst pokyny na wiki v anglickém jazyce.

    Vytvořte systém pro hosty

    Postup pro vytvoření hostujícího systému pomocí grafického rozhraní je poměrně jednoduchý.

    Ale textový režim se dá popsat.

    qcow2

    Při vytváření systému pomocí grafického rozhraní jako pevný disk budete vyzváni, abyste buď vybrali existující obrazový soubor nebo blokové zařízení, nebo vytvořili nový soubor s nezpracovanými (RAW) daty. Toto však není zdaleka jediný dostupný formát souboru. Ze všech typů disků uvedených v man qemu-img je qcow2 nejflexibilnější a nejaktuálnější. Podporuje snímky, šifrování a kompresi. Musí být vytvořen před vytvořením nového hostujícího systému.

    Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

    Podle stejného muže qemu-img předběžné přidělení metadat (-o preallocation=metadata) způsobí, že disk bude zpočátku mírně větší, ale poskytuje lepší výkon, když obraz potřebuje růst. Ve skutečnosti se v tomto případě tato možnost vyhne nepříjemnému bugu. Vytvořený obrázek zpočátku zabírá méně než megabajt místa a podle potřeby roste do zadané velikosti. Hostující systém by měl okamžitě vidět tuto konečnou specifikovanou velikost, ale během fáze instalace může vidět skutečnou velikost souboru. Přirozeně odmítne instalaci na 200 kb pevný disk. Chyba není specifická pro Ubuntu, objevuje se alespoň v RHEL.

    Kromě typu obrazu si později můžete vybrat, jak jej připojit – IDE, SCSI nebo Virtio Disk. Výkon diskového subsystému bude záviset na této volbě. Jednoznačně správná odpověď neexistuje, je potřeba vybírat na základě úkolu, který bude hostujícímu systému přidělen. Pokud je hostující systém vytvořen "aby viděl", pak bude stačit jakákoli metoda. Obecně platí, že I/O je obvykle úzkým hrdlem virtuálního stroje, takže při vytváření vysoce zatíženého systému je třeba tento problém brát co nejzodpovědněji.

    V tomto úvodním článku vše krátce proberu softwarových nástrojů používané v procesu vývoje služeb. Více podrobností o nich bude diskutováno v následujících článcích.

    proč? Tento operační systém je mi blízký a srozumitelný, takže při výběru distribučního kitu se muka, muka a házení nezažila. Nemá žádné zvláštní výhody oproti Red Hat Enterprise Linuxu, ale bylo rozhodnuto pracovat se známým systémem.

    Pokud plánujete nasadit infrastrukturu sami pomocí podobných technologií, doporučil bych vám vzít RHEL: díky dobré dokumentaci a dobře napsané aplikační programy bude to, ne-li řádově, tak určitě dvakrát jednodušší, a díky vyvinutému certifikačnímu systému bude možné bez větších problémů najít určitý počet specialistů, kteří jsou na patřičné úrovni obeznámeni s tímto OS.

    Opět jsme se rozhodli použít Debian Squeeze se sadou balíčků Sid/Experimentální a některé balíčky backportované a sestavené s našimi záplatami.
    Plány zahrnují publikování úložiště s balíčky.

    Při výběru virtualizační technologie byly zvažovány dvě možnosti – Xen a KVM.

    Zohlednili jsme také fakt, že existuje obrovské množství vývojářů, hosterů, komerčních řešení založených na Xenu – o to zajímavější bylo implementovat řešení založené na KVM.

    Hlavním důvodem, proč jsme se rozhodli použít KVM, je potřeba provozovat virtuální stroje s FreeBSD a v budoucnu i s MS Windows.

    Ke správě virtuálních strojů se ukázalo jako mimořádně výhodné používat produkty, které využívají jeho API: virsh, virt-manažerka, virt-install, atd.

    Jedná se o systém, který ukládá nastavení virtuálních strojů, spravuje je, vede o nich statistiky, zajišťuje, že se při startu zvedne rozhraní virtuálního stroje, připojuje zařízení k počítači - obecně provádí spoustu užitečná práce a trochu víc než to.

    Řešení samozřejmě není dokonalé. Z mínusů by se mělo jmenovat:

    • Naprosto šílené chybové hlášky.
    • Nemožnost měnit část konfigurace virtuálního stroje za běhu, ačkoli QMP (QEMU Monitor Protocol) to umožňuje.
    • Někdy se z neznámého důvodu nelze připojit k libvirtd - přestane reagovat na vnější události.

    Hlavním problémem při implementaci služby na samém počátku bylo omezení zdrojů pro virtuální stroje. V Xenu byl tento problém vyřešen pomocí interního plánovače, který rozděluje prostředky mezi virtuální stroje – a co je nejkrásnější, byla implementována i možnost omezení diskových operací.

    Nic takového v KVM nebylo až do příchodu mechanismu alokace zdrojů jádra. Jak už to v Linuxu bývá, přístup k těmto funkcím byl realizován prostřednictvím speciálu souborový systém skupina, ve kterém s pomocí konvenčních systémová volání write() bylo možné přidat proces do skupiny, přiřadit mu jeho váhu v papoušcích, specifikovat jádro, na kterém poběží, specifikovat propustnost disk, který tento proces může použít, nebo mu opět přiřadit váhu.

    Výhodou je, že toto vše je implementováno uvnitř jádra a můžete to použít nejen pro server, ale také pro desktop (který byl použit ve slavné "The ~ 200 Line Linux Kernel Patch That Does Wonders"). A podle mého názoru je to jedna z nejvýraznějších změn ve větvi 2.6, kromě milovaného #12309 , a ne jen další souborový systém. Tedy kromě POHMELFS (ale čistě kvůli názvu).

    Můj postoj k této knihovně-utilitě je velmi nejednoznačný.

    Na jedné straně to vypadá takto:

    A tuhle věc je také zatraceně těžké sestavit ze zdroje, a ještě víc do balíčku: někdy se mi zdá, že postavit Linux From Scratch od nuly je o něco jednodušší.

    Na druhou stranu je to velmi výkonná věc, která umožňuje vytvářet obrazy pro virtuální stroje, upravovat je, komprimovat, instalovat grub, upravovat tabulku oddílů, spravovat konfigurační soubory, přenášet "železné" stroje do virtuálního prostředí, přenášet virtuální stroje z jednoho obrazu do druhého, přenášet virtuální stroje z obrazu na hardware a upřímně řečeno, moje představivost zde trochu polevila. Ach ano: můžete také spustit démona uvnitř virtuálu Linuxové stroje a získat přístup k datům virtuálního stroje naživo a to vše v prostředí shell, python, perl, java, ocaml. Toto je krátký a zdaleka ne úplný seznam toho, co lze s .

    Zajímavé je, že většina kódu v je generována v době montáže, stejně jako dokumentace k projektu. Velmi široce používaný ocaml, perl. Samotný kód je napsán v C, který je následně zabalen do OCaml a opakující se části kódu jsou generovány samy. Práce s obrazy se provádí spuštěním speciálního servisního obrazu (supermin zařízení), do kterého jsou kanálem odesílány příkazy. Tento obrázek obsahuje záchrannou sadu nástrojů, jako je parted, mkfs a další užitečné věci pro správce systému.

    Nedávno jsem to dokonce začal používat doma, když jsem si z obrázku nandroid vybral potřebná data. Ale to vyžaduje jádro s podporou yaffs.

    jiný

    Níže uvádíme několik dalších zajímavých odkazů na popis použitých softwarových nástrojů - čtěte a studujte sami, pokud vás to zajímá. Například,