„Python“

„Libvirt“ su „Python“

„Libvirt“ su „Python“
Viename iš savo ankstesnių įrašų aš parodžiau, kaip galima pradėti naudotis „Libvirt“ ir „KVM“. Šis virtualizavimo kaminas nėra skirtas naudoti kaip darbalaukio virtualizavimo programinė įranga, veikiau jis skirtas paleisti serveriuose, kuriuose siūlomas didesnis lankstumas, efektyvumas ir stabilumas, o ne patogumas vartotojui. Jis turi būti automatizuotas iki ntūkst laipsnį, o ne pasikliauti rankine konfigūracija. Taigi pažiūrėkime, kaip galite prisijungti prie savo „libvirt“ demono ir automatizuoti pagrindinį VM valdymą ir stebėjimą naudodami „Python“.

Sąranka ir pagrindinės prielaidos

Debian serveryje naudoju „Libvirt KVM“ diegimą. „Python“ scenarijai, kuriuos naudosiu, veikia „Python 3“.7.3 aplinka. Šis straipsnis turėtų sušlapti kojas „Libvirt“ Python apkaustais. Kai kuriate savo programą, visada turėtumėte remtis oficialiais dokumentais, apimančiais įvairiausius naudojimo atvejus ir pakankamai dažnai atnaujinamais.

Pirmiausia įdiekime visas „libvirt“ reikalingas priklausomybes:

$ sudo apt install pkg-config libvirt-dev
$ pip3 įdiekite libvirt-python

Tai visi jums reikalingi paketai.

Vykdomi šie scenarijai ir fragmentai vietoje „Libvirt“ pagrindiniame kompiuteryje kaip root, o ne paleisti nuotoliniu klientu. Paslaugas galite pasiekti nuotoliniu būdu, tačiau tam reikės ilgų nukrypimų užtikrinant ryšį tarp kliento ir serverio. Todėl paprastumo dėlei sujungsime vietoje.

Ryšio su „Libvirtd“ paslauga užmezgimas

Norėdami pradėti, atidarykite „Python“ eilutę, importuokite „libvirt“ biblioteką ir atidarykite ryšį su „libvirt“.atviras metodas.

root @ deb: ~ # python3
„Python 3“.7.3 (numatytasis, 2019 m. Balandžio 15 d., 01:55:37)
[PĮB 6.3.0 20170516] „Linux“

Norėdami gauti daugiau informacijos, įveskite „pagalba“, „autorių teisės“, „kreditai“ arba „licencija“.

>>> importuoti libvirt
>>> conn = libvirt.atidaryti („qemu: /// system“)

Kintamasis junginys dabar gali būti naudojamas norint pateikti užklausą apie jūsų libvirt demoną, ir mes tai padarysime netrukus. Bet pirmiausia šiek tiek nukrypstant.

„Libvirt“ gali būti naudojamas valdyti daugybę skirtingų virtualizavimo ir konteinerių kaupimo. KVM-QEMU, Xen ir LXC yra populiariausi iš jų. Taigi, kai įvesite libvirt.open ('qemu: /// system') libvirt suteikia galimybę rinkti informaciją ir valdyti QEMU svečius. Lygiai taip pat galite pasikalbėti su „LXD daemon“ arba „Xen“ hipervizoriumi naudodami atitinkamai „lxc: /// system“ arba „xen: /// system“.

Panašiai ir metodas libvirt.jūsų žinioje nėra vienintelis „open“). „open“ (vardas), „openAuth“ (uri, auth, vėliavos) ir „openReadOnly“ (vardas) yra trys skirtingi skambučiai, kurių kiekvienas grąžina „virConnect“ objektą ir siūlo skirtingo lygio pagrindinio kompiuterio valdymą. Daugiau apie juos galite perskaityti čia. Kol kas mes turime prisijungimą kaip „virConnect“ klasės objektą. Šis objektas yra vartai beveik viskam, pradedant nuo paties hipervizoriaus konfigūravimo, baigiant svečių ir jų išteklių paskirstymo modifikavimu.

