Python

Libvirt koos Pythoniga

Libvirt koos Pythoniga
Ühes oma eelmises postituses näitasin, kuidas saab Libvirt ja KVM-iga alustada. See virtualiseerimise virn pole mõeldud kasutamiseks töölaua virtualiseerimistarkvarana, pigem on see mõeldud töötamiseks serverites, mis pakuvad kasutajasõbralikkuse asemel suuremat paindlikkust, tõhusust ja stabiilsust. See on mõeldud olema automatiseeritud n-nith pigem käsitsi seadistamisele. Nii et vaatame, kuidas saate oma libvirt deemoniga ühenduse luua ja Pythoni abil automatiseerida VM-i põhihaldust ja jälgimist.

Seadistamine ja põhieeldused

Kasutan Debiani serveris Libvirt KVM-i installi. Kasutatavad Pythoni skriptid töötavad Python 3-s.7.3 keskkond. See artikkel peaks Librandi Pythoni köidetega märjaks tegema, rakenduse kujundamisel peaksite alati viitama ametlikele dokumentidele, mis hõlmavad paljusid kasutamisjuhtumeid ja mida ajakohastatakse mõistlikult sageli.

Paigaldame kõigepealt kõik libvirt jaoks vajalikud sõltuvused:

$ sudo apt install pkg-config libvirt-dev
$ pip3 installib libvirt-pythoni

See on kõik paketid, mida vajate.

Käivitatakse järgmised skriptid ja jupid kohapeal libvirtis hostil juurena, selle asemel, et seda käivitada kaugkliendil. Teenustele pääseb juurde kaugjuurdepääsuga, mis nõuab pika kõrvalekaldumist kliendi ja serveri vahelise ühenduse tagamisest. Seetõttu ühendame lihtsuse mõttes kohapeal.

Ühenduse loomine teenusega Libvirtd

Alustamiseks avage Pythoni viip, importige libvirtide teek ja avage ühendus libvirtiga.avatud meetod.

juur @ deb: ~ # python3
Python 3.7.3 (vaikimisi, 15. aprill 2019, 01:55:37)
[GCC 6.3.0 20170516] Linuxis

Lisateabe saamiseks sisestage „help“, „copyright“, „credits“ või „litsents“.

>>> import libvirt
>>> conn = libvirt.avatud ('qemu: /// süsteem')

Muutujat conn saab nüüd kasutada teie libvirt-deemoni päringute tegemiseks ja me teeme selle varsti. Kõigepealt aga väike kõrvalepõige.

Libvirtit saab kasutada mitmete erinevate virtualiseerimise ja konteinervirnade haldamiseks. KVM-QEMU, Xen ja LXC on neist kõige populaarsemad. Nii et kui sisestate libvirt.open ('qemu: /// system') libvirt võimaldab teil koguda teavet ja hallata QEMU külalisi. Sama hästi saate rääkida LXD deemoniga või Xen hüpervisoriga, kasutades vastavalt lxc: /// system või xen: /// system.

Samamoodi meetod libvirt.avatud () pole teie käsutuses ainus. open (nimi), openAuth (uri, auth, lipud) ja openReadOnly (nimi) on kolm erinevat kõnet, millest igaüks tagastab objekti virConnect ja pakub masina üle erineval tasemel kontrolli. Nende kohta saate rohkem lugeda siit. Praegu on meil ühendus klassi virConnect objektina. See objekt on värav peaaegu kõigi toimingute tegemiseks, alates hüpervisori enda seadistamisest kuni külaliste ja nende ressursside jaotuse muutmiseni.

Kui olete objektiga töötamise lõpetanud, sulgege kindlasti ühendus, kutsudes sellel meetodit Sule.

>>> ühend.Sulge()

Kuid ärge käivitage ülaltoodud käsku. Sest mängime libvirtiga veel natuke ringi. Küsime oma hüpervisorilt enda kohta mõningaid üksikasju, näiteks hosti nime ja vCPU-de arvu, mida ta saab külalistele VM-idele kokku pakkuda.

>>> ühend.getHostname ()
'deb'
>>> ühend.getMaxVcpus ('qemu')
16

Nüüd peame mõistma, et Libvirt'i metaandmed objektide kohta, nagu hüpervisori statistika, VM-id, nende võrgu- ja salvestusteave jne, on kõik XML-vormingus esindatud. XML on sorta nagu JSON, vaid veidi kohmakam (ja natuke vanem). Andmed salvestatakse ja esitatakse stringiliitidena ning see tähendab, et kui teete päringu libvirt ja selle päringu väljundiks on XML, saate tõesti pika ühe rea väljundi, kus '\ n' on sõna otseses stringis, mitte uus rida. Pythoni sisseehitatud printimisfunktsioon suudab selle inimese loetavuse huvides puhastada

>>> print (ühend.getSysinfo ())


Dell Inc.
A14

 

VM-ide loendamine ja jälgimine

