Python

Libvirt z Pythonom

Libvirt z Pythonom
V enem od svojih prejšnjih prispevkov sem pokazal, kako lahko začnemo z Libvirtom in KVM. Ta paket za virtualizacijo naj ne bi bil uporabljen kot namizna programska oprema za virtualizacijo, temveč naj bi deloval na strežnikih, ki ponujajo večjo prilagodljivost, učinkovitost in stabilnost namesto uporabniku prijaznosti. Namenjen je avtomatizaciji do nth stopnje, namesto da se zanašate na ročno konfiguriranje. Poglejmo torej, kako se lahko povežete s svojim demonom libvirt in avtomatizirate osnovno upravljanje in spremljanje VM s pomočjo Pythona.

Namestitev in osnovne predpostavke

Na strežniku Debian uporabljam namestitev Libvirt KVM. Skripti Python, ki jih bom uporabljal, se izvajajo v Pythonu 3.7.3 okolje. Ta članek naj bi vam namočil noge z Libvirtovimi vezmi Python. Ko načrtujete svojo aplikacijo, se morate vedno sklicevati na uradno dokumentacijo, ki zajema širok spekter primerov in se pogosto pogosto posodablja.

Najprej namestimo vse odvisnosti, potrebne za libvirt:

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

To so vsi paketi, ki jih potrebujete.

Zaženejo se naslednji skripti in delčki lokalno na gostitelju Libvirt kot root, namesto da se izvaja na oddaljenem odjemalcu. Do storitev lahko dostopate na daljavo, vendar bi bilo potrebno dolgo odstopanje do zagotavljanja povezave med odjemalcem in strežnikom. Zato se bomo zaradi poenostavitve povezovali lokalno.

Vzpostavitev povezave s storitvijo Libvirtd

Za začetek odprimo poziv Python, uvozimo knjižnico libvirt in odpremo povezavo z libvirt.odprta metoda.

root @ deb: ~ # python3
Python 3.7.3 (privzeto, 15. april 2019, 01:55:37)
[GCC 6.3.0 20170516] na Linuxu

Za več informacij vnesite »pomoč«, »avtorske pravice«, »dobropisi« ali »licenca«.

>>> uvozi libvirt
>>> conn = libvirt.odprto ('qemu: /// sistem')

Spremenljivko conn lahko zdaj uporabite za poizvedovanje vašega demona libvirt in to bomo storili v kratkem. Najprej pa malo odmika.

Libvirt se lahko uporablja za upravljanje številnih različnih nizov za virtualizacijo in vsebništvo. KVM-QEMU, Xen in LXC so med njimi najbolj priljubljeni. Torej, ko vnesete libvirt.open ('qemu: /// system') libvirt vam omogoča zbiranje informacij o gostih QEMU in upravljanje z njimi. Prav tako se lahko pogovorite z demonom LXD ali hipervizorjem Xen s sistemom lxc: /// ali sistemom xen: ///.

Podobno je metoda libvirt.open () ni edini, ki vam je na voljo. open (name), openAuth (uri, auth, flags) in openReadOnly (name) so trije različni klici, od katerih vsak vrne objekt virConnect in ponuja različno raven nadzora nad gostiteljem. Več o njih si lahko preberete tukaj. Za zdaj imamo conn kot objekt razreda virConnect. Ta objekt je prehod za skoraj vse, od konfiguriranja samega hipervizorja do spreminjanja gostov in njihove dodelitve virov.

Ko končate z delom z objektom, ne pozabite zapreti povezave, tako da na njej pokličete metodo close.

>>> povez.zapri ()

Vendar še vedno ne zaženite zgornjega ukaza. Ker se bomo še malo poigrali z libvirtom. Vprašajte našega hipervizorja nekaj podrobnosti o sebi, kot je ime gostitelja, in število vCPU-jev, ki jih lahko skupaj ponudi gostujočim VM-jem.

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

Zdaj moramo razumeti, da so z metapodatki Libvirt o predmetih, kot so statistika hipervizorjev, VM-ji, njihovi podatki o omrežju in shranjevanju itd., Predstavljeni v obliki XML. XML je nekako podoben JSON-u, le nekoliko okornejši (in nekoliko starejši). Podatki so shranjeni in predstavljeni kot nizovna dobesedna beseda, kar pomeni, da če poizvedujete po libvirt in je rezultat te poizvedbe XML, boste dobili resnično dolg izhod v eno vrstico z \ \ n kot dobesedni niz in ne kot nova vrstica. Pythonova vgrajena funkcija tiskanja jo lahko očisti za človeško čitljivost

>>> tiskanje (prik.getSysinfo ())


Dell Inc.
A14
..
 

Seznam in spremljanje VM

