Python

Libvirt s Pythonom

Libvirt s Pythonom
V jednom z mojich predchádzajúcich príspevkov som ukázal, ako je možné začať s Libvirtom a KVM. Tento virtualizačný zásobník sa nemá používať ako virtualizačný softvér pre počítače, ale je určený na prevádzku na serveroch ponúkajúcich väčšiu flexibilitu, efektívnosť a stabilitu namiesto užívateľskej prívetivosti. Má to byť automatizované na nth stupňa, než aby sa spoliehali na manuálnu konfiguráciu. Pozrime sa teda, ako sa môžete pripojiť k svojmu démonu libvirt a automatizovať základnú správu a monitorovanie VM pomocou Pythonu.

Nastavenie a základné predpoklady

Používam inštaláciu Libvirt KVM na serveri Debian. Skripty Pythonu, ktoré budem používať, bežia v Pythone 3.7.3 prostredie. Tento článok by vám mal namočiť nohy pomocou väzieb Libvirt's Python. Pri navrhovaní aplikácie by ste sa mali vždy obrátiť na oficiálnu dokumentáciu, ktorá pokrýva široké spektrum prípadov použitia a je aktualizovaná primerane často.

Najprv nainštalujeme všetky závislosti vyžadované pre libvirt:

$ sudo apt nainštalovať pkg-config libvirt-dev
$ pip3 nainštalovať libvirt-python

To je všetko, čo potrebujete.

Spustené sú nasledujúce skripty a úryvky lokálne na hostiteľovi Libvirt, skôr ako root, namiesto spustenia na vzdialenom klientovi. K službám máte prístup na diaľku, čo by si však vyžadovalo dlhý zásah do zabezpečenia spojenia medzi klientom a serverom. Preto sa budeme pripájať lokálne, kvôli jednoduchosti.

Nadväzuje spojenie so službou Libvirtd

Na začiatok otvorme výzvu Pythonu, importujme knižnicu libvirt a otvorme spojenie s libvirt.otvorená metóda.

root @ deb: ~ # python3
Python 3.7.3 (predvolené, 15. apríla 2019, 01:55:37)
[GCC 6.3.0 20170516] v systéme Linux

Ďalšie informácie získate zadaním výrazu „help“, „copyright“, „credit“ alebo „license“.

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

Premennú conn je teraz možné použiť na dopytovanie vášho démona libvirt, čo urobíme čoskoro. Najskôr však trochu odbočenie.

Libvirt možno použiť na správu množstva rôznych virtualizačných a kontajnerizačných zásobníkov. Najobľúbenejšie z nich sú KVM-QEMU, Xen a LXC. Takže keď zadáte libvirt.otvorený ('qemu: /// system') libvirt vám umožňuje zhromažďovať informácie a spravovať hostí QEMU. Rovnako môžete hovoriť s démonom LXD alebo hypervisorom Xen pomocou systému lxc: /// system alebo xen: ///.

Podobne metóda libvirt.open () nie je jediný, ktorý máte k dispozícii. open (name), openAuth (uri, auth, flags) a openReadOnly (name) sú tri rôzne hovory, z ktorých každé vracia objekt virConnect a ponúka rôznu úroveň kontroly nad hostiteľom. Viac o nich sa dočítate tu. Zatiaľ máme conn ako objekt triedy virConnect. Tento objekt je bránou pre vykonávanie takmer všetkého, od konfigurácie samotného hypervízora po úpravu hostí a ich alokácie zdrojov.

Po dokončení práce s objektom nezabudnite ukončiť pripojenie tak, že na ňom zavoláte metódu close.

>>> pripoj.Zavrieť()

Vyššie uvedený príkaz však zatiaľ nespúšťajte. Pretože sa s libvirtom budeme hrať trochu viac. Spýtajme sa nášho hypervízora na niekoľko podrobností o ňom, napríklad názov hostiteľa, a počet vCPU, ktoré môže celkovo ponúknuť hosťujúcim VM.

>>> pripoj.getHostname ()
'deb'
>>> pripoj.getMaxVcpus ('qemu')
16

Teraz musíme pochopiť, že s metadátami Libvirt o objektoch, ako sú štatistiky hypervisora, VM, ich sieťové a úložné informácie atď., Sú všetky reprezentované vo formáte XML. XML je trochu ako JSON len o niečo neohrabanejšie (a trochu staršie). Dáta sú uložené a prezentované ako reťazcový literál a čo to znamená, že ak dopytujete libvirt a výstupom tohto dotazu je XML, dostanete skutočne dlhý jednoriadkový výstup s '\ n' prítomným ako doslovný reťazec a nie Nový riadok. Vstavaná funkcia tlače v Pythone ju môže vyčistiť a dosiahnuť tak lepšiu čitateľnosť pre človeka

>>> tlač (spoj.getSysinfo ())


Dell Inc.
A14

 

Zoznam a monitorovanie virtuálnych počítačov