Kui hooldate suurt hulka VM-e, vajate meetodit sadade ühtlase konfiguratsiooniga VM-ide loomiseks, mis ka korralikult ulatuvad lihtsatest ühekeermelistest töökoormustest mitme tuumaga, mitmekeermelise töötlemiseni. Libvirt kutsub külalisi VM-e (või konteinereid, kui kasutate LXC-d) Domeenid ja saate loetleda teavet nii üksikute domeenide kohta kui ka neid konfigureerida, kui teie virConnecti objektil on piisavalt õigusi.

VM-ide ja nende ressursside kasutamise kohta teabe saamiseks võite kasutada järgmisi kõnesid:

>>> ühend.listDomainsID ()
[4, 5]

See tagastab massiivi domeeni ID-sid, mis on lihtsa libvirt-seadistuse jaoks vaid väikesed täisarvud. Usaldusväärsem viis oma VM-ide sildistamiseks, ilma et teil oleks sama ID või nimega kahte VM-i (ütleme erinevatel sõlmedel), on UUID-de kasutamine. Libvirtis võib kõigil olla UUID, mis genereeritakse juhuslikult 128-bitise arvuna. Tõenäosus, et loote kaks identset UUID-i, on üsna väike.

Teie virtuaalsete masinate võrgul, VM-idel endal ja isegi salvestusruumidel ja -mahtudel on oma individuaalsed UUID-d. Kasutage neid oma Pythoni koodis liberaalselt, selle asemel et tugineda inimeste määratud nimedele. Kahjuks on selle raamatukogu praeguses rakenduses viis domeenide UUID-de hankimiseks veidi segane. See nõuab tõepoolest VM-i ID-d (domeeni ID), see näeb välja järgmine.

domainIDs = ühendus.listDomainsID ()
domeeni ID jaoks domeeni ID-des:
domeen = konn.lookupByID ()
uuid = domeen.UUIDString ()
print (uuid)

Nüüd näete domeeni UUID-de loendit. Oleme komistanud ka uue Python Object libvirtiga.virDomain, millel on oma meetodite komplekt, mis on sarnaselt muutujaga conn, mis oli libvirt.virConnect objekt ja tal olid sellega seotud sellised meetodid nagu listDomainsID () ja lookupByID ().

Mõlemas meetodis saate kasutada Pythoni sisseehitatud dir () meetodeid, et objektid saaksid loetleda oma sisemised muutujad ja meetodid.

Näiteks:

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

See võib tõesti aidata teil kiiresti meelde tuletada meetodi täpset nime ja objekti, millega seda peaks kasutama. Nüüd, kui meil on libvirt.objekt virDomain, kasutame seda selle jooksva VM-i mitmesuguste üksikasjade loetlemiseks.

>>> domeen.info ()

See annab teile teavet VM-i oleku, maksimaalse mälu ja protsessori tuumade kohta, nagu siin näidatud.

VM-i kohta leiate ka muud teavet, kasutades erinevaid meetodeid, näiteks OSType ()

>>> domeen.OSTtüüp ()
"hvm"

Libvirt paljastava API osas on palju paindlikkust ja peate muretsema ainult oma kasutusjuhtumi pärast ja muretsemata libvirt tohutu keerukuse pärast.

Järeldus

Minu reisidel Libvirt-tehnoloogiasse oli UUID-de puudumine esimese klassi kodanikuna ilmselt ainus valupunkt, millega ma silmitsi olin, mis tundus olevat halb disainivalik. Peale selle on libvirt selle saavutamise osas üsna vahva. Jah, on palju muid asju, mida oleks võinud paremini teha, kuid tarkvara puhul on see alati nii. Tagantjärele vaadates on halvad otsused alati ilmsed, kuid tarkvara laiali kirjutamise, nii laialt levinud kui libvirt, maksumus on sageli tohutu.

Selle peale on ehitatud palju, kuna projekt arenes aeglaselt ja stabiilselt.

Selle asemel, et proovida kogu raamatukogu korraga ära õppida, soovitaksin välja pakkuda väikese projekti või idee ja selle Pythoni ja Libvirt'i abil ellu viia. Dokumentatsioon on üsna ulatuslik ja sisaldab palju näiteid ning see sunnib teid mõtlema korralikule tarkvara kujundusele ja virtualiseerimise virnale korraga.

Kuidas installida ja mängida Doomi Linuxis
Doomi sissejuhatus Doom-seeria sai alguse 90ndatel pärast algse Doomi väljaandmist. See oli kohene hitt ja sellest ajast alates on mänguseeria pälvinu...
Vulkan Linuxi kasutajatele
Iga uue põlvkonna graafikakaartidega näeme, et mängude arendajad ületavad graafilise truuduse piire ja jõuavad fotorealismile ühe sammu lähemale. Kuid...
OpenTTD vs Simutrans
Oma transpordisimulatsiooni loomine võib olla lõbus, lõõgastav ja äärmiselt köitev. Sellepärast peate endale meelepärase leidmiseks kindlasti proovima...