Piton

Libvirt a Pythonnal

Libvirt a Pythonnal
Az egyik korábbi bejegyzésemben megmutattam, hogyan lehet elindulni a Libvirt és a KVM használatával. Ez a virtualizációs verem nem azt jelenti, hogy asztali virtualizációs szoftverként használható, hanem inkább olyan szervereken fut, amelyek nagyobb rugalmasságot, hatékonyságot és stabilitást kínálnak a felhasználóbarátság helyett. Úgy kell automatizálni, hogy nth fokozat helyett a kézi konfigurációra támaszkodik. Tehát nézzük meg, hogyan lehet csatlakozni a libvirt démonhoz, és automatizálni az alapvető virtuális gépek kezelését és felügyeletét a Python használatával.

A telepítés és az alapvető feltételezések

Libvirt KVM telepítést használok egy Debian szerveren. Az általam használt Python szkriptek egy Python 3-ban futnak.7.3 környezet. Ennek a cikknek állítólag nedvesítenie kell a lábát a Libvirt Python-kötéseivel. Az alkalmazás megtervezésekor mindig olvassa el a hivatalos dokumentációt, amely a felhasználási esetek széles skáláját fedi le, és ésszerűen gyakran frissül.

Telepítsük először a libvirthez szükséges összes függőséget:

$ sudo apt install pkg-config libvirt-dev
$ pip3 telepítse a libvirt-python-t

Ennyi a csomag, amire szüksége van.

A következő parancsfájlok és kivonatok futnak helyileg a Libvirt gazdagépen rootként, ahelyett, hogy távoli kliensen futtatnák. A szolgáltatásokat távolról is elérheti, azonban ez hosszú elhúzódást igényel az ügyfél és a szerver közötti kapcsolat biztosításában. Ezért az egyszerűség kedvéért helyben fogunk csatlakozni.

Kapcsolat létrehozása a Libvirtd szolgáltatással

A kezdéshez nyissunk meg egy Python parancssort, importáljuk a libvirt könyvtárat, és nyissunk kapcsolatot a libvirtrel.nyílt módszer.

root @ deb: ~ # python3
Python 3.7.3 (alapértelmezett, 2019. április 15., 01:55:37)
[ÖET 6.3.0 20170516] a linuxon

Írja be a „help”, a „copyright”, a „credits” vagy a „license” szót további információkért.

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

A conn változó mostantól lekérdezhető a libvirt démonról, és ezt hamarosan meg is fogjuk tenni. De először egy kis kitérő.

A Libvirt számos különféle virtualizációs és tárolóverem kezelésére használható. Ezek közül a KVM-QEMU, a Xen és az LXC a legnépszerűbb. Tehát amikor belépsz a libvirtbe.Az open ('qemu: /// system') libvirt segítségével információkat gyűjthet és kezelhet a QEMU vendégeiről. Ugyanúgy beszélhet LXD démonnal vagy Xen hypervisorral az lxc: /// system vagy az xen: /// system használatával.

Hasonlóképpen, a módszer libvirt.nem csak az open () áll rendelkezésére. Az open (név), az openAuth (uri, auth, zászlók) és az openReadOnly (név) három különböző hívás, amelyek mindegyike visszaad egy virConnect objektumot, és különböző szintű vezérlést kínál a gazdagép felett. Bővebben itt olvashat róluk. Mostanra a virConnect osztály objektumaként kapcsolódunk. Ez az objektum átjáró szinte bármi elvégzésére, a hipervizor konfigurálásától kezdve a vendégek és az erőforrás-allokáció módosításáig.

Miután végzett az objektummal, győződjön meg róla, hogy bezárta a kapcsolatot azáltal, hogy meghívja rajta a close metódust.

>>> csatlakozó.Bezárás()

Azonban még ne futtassa a fenti parancsot. Mert még egy kicsit játszani fogunk a libvirtrel. Kérdezzünk a hipervizorunktól néhány részletet magáról, például a gazdagépnévről és a vCPU-k számáról, amelyeket összesen fel tud ajánlani a vendég virtuális gépek számára.

>>> csatlakozó.getHostname ()
'deb'
>>> csatlakozó.getMaxVcpus ('qemu')
16

Most meg kell értenünk, hogy a Libvirt metaadatok olyan objektumokról, mint a hypervisor statisztikák, virtuális gépek, azok hálózati és tárolási információi, stb. XML formátumban vannak ábrázolva. Az XML olyan sorta, mint a JSON, csak kissé ügyetlen (és kicsit régebbi). Az adatokat karakterlánc-literálként tárolják és mutatják be, és ez azt jelenti, hogy ha lekérdezi a libvirt-t, és ennek a lekérdezésnek a kimenete XML, akkor egy nagyon hosszú egysoros kimenetet kap, ahol a \ n helyett literális string, új sor. A Python beépített nyomtatási funkciója megtisztíthatja az emberi olvashatóság érdekében

