A következő címkéjű bejegyzések mutatása: kerub. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: kerub. Összes bejegyzés megjelenítése

2017. április 22., szombat

ki profitált a kerub-ból idáig...

Mivel intenzíven használok pár szoftvert, bugreportok és patchek formájában néhány project már profitált abból, hogy a vonaton munkába menet nem csak a tájat nézem. Pár közűlük, amikre emlékszem:
  • Jetty és CXF bugreportok, ezek a csákók igazán rendesek voltak és pár nap alatt kijavította mindkét csapat a hibákat.
  • Shiro bugfix
  • Kotlin - többnyire apróságok a stdlib-ben, egyszer egy apróság a compilerben, párszor az IDE-ben.
  • Infinispan bugreportok - bár utóbb rájöttem hogy nem érdemes sietni az infinispan upgradekkel mert a release után úgyis találnak pár hibát és kiadnak rá egy javítást. Egy kis türelem sok időt megtakarít.

Már csak azért is meg akartam ezeket a projekteket említeni pozitív példaként, mert negatív példa is akad bőven az OSS projectek között.

2017. március 6., hétfő

kerub - a packaging frontról jelentjük

Kerub. Kicsit megint hanyagoltam a blogolást, de a munkára igyekeztem időt szorítani. A nagyobb dolgok amikbe belerúgtam mostanában:
  1. yum/dnf repok CentOS 7-hez és Fedora 23-hoz. yum (vagy dnf) install után a kerub elindul és megy ugyanúgy, mint a fejlesztőkörnyezetben. A házi jenkins buildjei fel is küldik minden változtatás után a friss RPM-eket.
    Készül az Ubuntu és a Debian csomagoló is.

    A csomagokról annyit el kell mondanom, hogy bár amennyire tudom, korrekt módon csomagolok (nem kell kikapcsolni a selinuxot, lecsapni a firewallt, stb), a disztrók csomagolási útmutatóját egyszerűen betarthatatlannak találom és figyelmen kívül hagyom. Konkrétan az, hogy az infinispant és a jgroups-ot is rpm csomagokból oldjam fel a WEB-INF/lib helyett, az esélytelen.
    Ezt alighanem más is így találta, mert a disztrók összesen 0 db java webalkalmazást tartalmaznak. A kerub se lesz benne soha.

    A csomagolás egyébként olyan, mintha az apolló űrhajót mamutbőrbe
  2. Egy teljesen új projectet kezdtem integrációs tesztekhez. Bár egész sok integrációs teszt található a fő projektben, ami simán a maven embedded jetty-jével elszalad, ezek nem képesek olyan eseteket lefedni, mint pl cluster, de akár még olyat sem, hogy virtuális gépben futó "host", mert futniuk kell jenkinsben, a linuxos desktopomon, travis-ban, meg a halál répáján.
    Az új projekt ilyen integrációs teszteket tartalmaz, csinál egy virtuális gépet, feltelepíti a kerub webappot, tesz elé load balancert, ad hozzá hostokat, feltölt egy virtuális merevlemez imaget, elindít egy virtuális gépet, satöbbi.
    Nyilván ez úgy magában is elég lassú lesz, úgyhogy karrier szempontokat szem elött tartva úgy gondoltam ez most had legyen groovy-ban. Grooovy!!!
  3. Már majdnem ott tartok, hogy a web**cket biztonsági teszteket befejezzem. Hozzá kell tennem persze hogy nem csak a tesztekről van szó hanem konkrétan az implementációról is :-D

Na jó, ennyi bőven sok, dolgozzunk!

2017. január 1., vasárnap

lights out

Lights Out Management. Ezt túrom mostanában amikor van kis időm, érdekes téma egy régi, de nem elfelejtett ötletemmel kapcsolatban.

A desktop-gagyi

A legtöbb PC, még a nyomi kis NUC is tartalmaz egy Wake ON Lan nevű feature-t. Ez elég egyszerű, egy UDP broadcastot kell küldeni a hálózatra, legyen benne egy speciális header és utánna 6-szor megismételve Csipkerózsika MAC address-e. Lássanak csodát, Csipkerozmária felébred és bootolni kezd... ha engedélyezve van ez a BIOS-ában persze.
A nyilvánvaló hátrányok:
  • akárki megcsinálhatja, semmilyen azonosítás nem kell hozzá
  • csak a helyi hálózaton működik mert a router valószinűleg eldobja
  • semmilyen választ nem kapsz róla
  • megbízhatatlan, pl ha kihúzod a dugót és visszadugod, lehet hogy nem kapcsol be újra egészen egy teljes indításig