Baigę dirbti su objektu, būtinai uždarykite ryšį, paskambinę uždarymo metodu.

>>> jung.Uždaryti()

Tačiau kol kas nevykdykite minėtos komandos. Nes mes dar šiek tiek žaisime su libvirt. Paklauskime savo hipervizoriaus kelios informacijos apie save, pvz., Pagrindinio kompiuterio pavadinimo ir iš viso VCPU, kuriuos jis gali pasiūlyti svečiams VM.

>>> jung.„getHostname“ ()
„deb“
>>> jung.getMaxVcpus ('qemu')
16

Dabar turime suprasti, kad naudojant „Libvirt“ metaduomenis apie objektus, tokius kaip hipervizoriaus statistika, VM, jų tinklo ir saugojimo informacija ir kt., Visi vaizduojami XML formatu. XML yra panašus į JSON, tik šiek tiek nepatogesnis (ir šiek tiek senesnis). Duomenys saugomi ir pateikiami kaip eilutės pažodinis žodis, o tai reiškia, kad jei pateiksite užklausą „libvirt“ ir šios užklausos išvestis yra XML, gausite tikrai ilgą vienos eilutės išvestį, kurioje „\ n“ yra tiesioginė eilutė, o ne nauja linija. „Python“ integruota spausdinimo funkcija gali ją išvalyti, kad ją būtų galima lengvai skaityti

>>> spausdinti (jung.„getSysinfo“ ())


„Dell Inc.“.
A14

 

VM sąrašas ir stebėjimas

Jei prižiūrite daugybę VM, jums reikia metodo sukurti šimtus vienodos konfigūracijos VM, kurie taip pat tinkamai skirstomi nuo paprastų vieno sriegio darbo krūvių iki kelių branduolių, kelių gijų apdorojimo. „Libvirt“ skambina į svečius VM (arba konteinerius, jei naudojate LXC) Domenai ir galite išvardyti informaciją apie atskirus domenus, taip pat juos sukonfigūruoti, jei jūsų „virConnect“ objektas turi pakankamai privilegijų.

Norėdami gauti informacijos apie VM ir jų išteklių naudojimą, galite naudoti šiuos skambučius:

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

Tai grąžina masyvą domeno ID, kurie yra tik maži skaičiai paprastai libvirt sąrankai. Patikimesnis būdas pažymėti savo VM, neturint dviejų VM (tarkime, skirtinguose mazguose) su tuo pačiu ID ar vardu, yra naudoti UUID. Libvirt viskas gali turėti UUID, kuris yra atsitiktinai sugeneruotas 128 bitų skaičiumi. Tikimybė, kad sukursite du identiškus UUID, iš tiesų yra gana maža.

Jūsų virtualių mašinų tinklas, patys VM ir net saugyklos telkiniai bei tomai turi savo individualius UUID. Liberaliai naudokitės jais savo „Python“ kode, užuot pasikliaudami žmonių priskirtais vardais. Deja, dabartinis šios bibliotekos diegimas, mano nuomone, yra šiek tiek nepatogus domenų UUID. Jums reikia pateikti VM ID (domeno ID), štai kaip jis atrodo.

domainIDs = jungtis.listDomainsID ()
domeno ID domeno ID:
domenas = jungtis.lookupByID ()
uuid = domenas.UUIDString ()
spausdinti (uuid)

Dabar galite pamatyti domeno UUID sąrašą. Taip pat užklydome į naują „Python Object“ libvirt.„virDomain“, kuris turi savo metodų rinkinį, panašiai kaip kintamasis junginys, kuris buvo libvirt.„virConnect“ objektą ir turėjo su juo susietus metodus, tokius kaip „listDomainsID“ () ir „lookupByID“ ().