Ak udržiavate veľké množstvo virtuálnych počítačov, potrebujete metódu na vytvorenie stoviek virtuálnych počítačov s jednotnou konfiguráciou, ktoré sa dajú správne škálovať aj od jednoduchých pracovných úloh s jedným vláknom po viacjadrové spracovanie s viacerými vláknami. Libvirt volá hosťujúce VM (alebo kontajnery, ak používate LXC) Domény a môžete uviesť zoznam informácií o jednotlivých doménach a tiež ich nakonfigurovať, ak má váš objekt virConnect dostatočné oprávnenie.

Ak chcete získať informácie o virtuálnych počítačoch a ich využití zdrojov, môžete použiť nasledujúce volania:

>>> pripoj.listDomainsID ()
[4, 5]

Toto vráti pole ID domén, ktoré sú len malými celými číslami pre jednoduché nastavenie libvirt. Spoľahlivejším spôsobom označovania vašich VM bez toho, aby ste mali dva VM (povedzme na rôznych uzloch) s rovnakým ID alebo menom, je použitie UUID. V libvirt všetko môže mať UUID, ktoré je náhodne vygenerované 128 bitové číslo. Šanca, že vytvoríte dva identické UUID, je skutočne dosť malá.

Sieť pre vaše virtuálne stroje, samotné virtuálne počítače a dokonca aj fondy úložísk a zväzky majú svoje individuálne UUID. Liberálne ich využite vo svojom kóde Python, namiesto toho, aby ste sa spoliehali na ľudské mená. Bohužiaľ, spôsob, ako získať UUID domén, je podľa môjho názoru pri súčasnej implementácii tejto knižnice trochu chaotický. Vyžaduje sa od vás zadanie ID VM (ID domény), takto to vyzerá.

domainIDs = pripoj.listDomainsID ()
pre ID domény v ID domény:
doména = spoj.lookupByID ()
uuid = doména.UUIDString ()
tlač (uuid)

Teraz vidíte zoznam UUID domén. Narazili sme tiež na nový libvirt Python Object.virDomain, ktorý má vlastnú sadu metód s ním spojených, podobne ako premenná conn, ktorou bol libvirt.objekt virConnect a sú s ním spojené metódy ako listDomainsID () a lookupByID ().

Pre obe tieto metódy môžete použiť vstavané metódy dir () v Pythone, aby objekty mohli vypísať svoje vnútorné premenné a metódy.

Naprí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 môže skutočne pomôcť rýchlo si spomenúť na presný názov metódy a objekt, s ktorým by sa mala používať. Teraz, keď máme libvirt.objekt virDomain, použijeme ho na vypísanie rôznych podrobností o tomto spustenom VM.

>>> doména.Info()

Získate tak informácie týkajúce sa stavu VM, maximálnej pamäte a jadier procesora, ako je uvedené tu.

Môžete tiež nájsť ďalšie informácie o VM pomocou rôznych metód, ako je OSType ()

>>> doména.OSType ()
„hvm“

Pokiaľ ide o API, ktoré libvirt vystavuje, existuje veľká flexibilita a vy sa musíte starať iba o svoj prípad použitia a bez obáv o obrovskú zložitosť, ktorú libvirt zvláda.

Záver

Pri mojich plavbách do technológie Libvirt bola absencia UUID ako občana prvej triedy pravdepodobne jediným bodom bolesti, ktorému som čelil a ktorý sa javil ako zlá voľba dizajnu. Okrem toho je libvirt dosť šikovný na to, čo dosahuje. Áno, existuje veľa ďalších vecí, ktoré sa dali urobiť lepším spôsobom, ale pri softvéroch to tak vždy je. Pri spätnom pohľade sú zlé rozhodnutia vždy zrejmé, ale náklady na prepisovanie časti softvéru, ktorý je rovnako rozšírený ako libvirt, sú často obrovské.

Veľa sa toho postavilo, pretože projekt sa vyvíjal pomaly a stabilne.

Namiesto toho, aby som sa snažil naučiť celú knižnicu naraz, odporučil by som prísť s malým projektom alebo nápadom a implementovať ho pomocou Pythonu a Libvirtu. Dokumentácia je pomerne rozsiahla a obsahuje veľa príkladov. Naozaj vás núti premýšľať o správnom softvérovom dizajne a virtualizačnom zásobníku súčasne.

Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...
Ako zmeniť veľkosť, farbu a schému ukazovateľa myši a kurzora v systéme Windows 10
Ukazovateľ myši a kurzor vo Windows 10 sú veľmi dôležité aspekty operačného systému. Dá sa to povedať aj pre iné operačné systémy, takže v skutočnosti...
Hry Zadarmo a open source herné motory pre vývoj hier pre Linux
Zadarmo a open source herné motory pre vývoj hier pre Linux
Tento článok sa bude zaoberať zoznamom bezplatných a otvorených herných nástrojov, ktoré možno použiť na vývoj 2D a 3D hier v systéme Linux. Existuje ...