Célszerű kikapcsolni :)

A gáz...

Szervereknél elterjedt szabvány az IPMI. Ez majdnem minden szerverben megvan - illetve a OpenCompute minimalista cuccokban alighanem nincs, de olyan senkinek sincs.
Az IPMI nem csak arra jó, hogy ki-be kapcsolgasd a szervert, tudsz vele:
  • konzolhoz csatlakozni
  • sensor információkat olvasni
  • akár boot médiumot is feltölteni - például erről már szivesen lemondanék
A problémák pedig:
  • UDP - vajon miért?
  • Sajnos nem biztonságos, és a világon mindent meg lehet vele csinálni (lásd fent)
  • A legtöbb vendor egy kis java applettel teszi hozzáférhetővé - ne tessék... java applet 2017-ben!!!
Előnye: könnyen beszerezhető a használtas boltokból, fillérekért.

A trendi

Az IPMI trónfosztására készül egy RedFish nevű specifikáció. Ez egy REST, http + JSON alapú dolog, amihez egyszerű akármilyen klienst fabrikálni. Elég érdekes, például lehet vele blade szervereket is buherálni, egyetlen management felület ad hozzáférést az összes blade-hez. A hátrányait még senki sem ismeri, annyira új, de nyilván emiatt csak újonnan lehet beszerezni, tesztelésre és fejlesztésre ez kicsit talán drága nekem. Az az ötlet, hogy egy szoftveres megoldással helyettesítem, egy vagy több VM-et indítana el libvirt-en keresztül, de végül úgyis igazi hardverrel kellene tesztelni. Sebaj, majdcsak megszán valaki...

Helyzet

Szóval a következő években érkező új szerver típusok többnyire redfish-sel érkeznek majd, de ott lesz rajtuk az IPMI is, mert azt mindenki ismeri és támogatja. Gyanús, hogy nem lehet választani, hogy csak redfish legyen vagy IPMI. Van az alaplapon egy jumper, azzal lehet kikapcsolni a teljes BMC-t, akkor nem lesz egyik se.

Az oVirt-ben például ez úgy történik, hogy a management szerver egy host-ot kér meg, hogy az ébressze fel a másik hostot. Nyilván legalább egy hostot mindig ébren kell tartani, de nem ez a kifogásom ellene. Nem tetszik az at ötlet, hogy a hostok számára elérhetővé teszik a management interface-t, túl nagy felületet ad a támadásra.

A kerub-ban inkáb a kontrollert akarom használni erre a célra, ehhez viszont írnom kell egy minimalista IPMI klienst, valamint a fenti redfish dev env szintén nagyon jó lenne... Jó sok meló lesz, lássunk hát hozzá :)
 Boldog buékot.

2016. december 24., szombat

planner - scheduler kerub módra

Ebben az iparban olyan factory-k vannak, amiknek nincs kéményük, managerek, akik nem járnak meetingre és engine-k, amik nem vontatnak semmit. Nyilván kicsit lököttek is vagyunk. Ebbe fog most az alábbi is passzolni egy kicsit, elég absztrakt lesz és annyi időt szánok rá a magyarázatra, amíg a managerem fel nem ébred.

Az előző bejegyzésekben már említettem a 2000es évek IaaS architektúrájának egy tipikus elemét, a schedulert.
A különbség az oVirt, a Cloudstack és más IaaS platformok schedulere és a kerub plannere között az, hogy míg a schedulereket akkor hívja meg a rendszer, amikor be kell ütemezni egy új virtuális gépet, a planner minden eseményt megkap. Minden eseménynél értékeli, hogy az új helyzet minden expectationt (azaz SLA contract) kielégít-e. Például a virtuális gép, aminek futnia kell, az tényleg fut, és olyan környezetben és hardweren amit kért a felhasználó.

Minden event az tényleg minden eventet jelent, amikor a szerver jelenti az éppen aktuális terheltségét az egy event, amikor a VM módosult, az szintén egy event.

Amikor az expectation nem teljesül, akkor a planner lépéseket gyárt le lépés-factory-k segítségével. A factory egyetlen dolgot kap: a jelenlegi helyzetet, ami magába foglalja a VM-ek, virtuális merevlemezek satöbbi, valamint a fizikai eszközök statikus (nem változó), dinamikus (állapot) és konfigurációs adatait. Ez alapján egyetlen dolgot csinálnak: listát a lehetséges lépésekből. A factory-k teljes mértékben tesznek arra, hogy van-e valami értelme a műveletnek, csak legyártják a lépéseket és kész.

