Tanulj az EPAM szenior szakértőitől! Remote DevOps Akadémiájuk Téged is vár!
ITmap: Gábor, kezdjük azzal, hogy mit is jelent DevOps kifejezés?
Dávid Gábor: A rövidítés az angol development (fejlesztés) és operations (üzemeltetés) szavakból származik, nagyon egyszerűen megfogalmazva a DevOps mérnök egy olyan fejlesztő, aki ért az üzemeltetéshez is. A dolog ennél természetesen sokkal bonyolultabb: a DevOps szakember olyan megoldásokat szállít, amelyek segítik a fejlesztő csapatot abban, hogy a megfelelő fejlesztői és éles környezet álljon elő, azzal a céllal, hogy az előforduló hibákat, legyen az programhiba, vagy az informatikai környezetből származó, mielőbb orvosolni lehessen. A DevOps gyakorlatok és az ezekhez használatos eszközök bevezetésével a fejlesztő csapatok hatékonyabban reagálhatnak az ügyfelek igényeire, növelhetik az alkalmazások megbízhatóságát, összességében gyorsabban tudják elkészíteni a terméket. A DevOps eszközökkel automatizálni és optimalizálni tudjuk a fejlesztési-tesztelési folyamatokat a technológián keresztül.ITmap: A fő fogalom tisztázása után térjünk rá a Te hátteredre! Milyen tanulmányokat folytattál, illetve milyen karrierlépcsőket jártál be, amíg eljutottál a DevOps mérnök pozícióig?
Dávid Gábor: Több szempontból sem egy klasszikus karrierút az enyém, kezdjük rögtön azzal, hogy a középiskola után nem sikerült a főiskolára bekerülnöm, pedig általános iskolás korom óta szerettem volna informatikával, azon belül programozással foglalkozni. Így más területen kezdtem el dolgozni, azonban a fejlesztés továbbra is megmaradt hobbiként. Ezen kívül nagyon érdekelt rendszerintegráció is, azaz az, hogy hogyan lehet különböző rendszereket eredményesen összekötni. Mivel komolyan gondoltam azt, hogy annyi tudást szedek magamra autodidakta módon, amennyit csak lehet, első PC-m megvásárlást követően – miután túllendültem azon a gyakori fázison, amikor a gépet csak arra használjuk, hogy játszunk rajta – feltelepítettem életem első Linux operációs rendszerét, innentől kezdve pedig nem volt megállás. Több Linux disztribúciót kipróbáltam, míg sikerült elérnem azt, hogy megfelelően működjön a gép, a megszerzett tapasztalatokat pedig a gyakorlatba is átültettem. Ekkoriban egy helyi önkormányzatnál dolgoztam, ahol bevezettem a publikus levelezési szolgáltatást a megfelelő kontrollok biztosításával, Linux szervereket telepítettem, rendszerek integrációját végeztem. Ezek egyben mind hobbi projektek is voltak, amelyekből rengeteget tanultam: strukturált hálózatok kiépítését, hálózati forgalom irányítását (routing), adatátviteli kapcsolók (switchek) használatát. Szakmai szempontból a nagy előrelépést az jelentette, amikor a Szegedi Tudományegyetem egyetemi könyvtárában hálózati és szerver rendszergazdaként helyezkedtem el. Itt végre professzionális IT környezettel találkoztam (több ezer hálózati végpont, több száz munkaállomás, nagy teljesítményű szerverek, Cisco hálózati eszközök). Öt évig dolgoztam itt, mélyítettem és rengeteg új dologgal bővítettem ismereteimet. Megtanultam enterprise, illetve nagy rendelkezésre állású rendszereket nem csak üzemeltetni, de összeállítani is, különböző technológiákat úgy összekötni, hogy azok egy komplex szolgáltatássá álljanak össze, hálózatokat automatizálni. 2015-ben egy volt munkatársam frontend fejlesztő lett az EPAM-nál, aki Szeged környékén a legnagyobb IT munkáltató, ő hívta fel a figyelmemet azokra a nyitott pozíciókra, amelyek a tapasztalati hátteremmel betölthetők voltak. Ezekben a munkakörökben tudni kellett kódolni, és azt is érteni kellett, hogy egy operációs rendszer hogyan működik. Nagyon nagy sikernek éltem meg, hogy sikerült bejutnom egy nemzetközi nagyvállalathoz, ahol minden szempontból fejlődni tudok.ITmap: Mi mindennel foglalkozik a mindennapokban egy DevOps mérnök?
Dávid Gábor: Nehéz sablonosan megfogalmazni, hogy egy DevOps mérnök mivel foglalkozik, a pozíció ugyanis nagyon széles spektrumon mély tudást ölel át, más érdeklődést és szemléletet feltételez, mintha kizárólag a fejlesztésre vagy rendszerüzemeltetésre fókuszálnánk. Mivel nagyon nehéz egzaktan meghatározni a feladatokat, vegyük számba, hogy mi mindenhez kell értened, ha DevOps mérnökként szeretnél dolgozni! Mindezek segítségével a teendők könnyebben meghatározhatók lesznek. Értened kell az algoritmusok írásához, minimum egy, de inkább több script (leíró) nyelvet használnod kell, ilyen többek között a Shell scripting vagy Python. Ha például Java-s csapattal dolgozol, nem árt, ha ismered a Java csínját-bínját, azt, hogy hogyan működik egy Java alapú program. Természetesen, ha az adott csapat más programnyelvet használ, akkor abban kell elmélyedned, így mindig nyitottnak kell lenned a tanulásra. Ismerned kell az fejlesztés során használt programnyelv határait, igényeit. Példákkal élve: különböző megoldások különböző igényekkel rendelkeznek mind a futtató környezet mind a rendelkezésre álló erőforrások szempontjából, így ezeket figyelembe véve szükséges kialakítani azokat a környezeteket, amiken a kód futni fog. Ugyanígy nem mindegy, hogy script nyelvről van szó, amit értelmezni kell minden futtatáskor, vagy a programnyelv le van fordítva binárisra. Ezen kívül az is fontos szempont, hogy a kód milyen feladatot lát el, azaz frontend vagy backend kódról beszélünk-e. Tájékozottnak kell lenned a különböző verziókezelő programokban (Git, SVN), ezek speciális beállításaival, eltéréseivel jó tisztában lenni. Fontos, hogy értsd a különböző munkametódusokat, azaz, hogy hogyan kell reagálni, ha a fejlesztői környezetben jön elő a hiba, és hogy mi a teendő akkor, ha az éles rendszerre kerül ki egy hibás kód. Ugyanígy szükség van az operációs rendszerekhez kötődő tudásra: memóriahasználat, CPU (processzor) használat, hálózatok kezelése, TCP/IP működése, mit jelent a routing homogén és nem homogén hálózatokon. Ez egészen addig terjed, hogy nem csak fizikai, hanem virtuális gépekkel is dolgoznod kell. Szorosan ide kapcsolódik a konténerizáció, amely az elmúlt években alapfogalommá vált fejlesztői berkekben, és kifejezetten DevOps feladat az alkalmazása. A konténer a szoftver és függőségeinek olyan egysége, amely lehetővé teszi egy alkalmazás gyors futtatását több környezetben is. Tipikusan ilyen megoldás a Docker, amelynek segítségével lényegében ugyanaz az alkalmazás futtatható a fejlesztő saját gépén, mint az éles környezetben, így számtalan olyan hibalehetőség megelőzhető, amikre csak éles környezetben derülne fény. A jól felépített, ún. dockerizált környezetben nem hangozhat el a „Pedig az én gépemen működik!” mondat, hiszen a konténerizációval éppen azt érjük el, hogy mindenhol ugyanaz a környezet fogadja a programot. A Docker logója egyébként egy konténerekkel megrakott hajó, ezzel is illusztrálva, hogy IT környezetben is lényegében a külvilágtól elzárt, bizonyos elemeket tartalmazó rendszereket alkotunk a technológiával. A siker kulcsa a kétirányú kommunikáció és az együttműködés a DevOps és a fejlesztő csapat között, nagyon fontos, hogy mindkét fél kérdezzen és válaszoljon, illetve megértse egymás igényeit. Mivel a DevOps szakemberként Te vagy az az, aki ismeri a lélektanát annak a rendszernek, ahol a program futni fog, a Te feladatod és kötelességed, hogy megbeszéld a határokat a fejlesztőkkel, azaz azt, hogy mi az, ami megvalósítható, mi az, ami nem. Ha valami nem megoldható bizonyos környezeti vagy technológiai okok, feltételek miatt, nem lehet egy szimpla nem a válaszod, meg kell keresed a megfelelő megoldást. DevOps-osként menedzselned kell a kódot, automatizmusok felépítésével segítened kell a fejlesztő csapatot abban, hogy minél kevesebb hibával és minél gyorsabban kikerülhessenek élesbe a fejlesztések. Ehhez olyan automatákat kell kialakítanod, amelyek képesek nagyon sokszor lefuttatni ugyanazt a forgatókönyvet, és a hibákról értesítést küldenek. Mint DevOps mérnök, magát azt az automatizmust is meg tudod írni a fejlesztőkkel együttműködve, amely lehetővé teszi, hogy ha a programozó egy változást ad hozzá a kódhoz, akkor legalább a tesztkörnyezetben automatikusan történjen meg a módosítás, ne kelljen senkinek kézzel belenyúlnia. Ezek megírásához szintén script nyelveket használsz, mint a Bash, ami a leggyakoribb, vagy akár a Ruby, Python vagy a Go. Amikor nem működik a fejlesztői verzió, nem indul el a kód, hálózati hibák vannak, azt is Neked kell megoldanod. Sőt, azt a környezetet is Te építed fel, ahol a tesztelés zajlik. Itt jön a képbe a cloud, a felhő megoldások, ugyanis az szintén a Te feladatos, hogy különböző toolokat használva felhő alapon is felépítsd azt az infrastruktúrát, ami képes lesz a kódot futtatni. A hibakeresésben is rendszeresen részt kell venned főleg, ha infrastruktúrával, hálózatokkal kapcsolatos probléma lép fel, tisztában kell lenned az IT biztonsági kérdésekkel, hálózatbiztonsággal is. Ha pedig ez még mindig nem lenne elég :), különböző monitoring eszközöket is bevezetsz és konfigurálsz, hogy az adott környezet jellemzői/metrikái megfigyelhetők legyenek, szükség esetén pedig riasztásokat kapjon a csapat egyes hibákról. Összefoglalva a DevOps mérnök az IT majdnem teljes részét lefedi, a munkakör nagyon széles spektrumú tudást igényel, mint az minden bizonnyal a fentiekből egyértelművé is vált.ITmap: Milyen személyiségjegyekkel kell rendelkeznie annak, aki sikeres szeretne lenni a munkakörben?
Dávid Gábor: Nem az az elvárás a DevOps mérnökökkel szemben, hogy adhoc tudjanak választ adni egy felmerült problémára, hiszen egyikőnk sem a fenti tudásanyaggal születik. A tanulás, szakmai kíváncsiság azonban alapkövetelmény. A legjobban talán úgy tudnám megfogalmazni, hogy hajtania kell a kíváncsiságnak, hogy megértsd, mi történik a motorháztető alatt. Mi történik a háttérben, ha az alkalmazásban kattintasz egyet? Milyen háttérfolyamatokat indít be egy-egy kattintás, és közben melyik rendszer melyikre hat? Otthon például saját kis szerverparkot építettem magamnak, eredetileg azzal a céllal, hogy mindent, amit csak lehet, elsajátíthassak a hálózatokkal kapcsolatosan. Azóta persze minden egyéb témakörben bevetettem, rengeteg hobbiprojektem van. Mindenki arra sarkallok, hogy semmiképp ne elégedjen meg azzal, amit az iskolai padokban tanul meg, mert nem lesz elég. Kell, hogy ki akard próbálni a tudásodat, hogy meg akard érteni, a gyakorlatban mi és hogyan működik. Ez a DevOps munkakör alfája és omegája, ha ez megvan, akkor jó esélyekkel indulsz a szakmában. Számomra a szakmai alázat még egy olyan pont, amelyet mindig is sokra tartottam, illetve én is eszerint próbálok működni a mindennapokban. Ha nem felejted el azt az alaptételt, hogy egészen egyszerűen nem tudhatsz mindent, ha elfogadod azt, hogy adott témában az tud többet, aki többet foglalkozott vele, ha utánamész annak, amikor valamit nem tudsz, ha nem csak tágítod, de mélyíted is a tudásod, akkor már nagyon sokat tettél azért, hogy hatékonyan elláthasd szerepkörödet. Ha személyiségjegyekről van szó, nem lehet kihagyni a megfelelő, másikat tisztelő kommunikációt, együttműködést, kompromisszumkészséget sem. A tanulás, fejlődés angol nyelvtudás nélkül elképzelhetetlen, hiszen a legtöbb szakmai oktató anyag ezen a nyelven áll rendelkezésre.ITmap: Milyen képzéseken lehet elsajátítani a munkakörhöz szükséges ismereteket?
Dávid Gábor: Nem lehet egy egyértelmű „receptet” adni erre. Mint saját példám is mutatja, nem az a siker kulcsa, hogy van-e befejezett főiskolai diplomád. Hozzáteszem, hogy az informatikai területen szerzett végzettség jó indikátora lehet annak, hogy egyrészt az IT alapokat megtanultad, másrészt, hogy képes vagy a tanulásra, így, ha elkezdtél egy képzést, mindenképpen azt javaslom, hogy fejezd is be. Az előző válaszban megfogalmazottaknak azonban összességében sokkal nagyobb szerepük van, mint a végzettség típusának, illetve fokának.ITmap: Milyen továbblépési lehetőségek vannak a munkakörből?
Dávid Gábor: Egy idő után DevOps-on belül is érdemes specializálódni, van, aki arra fókuszál, hogy hogyan lehet olyan automatákat írni, amelyek hatékonyabbá teszik a build-folyamatokat (azaz a számítógépes forráskód bináris, gépi kódba történő összeállítását - build engineering), és van, aki a cloud megoldásokra összpontosít, megtanulja, hogyan lehet alacsony szintű módosításokat is elvégezni a felhő rendszerekben. Ami fontos, hogy egy idő után érdemes eldöntened, hogy hosszú távon a technológiai oldallal foglalkozol, vagy pedig elmozdulsz a menedzsment, vezető feladatok irányába, és akár egy DevOps csapat vezetőjévé válsz.ITmap: Miért szeretsz DevOps mérnökként dolgozni?
Dávid Gábor: Eddigi karrierem során rengeteg mindent köszönhettem tudásvágyamnak, most pedig olyan pozícióban dolgozom, ahol ez alapfeltétel. Minden nap azt csinálom, amit igazán szeretek: benézek a motorháztető alá, utánajárok annak, ha valami nem, vagy nem jól működik, miközben segítem a fejlesztő csapatot abban, hogy minden feltétel adott lenne ahhoz, hogy magas minőségű szoftvereket adjunk ki a kezünkből.Szívesen dolgoznál hasonló pozícióban? Legyél Te is Gábor csapatának tagja!