Abiem šiems metodams galite naudoti „Python“ integruotuosius „Dir“ () metodus, kad objektai galėtų išvardyti savo vidinius kintamuosius ir metodus.

Pavyzdžiui:

>>> rež (jungtis)
['_… Gs', 'schedulerType', 'ekrano kopija', 'securityLabel', 'securityLabelList',
'sendKey', 'sendProcessSignal', 'setAutostart', 'setBlkioParameters', 'setBlockIoTune',
'setGuestVcpus', 'setInterfaceParameters', 'setMaxMemory', 'setMemory', 'setMemoryFlags',
„setMemoryParameters“, „setMemoryStatsPeriod“, „setMetadata“, „setNumaParameters“,
„setPerfEvents“, „setSchedulerParameters“, „setSchedulerParametersFlags“, „setTime“,
„setUse“ ...]

Tai tikrai gali padėti greitai prisiminti tikslų metodo pavadinimą ir objektą, su kuriuo jis turėtų būti naudojamas. Dabar, kai turime libvirtą.„virDomain“ objektą, naudokime jį įvairiai informacijai apie šį veikiantį VM.

>>> domenas.informacija ()

Tai suteikia jums informacijos apie VM būseną, didžiausią atmintį ir procesoriaus branduolius, kaip parodyta čia.

Taip pat galite rasti kitos informacijos apie VM naudodami skirtingus metodus, pvz., OSType ()

>>> domenas.OST tipas ()
„hvm“

Yra daug lankstumo kalbant apie API, kurį atskleidžia libvirt, ir jūs turite jaudintis tik dėl savo naudojimo atvejo ir nesijaudindami dėl milžiniško sudėtingumo, kurį „libvirt“ valdo.

Išvada

Keliaudamas į „Libvirt“ technologiją, UUID nebuvimas kaip pirmos klasės pilietis buvo bene vienintelis skaudus taškas, su kuriuo susidūriau ir kuris atrodė kaip netinkamas dizaino pasirinkimas. Išskyrus tai, libvirt yra gana puikus už tai, ką pasiekia. Taip, yra daugybė kitų dalykų, kuriuos buvo galima padaryti geriau, tačiau taip yra visada su programine įranga. Žvelgiant atgal, blogi sprendimai visada yra akivaizdūs, tačiau tokios plačiai paplitusios programinės įrangos, kaip „libvirt“, perrašymo kaina dažnai yra didžiulė.

Jo viršuje buvo pastatyta daug, nes projektas vystėsi lėtai ir stabiliai.

Užuot bandęs išmokti visą biblioteką vienu metu, aš rekomenduočiau sugalvoti nedidelį projektą ar idėją ir įgyvendinti tai naudojant „Python“ ir „Libvirt“. Dokumentacija yra gana išsami ir pateikiama daugybė pavyzdžių, ir tai tikrai verčia jus galvoti apie tinkamą programinės įrangos dizainą ir virtualizavimo kaminą tuo pačiu metu.

Valdykite ir valdykite pelės judėjimą tarp kelių „Windows 10“ monitorių
„Dual Display Mouse Manager“ leidžia jums valdyti ir konfigūruoti pelės judėjimą tarp kelių monitorių, sulėtinant jo judėjimą šalia sienos. „Windows 1...
„WinMouse“ leidžia tinkinti ir pagerinti pelės žymeklio judėjimą „Windows“ kompiuteryje
Jei norite pagerinti numatytąsias pelės žymiklio funkcijas, naudokite nemokamą programinę įrangą „WinMouse“. Tai prideda daugiau funkcijų, kurios padė...
Pelės kairiuoju pelės mygtuku mygtukas neveikia „Windows 10“
Jei naudojate specialią pelę su savo nešiojamuoju kompiuteriu arba staliniu kompiuteriu, tačiau neveikia pelės kairysis mygtukas dėl tam tikrų priežas...