Krajta

Libvirt s Pythonem

Libvirt s Pythonem
V jednom ze svých předchozích příspěvků jsem ukázal, jak lze začít s Libvirt a KVM. Tento virtualizační zásobník by neměl být používán jako virtualizační software pro stolní počítače, ale spíše by měl běžet na serverech, které nabízejí větší flexibilitu, efektivitu a stabilitu, místo toho, aby byly uživatelsky přívětivé. Má to být automatizované na nth stupně spíše než spoléhat se na manuální konfiguraci. Podívejme se tedy, jak se můžete připojit ke svému démonu libvirt a automatizovat základní správu a monitorování virtuálních počítačů pomocí Pythonu.

Nastavení a základní předpoklady

Používám instalaci Libvirt KVM na serveru Debian. Skripty Pythonu, které budu používat, běží v Pythonu 3.7.3 Prostředí. Tento článek by vám měl namočit nohy pomocí vazeb Libvirtu v Pythonu, při navrhování aplikace byste měli vždy odkazovat na oficiální dokumentaci, která pokrývá širokou škálu případů použití a je aktualizována přiměřeně často.

Nejprve si nainstalujte všechny závislosti požadované pro libvirt:

$ sudo apt install pkg-config libvirt-dev
$ pip3 nainstalujte libvirt-python

To je vše, co potřebujete.

Spustí se následující skripty a úryvky lokálně na hostiteli Libvirt, jako root, místo aby byl spuštěn na vzdáleném klientovi. Ke službám můžete přistupovat vzdáleně, což by však vyžadovalo dlouhou odbočku k zabezpečení spojení mezi klientem a serverem. Proto se pro jednoduchost budeme připojovat lokálně.

Navazování spojení se službou Libvirtd

Nejprve otevřete výzvu Pythonu, importujte knihovnu libvirt a otevřete spojení s libvirt.otevřená metoda.

root @ deb: ~ # python3
Python 3.7.3 (výchozí, 15. dubna 2019, 01:55:37)
[GCC 6.3.0 20170516] na Linuxu

Další informace získáte zadáním „help“, „copyright“, „credit“ nebo „license“.

>>> import libvirt
>>> conn = libvirt.open ('qemu: /// system')

Proměnnou conn lze nyní použít k dotazu na vašeho démona libvirt a my to uděláme brzy. Ale nejprve trochu odbočení.

Libvirt lze použít ke správě řady různých virtualizačních a kontejnerizačních zásobníků. KVM-QEMU, Xen a LXC jsou nejoblíbenější z nich. Takže když zadáte libvirt.open ('qemu: /// system') libvirt vám umožňuje shromažďovat informace o a spravovat hosty QEMU. Stejně dobře můžete mluvit s démonem LXD nebo hypervisorem Xen pomocí systému lxc: /// system nebo xen: ///.

Podobně metoda libvirt.open () není jediný, který máte k dispozici. open (name), openAuth (uri, auth, flags) a openReadOnly (name) jsou tři různá volání, z nichž každé vrací objekt virConnect a nabízí různou úroveň kontroly nad hostitelem. Více o nich si můžete přečíst zde. Prozatím máme conn jako objekt třídy virConnect. Tento objekt je bránou pro provádění téměř čehokoli, od konfigurace samotného hypervizoru po úpravu hostů a jejich přidělování prostředků.

Po dokončení práce s objektem nezapomeňte ukončit připojení voláním metody close na něm.

>>> připojení.zavřít()

Výše uvedený příkaz však ještě nespouštějte. Protože si budeme s libvirtem hrát trochu víc. Zeptejme se našeho hypervizora na několik podrobností o sobě, jako je název hostitele a počet vCPU, které může nabídnout hostujícím virtuálním počítačům celkem.

>>> připojení.getHostname ()
'deb'
>>> připojení.getMaxVcpus ('qemu')
16

Nyní musíme pochopit, že s metadaty Libvirt o objektech, jako jsou statistiky hypervisoru, virtuální počítače, jejich síťové a úložné informace atd., Jsou všechny zastoupeny ve formátu XML. XML je sorta jako JSON jen o něco neohrabanější (a trochu starší). Data jsou uložena a prezentována jako řetězcový literál a to znamená, že pokud zadáte dotaz na libvirt a výstupem tohoto dotazu je XML, získáte opravdu dlouhý jednořádkový výstup s řetězcem '\ n', který bude spíše jako doslovný řetězec než a nový řádek. Integrovaná funkce tisku v Pythonu ji může vyčistit, aby byla čitelná pro člověka

>>> tisk (spoj.getSysinfo ())


Dell Inc.
A14

 

Výpis a monitorování virtuálních počítačů

Pokud udržujete velké množství virtuálních počítačů, potřebujete metodu k vytvoření stovek virtuálních počítačů s jednotnou konfigurací, které také správně škálovají od jednoduchých úloh s jedním vláknem po vícejádrové zpracování s více vlákny. Libvirt volá hostující virtuální počítače (nebo kontejnery, pokud používáte LXC) Domény a můžete vypsat informace o jednotlivých doménách a nakonfigurovat je, pokud má váš objekt virConnect dostatečná oprávnění.