Minden legenerált lépés az aktuális állapotot transzformálja egy másik állapotra. A progmatos állapottér-model elkötelezett hívei azonnal vegyék le a kezüket a farkukról, fúj gusztustalan! Szóval például egy bizonyos fajta lépés az egyik hostról átpakolja a másik hostra az egyik VM-et (nevezzük migrációnak), egy másik egy hostot kapcsol ki, (nevezhetjük power managementnek, de bug is lehet)

A lépéseknek persze van költsége, különböző költségtípusok, például idő, számítási és IO igény, vagy akár a kockázat, hogy valami gixer üt be, az is egyfajta költség.

Ezen kívül a lépéseknek vannak erőforrás igényei is, például egy host osztott vagy kizárólagos használata, tárhely vagy számítási kapacítás, illetve a virtuális erőforrások, amit használnak. Ez a feladatok koordinálásához kell, pl hogy ne tervezzen keresztbe már folyamatban lévő ügyek végrehajtásával, ne kapcsoljuk ki azt a hostot amit egy másik terv éppen bekapcsolt valamilyen célból, ilyesmi.

Nyilván minden lépéshez kell egy végrehajtó kód is, mert a lépés önmagában olyan absztrakt hogy fingja nincs melyik lábbal induljon el, csak az állapotteret transzformálja. A végrehajtónak viszont van kapcsolata a konkrét anyagi világgal, ez többnyire egy ssh kapcsolat egy vagy több kiszolgálóhoz.

hmm mi hiányzik még... ja persze, hogy ez mitől kezdene működni... Az már egyszerű, csak egy kereső algoritmus. Egy depth-first backtrack-et csináltam rá, ezt nevezhetjük átmeneti megoldásnak, mert valószinűleg más keresés gyorsabb lenne, de ez is tűrhetően párhuzamosítható.

Ennek az eredménye az, hogy a kerub keres egy módot arra, hogy a kéréseknek megfelelően futtassa a virtuális gépeket, merevlemezeket, hálózatot, satöbbi. A többi IaaS megnézi, hogy van-e passzoló host és ha nincs akkor pl nem indul a vm, csókolom.

Az biztosan gyanús már az elejétől, hogy a planner elég rendesen busy-box, mert minnél több a VM és a host, annál több event érkezik és annál több expectation-t kell ellenőrizni. Másrészt az egyre több factory egyre több lépést generál az egyre több VM-re. Ezek sajnos problémák, bár van rá ötletem, a keresési probléma egyébként is exponenciálisan növekedik. Jelenleg egy pár szűkítés van érvényben a factory-kra a kielégítetlen elvárások típusa alapján, de sokat az érne, ha nem kellene minden elvárást mindig kiértékelni, ha a factory-k listája lazy módon értékelődne ki.
Meglátjuk meddig jutok el vele, de a cél egyébként nem matematikai értelemben vett optimális állapot hanem csak egy egész jó :)

2016. november 13., vasárnap

No kerub-agent

A legtöbb IaaS egy agent nevű szoftverre épít, ami minden host-on fut. Ez egyrészt egy olyan szoftver, ami a kommunikációt bonyolítja a controller és a host között, másrészt egy absztrakciós réteg is.
Az ovirt-ben ez egy VDSM nevű python script, ami XML-eket kap a kontrollertől és azt lefordítja másféle XML-be, konkrétan a libvirt XML formátumába, másrészt pedig néha operációs rendszer parancsokra, szóval kicsit többet csinál mint egy XSLT processzor :)
A cloudstack-nek egy java agentje van. Elsőre kicsit soknak tünhet akár fél gigát is beáldozni a host memóriájából egy ilyen, viszonylag erőforrásigényes processznek, de tipikusan a cloudstack felhasználók TB-ben mérik a host memóriát és fél giga nem kategória. A java-t inkáb azért nem tartom szuperfrankó választásnak agenthez, mert brutálisan béna az operációs rendszerekkel az integrációja, például a processz kezelés, meg persze mindenkinek vannak ellenérzései a JNI-vel szemben. JNI pedig van, persze hogy van...
Viszont itt nyilván előny, hogy a java fejlesztő, aki a kontrollert buherálja, az az agentet is simán buherálhatja minden további tanulmányok nélkül.

Mindkettő http protokolt használ: kapcsolódunk, kezetrázunk, bemutatkozunk, valami teljesen minimális dolgot közlök veled aztán elbúcsúzunk és fél másodperc múlva újrakezdjük. Az oVirt még emellett egy döbbenetes dolgot is csinál a tranzakciókkal, ami a MS-SQL-ből PostgreSQL-re való áttérés (és talán egy súlyos félreértés) eredménye.