Če vzdržujete veliko paleto VM-jev, potrebujete metodo za ustvarjanje na stotine VM-jev z enakomerno konfiguracijo, ki prav tako ustrezno merijo od enostavnih delovnih obremenitev z enim navojem do večjedrne obdelave z več navoji. Libvirt pokliče gostujoče VM-je (ali vsebnike, če uporabljate LXC) Domene in lahko navedete podatke o posameznih domenah in jih konfigurirate, če ima vaš virConnect zadostne pravice.

Za informacije o VM-jih in njihovi porabi virov lahko uporabite naslednje klice:

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

To vrne vrsto ID-jev domen, ki so le majhna cela števila za preprosto nastavitev libvirt. Zanesljivejši način označevanja vaših VM-jev, ne da bi imeli dva VM-ja (recimo na različnih vozliščih) z istim ID-jem ali imenom, je uporaba UUID-jev. V libvirtu ima lahko vse UUID, ki je naključno generirano 128-bitno število. Verjetnosti, da boste ustvarili dva enaka UUID, so zelo majhne.

Omrežje za vaše navidezne stroje, sami VM-ji in celo skladišča in nosilci imajo svoje posamezne UUID-je. Uporabite jih v svoji kodi Python, namesto da se zanašate na človeška dodeljena imena. Na žalost je način, kako dobiti UUID-je domen, po mojem mnenju nekoliko neurejen pri trenutni izvedbi te knjižnice. Zahtevate, da navedete ID VM (ID domene), takole je videti.

domainIDs = conn.listDomainsID ()
za ID domene v ID-jih domene:
domena = prik.lookupByID ()
uuid = domena.UUIDString ()
natisni (uuid)

Zdaj lahko vidite seznam UUID-jev domene. Naleteli smo tudi na nov libvirt predmeta Python.virDomain, ki ima z njim povezan svoj nabor metod, podobno kot spremenljivka conn, ki je bila libvirt.virConnect in je imel z njim povezane metode, kot sta listDomainsID () in lookupByID ().

Za obe metodi lahko uporabite Pythonove vgrajene metode dir (), tako da lahko predmeti navedejo svoje notranje spremenljivke in metode.

Na primer:

>>> 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 vam lahko resnično pomaga hitro priklicati natančno ime metode in predmet, s katerim bi ga bilo treba uporabiti. Zdaj, ko imamo libvirt.virDomain, uporabimo ga za naštevanje različnih podrobnosti o tem delujočem VM.

>>> domena.info ()

Tako dobite informacije o stanju VM, največjem pomnilniku in jedrih procesorja, kot je prikazano tukaj.

Druge informacije o VM lahko najdete tudi z različnimi metodami, kot je OSType ()

>>> domena.OSType ()
'hvm'

Pri API-ju, ki ga izpostavlja libvirt, je veliko prilagodljivosti, zato morate skrbeti le za primer uporabe in brez izjemne zapletenosti, ki jo obravnava libvirt.

Zaključek

Pri mojih potovanjih v tehnologijo Libvirt je bila odsotnost UUID-ov kot prvovrstnega državljana verjetno edina bolečina, s katero sem se soočila, kar se mi je zdelo slaba oblikovalska izbira. Razen tega je libvirt precej čudovit za to, kar doseže. Da, veliko je še stvari, ki bi jih lahko naredili na boljši način, vendar je to vedno v primeru programske opreme. V ozadju so slabe odločitve vedno očitne, vendar so stroški prepisovanja programske opreme, tako razširjene kot libvirt, pogosto izjemni.

Veliko je bilo zgrajenega na vrhu, saj se je projekt počasi in vztrajno razvijal.

Namesto da bi se poskušali naučiti celotne knjižnice naenkrat, priporočam, da izveste majhen projekt ali idejo in to izvedete z uporabo Python in Libvirt. Dokumentacija je precej obsežna z veliko primeri in vas resnično sili, da hkrati razmišljate o ustreznem oblikovanju programske opreme in paketu za virtualizacijo.

Levi gumb miške ne deluje v sistemu Windows 10
Če s prenosnikom ali namiznim računalnikom uporabljate namensko miško, vendar gumb miške z levim klikom ne deluje v operacijskem sistemu Windows 10/8/...
Kazalec skoči ali se naključno premika med tipkanjem v sistemu Windows 10
Če ugotovite, da kazalec miške med tipkanjem v prenosnem računalniku ali računalniku Windows samodejno, naključno preskakuje ali se premika sam, vam l...
Kako obrniti smer drsenja miške in sledilne ploščice v sistemu Windows 10
Miška in Sledilna ploščicaRačunalništvo ni samo enostavno, ampak bolj učinkovito in manj zamudno. Življenja brez teh naprav si ne moremo predstavljati...