Chcete-li získat informace o virtuálních počítačích a jejich využití prostředků, můžete použít následující volání:

>>> připojení.listDomainsID ()
[4, 5]

Tím se vrací pole ID domén, která jsou jen malými celými čísly pro jednoduché nastavení libvirt. Spolehlivějším způsobem označování vašich virtuálních počítačů, aniž byste měli dva virtuální počítače (řekněme na různých uzlech) se stejným ID nebo názvem, je použití UUID. V libvirt může mít všechno UUID, což je náhodně generované 128bitové číslo. Šance, že vytvoříte dva identické UUID, jsou skutečně poměrně malé.

Síť pro vaše virtuální stroje, samotné virtuální počítače a dokonce i fondy úložiště a svazky mají své individuální UUID. Využijte je liberálně ve svém kódu Pythonu, místo toho, abyste se spoléhali na jména přiřazená člověkem. Bohužel způsob, jak získat UUID domén, je podle mého názoru při současné implementaci této knihovny trochu chaotický. Vyžaduje to, abyste zadali ID virtuálního počítače (ID domény), jak to vypadá.

domainIDs = spoj.listDomainsID ()
pro ID domény v ID domény:
doména = připojení.lookupByID ()
uuid = doména.UUIDString ()
tisk (uuid)

Nyní vidíte seznam UUID domén. Také jsme narazili na nový libvirt Python Object.virDomain, který má vlastní sadu metod s ním spojených, podobně jako proměnná conn, která byla libvirt.objekt virConnect a související metody jako listDomainsID () a lookupByID ().

U obou těchto metod můžete použít vestavěné metody dir () Pythonu, aby objekty mohly vypisovat své vnitřní proměnné a metody.

Například:

>>> dir (conn)
['_… Gs', 'schedulerType', 'screenshot', 'securityLabel', 'securityLabelList',
'sendKey', 'sendProcessSignal', 'setAutostart', 'setBlkioParameters', 'setBlockIoTune',
'setGuestVcpus', 'setInterfaceParameters', 'setMaxMemory', 'setMemory', 'setMemoryFlags',
'setMemoryParameters', 'setMemoryStatsPeriod', 'setMetadata', 'setNumaParameters',
'setPerfEvents', 'setSchedulerParameters', 'setSchedulerParametersFlags', 'setTime',
'setUse' ...]

To vám opravdu pomůže rychle si vybavit přesný název metody a objekt, se kterým by se měla používat. Nyní, když máme libvirt.VirDomain objekt, pojďme jej použít k výpisu různých podrobností o tomto běžícím VM.

>>> doména.informace ()

To vám poskytuje informace týkající se stavu virtuálního počítače, maximální paměti a jader CPU, jak je znázorněno zde.

Můžete také najít další informace o virtuálním počítači pomocí různých metod, jako je OSType ()

>>> doména.OSType ()
'hvm'

Existuje velká flexibilita, pokud jde o API, které libvirt vystavuje, a vy se musíte starat pouze o svůj případ použití a bez obav z enormní složitosti, kterou libvirt zpracovává.

Závěr

Při mých cestách do technologie Libvirt byla nepřítomnost UUID jako občana první třídy pravděpodobně jediným bodem bolesti, kterému jsem čelil, což se zdálo jako špatná volba designu. Kromě toho je libvirt docela šikovný v tom, čeho dosahuje. Ano, existuje spousta dalších věcí, které mohly být provedeny lepším způsobem, ale u softwaru je to vždy tak. Při zpětném pohledu jsou špatná rozhodnutí vždy zřejmá, ale náklady na přepsání softwaru, tak rozšířeného jako libvirt, jsou často obrovské.

Hodně toho bylo postaveno, protože projekt se vyvíjel pomalu a stabilně.

Místo toho, abych se snažil naučit celou knihovnu najednou, doporučil bych přijít s malým projektem nebo nápadem a implementovat to pomocí Pythonu a Libvirtu. Dokumentace je docela obsáhlá s mnoha příklady a opravdu vás nutí přemýšlet o správném softwarovém designu a virtualizačním zásobníku současně.

Hry Zdarma a open source herní motory pro vývoj linuxových her
Zdarma a open source herní motory pro vývoj linuxových her
Tento článek pokryje seznam bezplatných a otevřených herních enginů, které lze použít pro vývoj 2D a 3D her v systému Linux. Existuje mnoho takových h...
Hry Výukový program Shadow of the Tomb Raider pro Linux
Výukový program Shadow of the Tomb Raider pro Linux
Shadow of the Tomb Raider je dvanáctý přírůstek do série Tomb Raider - série akčních adventur vytvořená Eidosem Montrealem. Tato hra byla docela dobře...
Hry Jak zvýšit FPS v Linuxu?
Jak zvýšit FPS v Linuxu?
FPS znamená Snímků za sekundu. Úkolem FPS je měřit snímkovou frekvenci při přehrávání videa nebo herních výkonech. Jednoduše řečeno, počet nepřerušova...