Amikor azon gondolkodtam, hogy hogyan tudnék jó agentet a kerubhoz, elösször is inkáb azon gondolkodtam hogyan lehetne megúszni az egészet, mert nincs rá időm. Másodszor pedig szerettem volna megszabadulni a kommunikációs overhead-tól, pl xml parsing.

Végülis az, hogy nincs agent, azt nevezhetjük félrevezető marketing-baromságnak, mert valamilyen szoftvernek futnia kell, amivel kommunikálunk. Ennyi lett: OpenSSH, az OpenBSD klasszikus SSH szervere, ami fut linuxon, windowson (cygwin), mindenféle BSD-n és solarison, ráadásul többnyire része egy szerver alaptelepítésnek.


Az absztrakciós réteg... egy része ott van a kontrollerben, mert annak tudnia kell, hogy milyen operációs rendszerhez beszél, az absztrakciók nagy része viszont elment. Eleinte csináltam abstrakciót a hypervisor-elé, de később találtam jobb megoldást és mostanában lassan eltávolítom ezeket a kerub-ból.

Ez most hosszú lett, mert vasárnap van, legyen legközelebb például az, hogy mit csinál a planner és miért nem kellenek az absztrakciók.

2016. november 9., szerda

kerub - az "expectation"

Az expectation (elvárás) az a dolog, ami a kerub nagy planner-egyenletének az egyik oldala. Elvárásokat határozhat meg az ember virtuális erőforrásokhoz (virtuális gép, virtuális merevlemez, hálózat) teljesítményükre, megbízhatóságukra, futási környezetükre vonatkozóan.
Pár ilyen elvárás:
  • Redundancia - egy merevlemezre megmondhatjuk hogy mennyi másolat kell hogy legyen belőle - esetleg egy vagy több hoston tarthatjuk-e a másolatokat.
  • Kölcsönös kizárás (not-same-host) virtuális gépre és virtuális merevlemezekre lehet használni, például ha két tomcatunk között session replikációt játszunk, akkor igazán hülye dolog lenne a IaaS-tól ha ugyanazon a kiszolgálón hagyná futni őket. Ha a kiszolgáló elszáll, mindkettő tomcat bebukik. Hasonlóan pl scale-out adatbázisok (cassandra) merevlemezeinél.
  • Host-tal kapcsolatos elvárások, pl ECC-memória, tápegységek száma, vagy akár a gyártó is (még van ember, aki hisz az IBM-ben pl, mindenki hülyének tartja de van pénze)
  • Nyilván I/O teljesítmény, CPU teljesítmény és satöbbi elvárások
És így tovább, ilyenből egész sok van...

2016. november 7., hétfő

Műsorváltozás - kerub

Kicsit másként fogom használni ezt a blogot most egy ideig, mert nagyon kevés időm van rá, hogy ide írjak. Ez nem feltétlenül baj, mert nektek meg kevés időtök van rá, hogy elolvassátok, csak nem fogok rajta sokáig töprengeni, itt landol majd sokminden mint vasárnap hajnalban a diszkó elött a járdán.

Szóval mostanában ezen a kerub nevű dolgon dolgozok. A kerub egy IaaS prototípus. Arról, hogy IaaS alighanem mindenkinek az OpenStack jut eszébe. A legtöbb barátom OpenStack-en dolgozik vagy dolgozott, egy egész hadsereg lehet rajta. És mennyi ZS...

Nade kerub... Mi is lenne az alapötlet? Csak mert az egy jó kezdőlépés lenne ugye :)
A kerub-ot azért kezdtem el, mert ki akartam próbálni egy másmilyen megközelítést a virtuális gépek schedulerére. Bár a kernel scheduler abszolut tudományos dolog, sajnos a cloud rendszerek schedulerei enterprise agybajok.
A kerub schedulerétől elösször is azt akartam, hogy ne okozzon sok seggfájást, találja ki, hogyan tudja kielégiteni a felhasználók elvárásait.
Ja mert ez a tényleg fontos ötlet, a felhasználóknek elvárásaik vannak, mindig minden pillanatban azt nézi a kerub, hogy ezek az elvárások teljesülnek-e, illetve hogyan lehet kielégíteni őket. Nem kell servicenow ticketet nyitni, mint melóban, kerub tudja ha baj van és dolgozik is rajta.

Akkor legyen most gyorsan csak ennyi :)