>>> nyomtatás (konn.getSysinfo ()


Dell Inc.
A14

 

A virtuális gépek listázása és figyelése

Ha nagy számú virtuális gépet tart fenn, akkor egy módszerre van szükség több száz egységes konfigurációjú virtuális gép létrehozásához, amelyek az egyszerű egyszálas munkaterheléstől a többmagos, többszálas feldolgozásig megfelelően méretezhetők. A Libvirt meghívja a vendég virtuális gépeket (vagy tárolókat, ha LXC-t használ) Domainek és felsorolhat információkat az egyes tartományokról, valamint konfigurálhatja azokat, ha a virConnect objektum rendelkezik megfelelő jogosultságokkal.

A virtuális gépekről és azok erőforrás-kihasználtságáról a következő hívásokat használhatja:

>>> csatlakozó.listDomainsID ()
[4, 5]

Ez egy olyan tartományazonosító tömböt ad vissza, amelyek csak kis egész számok az egyszerű libvirt beállításhoz. Megbízhatóbb módja a virtuális gépek címkézésének, anélkül, hogy két virtuális gép (tegyük fel, hogy különböző csomópontokon) azonos azonosítóval vagy névvel rendelkezik, az UUID-k használata. A libvirtben minden rendelkezhet UUID-vel, amely véletlenszerűen generál 128 bites számot. Valójában kicsi az esélye annak, hogy két azonos UUID-t hoz létre.

A virtuális gépek hálózatának, maguknak a virtuális gépeknek, sőt a tárolókészleteknek és köteteknek is meg vannak az egyedi UUID-jük. Használja őket szabadon a Python-kódban, ahelyett, hogy az emberi hozzárendelt nevekre hagyatkozna. Sajnos a tartományok UUID-jeinek megszerzésének módja kissé rendetlen a könyvtár jelenlegi megvalósításában, véleményem szerint. Megköveteli, hogy adja meg a virtuális gép azonosítóját (tartományazonosítót), így néz ki.

domainIDs = kapcsolat.listDomainsID ()
domainID esetén a domainID-ekben:
domain = csatlakozás.lookupByID ()
uuid = domain.UUIDString ()
nyomtatás (uuid)

Most láthatja a tartományi UUID-ok listáját. Rábukkantunk egy új Python Object libvirtre is.A virDomain, amelynek saját metóduskészlete van társítva, hasonlóan a conn változóhoz, amely libvirt volt.virConnect objektum, és ehhez olyan módszerek társultak, mint a listDomainsID () és a lookupByID ().

Mindkét módszerhez használhatja a Python beépített dir () metódusait, hogy az objektumok felsorolhassák a belső változókat és metódusokat.

Például:

>>> dir (bekötés)
['_… Gs', 'schedulerType', 'screenshot', 'securityLabel', 'securityLabelList',
'sendKey', 'sendProcessSignal', 'setAutostart', 'setBlkioParameters', 'setBlockIoTune',
'setGuestVcpus', 'setInterfaceParameters', 'setMaxMemory', 'setMemory', 'setMemoryFlags',
'setMemoryParameters', 'setMemoryStatsPeriod', 'setMetadata', 'setNumaParameters',
'setPerfEvents', 'setSchedulerParameters', 'setSchedulerParametersFlags', 'setTime',
„setUse”…]

Ez valóban segíthet a módszer pontos nevének és objektumának gyors felidézésében. Most, hogy van egy libvirtünk.virDomain objektum, használjuk fel a futó virtuális gép különféle részleteinek felsorolására.

>>> domain.info ()

Ez információt nyújt a virtuális gép állapotáról, a maximális memóriáról és a CPU magokról, az itt látható módon.

További információkat is találhat a virtuális gépről különböző módszerek, például az OSType () használatával

>>> domain.OSType ()
„hvm”

Nagy a rugalmasság a libvirt által kitett API-val kapcsolatban, és csak a felhasználási eset miatt kell aggódnia, és nem kell aggódnia a libvirt hatalmas komplexitása miatt.

Következtetés

A Libvirt technológiába tett utaim során az UUID-k hiánya első osztályú állampolgárként valószínűleg az egyetlen olyan fájdalom, amellyel szembesültem, és amely rossz tervezési választásnak tűnt. Ettől eltekintve a libvirt elég remek, amit elér. Igen, sok más dolgot is meg lehetett volna csinálni jobb módon, de a szoftvereknél ez mindig így van. Utólag visszatekintve, a rossz döntések mindig nyilvánvalóak, de egy szoftver átírásának költsége, olyan széles körben elterjedt, mint a libvirt, gyakran óriási.

Sokat építettek rá, mivel a projekt lassan és folyamatosan fejlődött.

Ahelyett, hogy megpróbálnám megtanulni az egész könyvtárat egyszerre, javasolnám, hogy álljon elő egy kis projekttel vagy ötlettel, és ezt valósítsa meg a Python és a Libvirt. A dokumentáció elég terjedelmes, sok példával, és valóban arra kényszeríti Önt, hogy egyszerre gondoljon a megfelelő szoftvertervezésre és a virtualizációs veremre.

5 legjobb arcade játék Linuxhoz
Manapság a számítógépek komoly gépek, amelyeket játékra használnak. Ha nem sikerül megszerezni az új magas pontszámot, akkor tudni fogja, mire gondolo...
Csata a Wesnothért 1.13.6 Megjelent a fejlesztés
Csata a Wesnothért 1.13.A múlt hónapban megjelent 6 a hatodik fejlesztési kiadás az 1-ben.13.x sorozat, és számos fejlesztést hajt végre, nevezetesen ...
A League of Legends telepítése az Ubuntu 14-re.04
Ha rajongsz a League of Legendsért, akkor ez egy lehetőség arra, hogy teszteld a League of Legends játékot. Ne feledje, hogy a LOL a PlayOnLinux rends...