A Kubernetes indulása óta példátlan ütemben fejlődik és terjed. A projekt mögött álló közösség – fejlesztők, felhasználók, tesztelők és lelkes támogatók – folyamatosan növekszik, napról napra egyre többen csatlakoznak ehhez az ökoszisztémához.
A Kubernetes szoftver maga is rendkívül gyorsan fejlődik. Ez a gyors tempó olyan intenzív, hogy még a GitHub infrastruktúráját is próbára teszi, ahol a projekt kódját fejlesztik.
Mi jellemzi ezt az innovációt?
Üzleti szempontból az alapértelmezett megoldásként tekintenek rá: ma már a legtöbb modern, felhőalapú infrastruktúrát építő vállalat Kubernetesre épít.
Több tízezer közreműködő dolgozik a fejlesztésén világszerte – ezzel az egyik legaktívabb nyílt forráskódú projekt.
Százezres nagyságrendű commit (kódmódosítás) történt eddig a kódbázison.
Slack közösségében is tízezrek aktívak, folyamatosan kérdeznek, segítenek és megosztják tapasztalataikat.
Négyhavonta jelenik meg egy új, kisebb (minor) verzió a Kubernetesből.
Körülbelül tíznaponta érkezik egy javítócsomag (patch release), amely hibajavításokat vagy kisebb módosításokat tartalmaz.
Gazdag ökoszisztémával rendelkezik: több száz kapcsolódó projekt létezik, amelyek tovább bővítik és testre szabják a Kubernetes lehetőségeit – ezek közül sokat a CNCF (Cloud Native Computing Foundation) koordinál.
Miért fontos ezt tudni?
Aki korábban monolitikus, egyetlen gyártótól származó, lassan változó rendszerekkel dolgozott, annak kihívás lehet megszokni ezt a dinamikus környezetet. A Kubernetes világában ugyanis a változás állandó.
Ha valaki egy klasztert üzemeltet vagy fejleszt rá, elengedhetetlen, hogy:
tisztában legyen az új verziók jelentésével,
rendszeresen tesztelje a frissítéseket,
és naprakész maradjon az ökoszisztéma változásaival kapcsolatban.
További lehetőségek, ahol tanulhatsz és fejlődhetsz
A CNCF (Cloud Native Computing Foundation) weboldalán elérhető egy részletes lista az összes hivatalos cloud-native projektről, amelyek valamilyen formában kapcsolódnak a Kuberneteshez. Ezek között találhatók olyan eszközök, amelyek:
megkönnyítik a klaszterek menedzselését,
segítik az alkalmazások monitorozását,
vagy lehetővé teszik a biztonságos hálózati kommunikációt.
Egyre jobban körvonalazódik, hogy ez egy időtálló termék. Szerinted érdemes lenne megtanulni? 🙂
Miután megismertük a Kubernetes alapvető architektúráját, érdemes néhány kulcsfontosságú fogalommal is megismerkedni. Ezekkel az objektumokkal később is dolgozunk majd, de már most hasznos, ha megértjük, hogyan illeszkednek a teljes rendszerbe.
Mi is az a Kubernetes?
A Kubernetes egy konténer-orchesztrációs rendszer, amelyet arra terveztek, hogy automatizálja a konténerek telepítését, kezelését, skálázását és frissítését. Fontos megérteni, hogy a Kubernetes nem egyesével kezeli a konténereket, hanem úgynevezett Podokba csoportosítva.
Pod
A Pod a Kubernetes legkisebb egysége, amely egy vagy több konténert tartalmaz. Ezek a konténerek:
azonos IP-címen osztoznak,
közösen használják a tárolókat (volumes),
ugyanabba a névtérbe (namespace) tartoznak.
Általában egy Pod egy alkalmazást futtat, míg a többi konténer segédszolgáltatásokat nyújthat hozzá (például loggyűjtés, proxy, stb.).
Namespace – névterek
A namespace, vagy magyarul névtér egy logikai szeparációs eszköz a Kubernetesben. Fő célja:
az erőforrások elkülönítése (pl. fejlesztés, teszt, éles környezet),
a több bérlős környezetek (multi-tenant) biztonságos kezelése,
jogosultságok és kvóták könnyebb szabályozása.
Vannak klaszter szintű objektumok (pl. node-ok), és olyanok is, amelyek csak egy namespace-hez tartoznak. Ha különböző namespace-ekben lévő Podok szeretnének kommunikálni egymással, ahhoz Service objektumokra van szükség.
Orchestráció és vezérlők (operators)
A Kubernetes vezérlését úgynevezett „watch-loopokkal”, azaz operátorokkal végzi. Ezek figyelik a kube-apiserver állapotát, és ha eltérés van az elvárt (deklarált) és a valós állapot között, akkor lépnek közbe.
A leggyakoribb operátor típusok:
Deployment: konténerek kezelése (nem közvetlenül a Podokkal dolgozik).
ReplicaSet: a Podok darabszámát kezeli a megadott sablon (podSpec) alapján.
Kubelet: a node-on futó ügynök, amely végrehajtja a podSpec utasításait (pl. konténer letöltés, indítás, leállítás).
Az alapértelmezett és legtöbbet használt operátor a Deployment, amely biztosítja, hogy az alkalmazás mindig a kívánt példányszámban és konfigurációval fusson.
Custom Resource Definitions (CRD)
Ha a beépített vezérlők nem elegendők, akkor saját típusú erőforrásokat és operátorokat is létrehozhatunk. Ezt CRD-nek (Custom Resource Definition) nevezzük, és ezáltal bővíthetjük a Kubernetes képességeit.
A Kubernetesben a Service objektum biztosítja a hálózati elérhetőséget a Podok között, különböző namespace-ek között, vagy a klaszteren kívülről.
Label alapú működés: a Service címkék alapján találja meg a hozzá tartozó Podokat.
A Service a Endpoint operátortól szerzi meg a Podok IP-címeit és elérési információit.
A Service tehát egyfajta virtuális IP-címként viselkedik, ami mögött a megfelelő Pod(ok) állnak.
Címkék (Labels) és azonosítók
A Kubernetesben nehézkes lenne több ezer Pod vagy objektum kezelése, ha mindig név vagy UID alapján kellene hivatkozni rájuk. Ezért:
használhatunk címkéket (labels) – tetszőleges kulcs-érték párok, melyek az objektum metaadataihoz tartoznak.
így például egy parancs segítségével kiválaszthatunk minden olyan Podot, amelynek az app=web címkéje van, anélkül hogy ismernénk a nevüket.
Taints és tolerations
Az egyes node-ok megjelölhetők úgynevezett taint-ekkel, hogy elkerüljék a Podok automatikus ütemezését oda. Ha egy Pod mégis ilyen node-on szeretne futni, akkor az objektum toleration beállításával jelezheti, hogy elfogadja ezt a környezetet.
Ez az alapismereteket bemutató rész egy fontos lépcsőfok ahhoz, hogy megértsük, hogyan működik a Kubernetes rendszerszinten. A későbbi gyakorlati példákban ezek a fogalmak újra és újra elő fognak kerülni.
Ugye milyen izgalmas ez a világ? És még csak most kezdtük el…
Az IT világában egyre többen fordulnak a felhőtechnológiák felé, és sokan azzal a meggyőződéssel kezdenek neki a tanulásnak, hogy egy tanúsítvány megszerzése az első lépés a sikeres karrier felé. De vajon valóban ez a helyes út? Ebben a cikkben igyekszem objektíven, mégis a saját véleményemet megformálva megvizsgálni a tanúsítványok és a valós tapasztalatok szerepét a felhőalapú karrierépítésben.
A tanúsítványok szerepe
A tanúsítványok kétségtelenül fontosak az IT világában. Több szempontból is hasznosak lehetnek:
Strukturált tanulási útmutató: Segítenek a tanulóknak egy jól meghatározott tananyagot követni.
Álláspályázati előny: Sok munkaadónál előnyt jelent, ha valaki rendelkezik releváns tanúsítványokkal (pl. AWS Certified Solutions Architect, Azure Administrator, Google Cloud Professional Engineer, stb.).
Bizonyíték a tudásról: Egy jól megválasztott tanúsítvány igazolhatja az adott terület elméleti ismeretét.
Mindezek ellenére a tanúsítvány nem cél, hanem eszköz. Ha csak a tanúsítványra koncentrálsz, az tévútra vezethet, mert egy papír önmagában nem ad valódi tudást. A sikeres felhő karrierhez először értsd meg, próbáld ki, építs vele – a tanúsítvány pedig majd igazolja, hogy valóban értesz hozzá!
A valós tapasztalat elengedhetetlen
A valódi munkakörnyezetben egy tanúsítvány önmagában nem elegendő. Az alábbi tények ezt támasztják alá:
Az IT problémák nem feleletválasztósak: A legtöbb tanúsítvány-vizsga tesztalapú, de a való életben a hibakeresés, teljes rendszerek kiépítése és optimalizálása nem ABC-válaszokból áll.
A gyakorlati tapasztalat bizonyítja a kompetenciát: Egy interjún könnyen kiderül, ha valaki csak elméletben ismeri a technológiákat, de még sosem telepített, konfigurált vagy üzemeltetett éles rendszereket.
A komplex rendszerek nem taníthatók meg kizárólag könyvből: Egy multi-cloud vagy nagyvállalati felhőkörnyezet megértése sokkal több, mint az egyes szolgáltatások definícióinak ismerete.
A vizsgák csak a bevált gyakorlatokra koncentrálnak: A vizsgákon azt kell bizonyítanod, hogy ismered a gyártók által ajánlott legjobb gyakorlatokat. A való életben viszont ezek önmagukban nem elegendők. Ahhoz, hogy időtálló, költséghatékony és az ügyfél igényeire szabott megoldásokat építs, többre van szükség: kreativitásra, problémamegoldásra és alkalmazkodóképességre. Ha csak a vizsgák anyagára támaszkodsz, hamar olyan helyzetekbe kerülhetsz, ahol a tankönyvi válaszok nem működnek.
Mennyi idő után érdemes a tanúsítványra koncentrálni?
A tapasztalatok alapján egy minimum 6-12 hónapos gyakorlati időszak ajánlott, mielőtt valaki komolyan elkezdene készülni egy tanúsítvány megszerzésére. Ez idő alatt érdemes:
Saját projekteket építeni AWS, Azure vagy GCP környezetben.
Hibakeresési és optimalizálási feladatokat végezni, akár saját környezetben, akár valós munkakörnyezetben.
Valós infrastruktúrát menedzselni, még ha csak egy kísérleti laborban is.
Ez a tapasztalat segít abban, hogy a tanúsítvány megszerzése ne csak egy elméleti tudást igazoljon, hanem valódi kompetenciát is tükrözzön.
A vizsgára külön készülni kell
A tanúsítvány megszerzése nem csupán technikai tudást igényel. A vizsgák speciális nyelvezettel rendelkeznek, amelynek értelmezése önmagában kihívás lehet.
Magabiztos angol nyelvtudás szükséges: A vizsgákon sokszor összetett mondatokkal és egyedi kifejezésekkel találkozunk. A kérdések gyakran nem egyértelműek, és ha valaki nem érti pontosan a megfogalmazást, könnyen hibás választ adhat.
A vizsganyelvezet külön tanulást igényel: A kérdések sokszor rejtett célzásokat tartalmaznak, ezért nem elég csupán a szolgáltatások működését ismerni – „olvasni kell a sorok között”.
Érdemes vizsgafelkészítő tananyagokat és próbateszteket (brain dump) használni, hogy megértsük a gyakran alkalmazott megfogalmazásokat és logikát.
A helyes megközelítés
Ha valaki valóban sikeres akar lenni a felhőtechnológiák világában, az alábbi stratégiát érdemes követnie:
Gyakorolj és építs saját projekteket: Használj AWS ingyenes szolgáltatásokat, Azure Bicep-et vagy GCP Sandboxot saját rendszerek kialakítására. A felhőtechnológiák elsajátítása hosszú távú befektetést igényel. Az ingyenes lehetőségek jó kiindulópontot jelentenek, de a valódi tudás megszerzéséhez előbb-utóbb érdemes anyagi ráfordítást is tervezni. Nem kell hatalmas összegeket költeni, de a hatékony fejlődés érdekében érdemes havi néhány tízezer forintot szánni fizetős felhőszolgáltatásokra és laborkörnyezetekre. Ezek a befektetések jelentősen felgyorsítják a tanulási folyamatot és valós tapasztalatokat nyújtanak.
Vegyél részt open-source projektekben: GitHub-on rengeteg olyan projekt található, amelyben a felhőalapú technológiák alkalmazása révén valós tapasztalatot szerezhetsz.
Keress online képzéseket: A Gerilla Mentor Klubnál sok-sok képzés (soft- és hard skill) közül választhatsz. Vagy ott van az Udemy, ahol sokszor, csupán néhány forintért juthatsz a legjobb anyagokhoz.
Használj interaktív laborkörnyezeteket: KodeKloud és hasonló platformok kínálnak éles környezetben végrehajtható gyakorlati feladatokat.
Tanúsítványt akkor szerezz, ha már van mögötte tudás – Így a vizsga valódi visszaigazolása lesz annak, amit már tudsz, és nem egy gyorsan megszerzett papír.
Következtetés
A tanúsítványok értékesek, de csak akkor, ha mögöttük valódi tapasztalat áll. Ha valaki kizárólag a tanúsítványokra koncentrál, az tévútra vezethet, mert a munkaerőpiacon az éles helyzetek kezelése és a valódi problémamegoldó képesség a legfontosabb.
Először értsd meg, próbáld ki, játsz vele – a tanúsítvány pedig majd igazolja, hogy valóban értesz hozzá!
Amikor valaki a Docker-ről olvas, vagy tanul, szinte meseszerű annak története és már használatba is vennék, hiszem megváltoztatja a világot. Akkor mire is várunk? Mint minden területen, itt sem felhőmentes az égbolt. A Docker-es, konténeres világ is küzd bizonyos kihívásokkal.
A konténerek kiváló módot kínálnak az alkalmazások csomagolására, szállítására és futtatására
– ez a Docker mottója.
A fejlesztői élmény jelentősen javult a konténereknek köszönhetően. A konténerek lehetővé tették a fejlesztők számára, hogy könnyedén hozzanak létre konténerképeket (docker image), egyszerűen megosszák azokat tároló rendszereken keresztül (DockerHub, ACR, ECR), és hatékony felhasználói élményt biztosítsanak a konténerek kezeléséhez.
Azonban a konténerek nagy léptékű kezelése és egy biztonságos, elosztott alkalmazás tervezése a mikroservices alapelvei szerint komoly kihívást jelenthet.
Hatékony lépés egy folyamatos integrációs és telepítési (CI/CD) folyamat kialakítása a konténerképek építéséhez, teszteléséhez és ellenőrzéséhez. Olyan eszközök, mint a Spinnaker, a Jenkins és a Helm hasznosak lehetnek ezen automatizmusok kialakításában és megvalósításában. Ez segít megbirkózni a folyamatosan változó környezet kihívásaival, és biztosítja, hogy a konténerek megfeleljenek a minimális követelményeknek.
Ezután szükséged lesz egy fürtre (cluster), amelyen futtathatod a konténereidet. Egy olyan rendszerre is szükség van, amely elindítja a konténereket, figyeli őket, és hiba esetén lecseréli vagy helyettesíti azokat. A gördülékeny frissítések és az egyszerű visszaállítások is kiemelten fontosak, valamint a nem használt erőforrások eltávolítása is elengedhetetlen.
Mindezek a műveletek rugalmas, skálázható és könnyen használható hálózati és tárolási megoldásokat igényelnek. Mivel a konténerek bármely munkavégző szerver tagon (worker node) elindulhatnak, a hálózatnak biztosítania kell az erőforrások összekapcsolását más konténerekkel, miközben a forgalmat biztonságosan el kell különíteni másoktól. Emellett olyan tárolási struktúrára van szükség, amely zökkenőmentesen biztosítja, újrahasznosítja vagy felszabadítja a tárhelyet.
Amikor Kubernetes választ ad ezekre a kérdésekre, az egyik legnagyobb kihívás mégis maguk az alkalmazások, amelyek a konténerekben futnak. Ezeket meg kell írni vagy újra kell írni úgy, hogy valóban megbízható és rugalmasan kapcsolódó mikroservice-ek legyenek. Egy jó kérdés, amin érdemes elgondolkodni:
Ha telepítenéd a Chaos Monkey-t, amely bármikor véletlenszerűen leállíthat bármelyik konténert, vajon az ügyfeleid észrevennék?
A konténerek forradalmasították az alkalmazásfejlesztést és -üzemeltetést, de a skálázhatóság, biztonság és automatizáció kihívásai miatt önmagukban nem elegendőek. A Kubernetes olyan eszközt biztosít, amely segít ezeket a problémákat kezelni, ám a sikeres bevezetéshez nemcsak az infrastruktúrát kell megfelelően kialakítani, hanem az alkalmazásokat is a konténerizált, elosztott rendszerek sajátosságaihoz kell igazítani.
A megfelelő CI/CD folyamatok, az erőforráskezelés és a skálázható architektúra kialakítása kulcsfontosságú a konténeres környezetek hatékony működtetéséhez. Végső soron a cél egy olyan rendszer kialakítása, amely nemcsak rugalmas és automatizált, hanem ellenálló is a meghibásodásokkal szemben – annyira, hogy akár egy Chaos Monkey sem tudná megingatni.
A Kubernetes lehetőséget biztosít arra, hogy a konténerizált alkalmazások kezelése egyszerűbbé és hatékonyabbá váljon, de a siker kulcsa a jól megtervezett architektúra és a folyamatos optimalizáció.
A következő lépés annak feltérképezése, hogy saját alkalmazásaink mennyire felelnek meg ezeknek az elveknek – és ha szükséges, hogyan alakíthatók át a jövőbiztos működés érdekében.
Sorozatunk előző részében megismerhettük a Kubernetes történetét, eredetét és hogy ki is fejleszti. Most megyünk tovább és rátérünk arra, hogyan is változtatta meg a világot a Kubernetes és a Docker.
A Kubernetes használata és a konténeres alkalmazások üzembe helyezése alapjaiban változtatja meg a fejlesztési és rendszergazdai megközelítést az alkalmazások telepítésében. Hagyományosan egy alkalmazás – például egy webszerver – monolitikus formában, egy dedikált szerveren futott. A növekvő webes forgalom hatására ezt az alkalmazást finomhangolták, majd egyre nagyobb teljesítményű hardverre költöztették. Idővel jelentős testreszabásokra volt szükség annak érdekében, hogy megfeleljen az aktuális terhelési igényeknek. Ez általában sok nehézséggel és magas költséggel társult. Ráadásul a tervezési feladatok (költség, kapacitás és üzemeltetés) sok emberi erőforrást emésztett fel.
A Kubernetes ehelyett egy teljesen más megközelítést kínál: egyetlen nagy teljesítményű szerver helyett számos kisebb szervert, azaz mikroservice-eket üzemeltet. Az alkalmazás szerver- és kliensoldali komponensei eleve úgy vannak kialakítva, hogy több ügynök (agent) legyen elérhető a kérések kiszolgálására. Ez a megoldás lehetővé teszi a dinamikus skálázást és a rugalmasságot. A klienseknek számítaniuk kell arra is, hogy a szerverfolyamatok időnként leállhatnak és újak veszik át a helyüket, ami a tranziensekre épülő szerverüzemeltetés alapja. Egy klasszikus Apache webszerver helyett például sok kisebb nginx szerver működik párhuzamosan, amelyek egyenként válaszolnak a bejövő kérésekre.
A Kubernetes előnyei: rugalmasság és automatizáció
A kisebb, átmeneti szolgáltatások használata lehetővé teszi a lazább komponenskötéseket (decoupling). A monolitikus alkalmazás egyes részeit dedikált, de tranziensebb mikroservice-ek vagy ügynökök váltják fel. Az egyes ügynökök és azok helyettesítői közötti kapcsolatot szolgáltatásokkal (services) biztosítjuk. Egy szolgáltatás összeköti a forgalmat az egyik komponensről a másikra (például egy frontend webszerverről egy backend adatbázisra), és kezeli az új IP-címeket vagy egyéb információkat, ha valamelyik komponens meghibásodik és újat kell beállítani helyette.
A kommunikáció teljes mértékben API-hívásokon alapul, ami nagy rugalmasságot biztosít. A Kubernetes a konfigurációs adatokat JSON formátumban tárolja az etcd adatbázisban, de a közösség általában YAML formátumban írja ezeket. A Kubernetes agent-ei a YAML fájlokat JSON formátumba alakítják át, mielőtt az adatbázisba mentenék őket. Ez lehetővé teszi az egyszerű konfigurálást és a gyors módosításokat.
Egy modern megoldás a skálázhatóságra
A Kubernetes alapját a Go programozási nyelv adja, amely egy hordozható és hatékony nyelv, egyfajta hibrid a C++, Python és Java között. Egyesek szerint ezeknek a nyelveknek a legjobb (mások szerint a legrosszabb) elemeit ötvözi. A Kubernetes használatával az alkalmazásüzemeltetés kevésbé függ a hardvertől, és inkább az automatizált skálázásra és a magas rendelkezésre állásra épít.
A Kubernetes nem csupán egy új technológia – egy új szemléletmód is, amely lehetővé teszi az alkalmazások hatékonyabb és rugalmasabb működését. A dinamikus skálázás, az automatizált erőforráskezelés és a mikroservice-alapú architektúra révén a modern alkalmazásüzemeltetés alapvető eszközévé vált.
Legutóbbi cikkemben jelentettem be a Kubernetes-el kapcsolatos sorozatot, melynek ez az első része. Akkor részletesebben írtam az okokról és. az érzelmi kötödésről, ami arra motivált, hogy ezen területtel is foglalkozzunk. Mivel ez a technológia olyannyira része ma már a felhő világának, mint egy virtuális gép vagy egy workflow megoldás, így ennek is helye van itt nálam.
Ami fontos, hogy a Docker technológiáról itt külön nem beszélünk, de fogok nektek írni abban a témában is cikkeket, hogy a teljes képet lássátok. Addig is szeretném a figyelmetekbe ajánlani a Docker-el kapcsolatos GitHub repository-t.
Akkor most ez mi is
Egy konténer futtatása egy laptopon viszonylag egyszerű. Feltelepítem a Docker Desktop alkalmazást és már használhatom is. Ugye? Azonban a konténerek összekapcsolása, működtetése több host-on (számítógépen) keresztül, azok skálázása, alkalmazások leállás nélküli telepítése és a szolgáltatások felfedezése számos egyéb szempont mellett már nehézségekbe ütközhet.
A Kubernetes ezekre a kihívásokra nyújt megoldást a legegyszerűbb megoldásoktól a bonyolult, komplex, több-rétegű megoldásokig. Mindezt egy igazán robosztus, mégis nyitott és bővíthető API segítségével. Az új objektumok és vezérlők hozzáadásának lehetősége egyszerű testre szabást biztosít a legkülönfélébb igényekhez.
A hivatalos weboldal szerint a Kubernetes:
egy nyílt forráskódú szoftver, amely konténerizált alkalmazások telepítésének, skálázásának és kezelésének automatizálására szolgál
Egy kis történelem
A Kubernetes egyik kulcsfontosságú aspektusa, hogy a Google több mint 1,5 évtizedes tapasztalatára épít, amelyet a borg nevű projekten gyűjtöttek.
A Google infrastruktúrája már a virtuális gépek adatközpontokban való elterjedése előtt nagy méretet ért el, és a konténerek kifinomult megoldást nyújtottak a fürtökön (cluster) futó csomagok (alkalmazások) kezelésére. A konténerek segítségével a Google képes volt maximalizálni a hardverhasználatot és minimálisra csökkenteni az erőforrás-pazarlást, mivel a konténerek könnyűsúlyú, jól izolált környezetet biztosítottak az alkalmazások számára.
Ez a megközelítés lehetővé tette, hogy különböző alkalmazások egyazon fürtön fussanak anélkül, hogy egymást zavarnák. A fürtök hatékony kihasználása és az elosztott alkalmazások kezelése a Google kihívásainak központi eleme volt, különösen olyan nagy léptékű rendszereknél, mint a Google kereső, YouTube, és Gmail. Ezek a tapasztalatok kulcsszerepet játszottak a Kubernetes fejlesztésében, amelynek célja az volt, hogy ezeket a bevált megoldásokat bárki számára elérhetővé tegye.
Honnan jött a név?
Görögül a κνβερνητης jelentése kormányos vagy hajópilóta. A konténerek (Docker) tengeri témájához kapcsolódva a Kubernetes a konténerek hajójának kormányosa. Mivel a nevet nehéz kiejteni, sokan egy becenevet használnak: K8s. A becenevet úgy ejtik, mint Kate’s (/keɪts/ – ejtsd: kéjtsz), mivel a Kubernetes szóban nyolc betű található K és S között.
Az ember nem is gondolná, hogy milyen előtörténete is van egy-egy meghatározó programnak.
Következő alkalommal megnézzük, miért is jó egy mikroszolgáltatás alapú alkalmazás, mint egy monolitikus.
Amióta a felhőben élek, mindig is azon technológiák álltak közel a szívemhez, ahol a hatékonyság és az automatizmus dominált. Mindig jó érzéssel tölt el, amikor egy bonyolult folyamat automatikusan és stabila, azaz hatékonyan működik. Ezért is a mikroszolgáltatások (microservices) a kedvenc területem a felhőn belül is.
Hatékonyság és automatizálás
Ezen területhez tartoznak számomra a kiszolgáló nélküli (serverless) megoldások és a Docker is.
Emellett, amint tudjátok, amikor valamibe belevágok vagy egy új technológiát tanulok, akkor igyekszem mindig egy olyan valóságnak megfelelő példán keresztül megtanulni azt, amely később a mindennapokban is azonnal használható tapasztalatot nyújt.
Ebből pedig következik, hogy az egyik kedvenc mikroszolgáltatások kezelésére alkalmas, Docker technológiához közeli automatizálási, üzembe helyezési, skálázási és felügyeleti megoldásom a Kubernetes.
A Kubernetes napjaink IT-infrastruktúrájának alapkövévé vált, lehetővé téve a skálázhatóságot, rugalmasságot és megbízhatóságot, amelyre a modern alkalmazásoknak szüksége van.
Mi köze is van a Kubernetes-nek a felhőhőz?
A Kubernetes mindegyik felhőszolgáltató esetén az egyik meghatározó erőforrás, amelyre több más szolgáltatás is épül.
Ezért úgy gondoltam, hogy egy új cikksorozatot indítok, ami azoknak szól, akik szeretnének betekintést nyerni a Kubernetes világába, legyen szó fejlesztőkről, üzemeltetőkről vagy más IT-szakértőkről.
Először az elméleti alapokkal fogunk kezdeni és minden cikkel egyre mélyebbre ásunk ezen fenevad lelki világába. Terveim szerint, az alapfogalmaktól a gyakorlati megvalósításig mindent érinteni fogunk, hogy segítsük a technológia megértését és alkalmazását a valódi projektekben.
Nem titkolt célom ezzel, hogy olyan tudást adjak át nektek, amely hosszabb távon akár hozzásegíthet Titeket egy sikeres Certified Kubernetes Administrator (CKA) vizsgához. Ez azonban még a jövő zenéje.
Első lépés és egyben a következő Kubernetes cikkem témája, hogy meghatározzuk: Mi is az a Kubernetes?
Remélem Te is olyan izgalmasnak tartod ezt, ahogyan én is és velem tartasz. 🙂
Korábban már írtam egy cikket a böngészőből használható parancssori eszközökről. Akkor az AWS CloudShell megoldását mutattam be nektek.
Tekintsünk kicsit vissza, mi is az a CloudShell. Ez egy olyan böngészőben használható parancssori eszköz, amely leegyszerűsíti a „kommunikációt” az aktuális felhőszolgáltatónk és közöttünk. Hiszen nem kell semmi új komponenst nem kell telepítenem a számítógépemre, hogy kezelni tudjam a felhőerőforrásaimat. Tehát nincs is más dolgod, csak jelentkezz be a kedvenc felhőszolgáltatódnál regisztrált fiókodba, és keresd meg a navigációs sávon a CloudShell ikont. Ezután már kezdheted is az erőforrások kezelését.
Száz szónak is egy a vége: Ez az eszköz kiemelten hasznos mindazok számára, akik szeretnének kísérletezni, alkalmazásokat fejleszteni, tanulni vagy hibákat elhárítani a felhőben. És mindezt nagyon gyorsan.
Google Cloud Shell
A Google Cloud Shell egy interaktív parancssori felület, amely a Google Cloud Platformhoz csatlakozó, előre konfigurált Linux környezetet biztosít. A környezet tartalmazza a legfontosabb felhő-parancssori eszközt (pl.: git, gcloud, kubectl), valamint az olyan nyelvekhez szükséges futtatókörnyezeteket, mint a Python, Go és NodeJS.
Korábbi ismereteink alapján következik, hogy minden eszközről elérhető, legyen az egy laptop, tablet vagy egy okostelefon. 🙂
Hasonlóan az AWS-hez, itt is egy rejtett virtuális gép indul el a háttérben (1-2 perc legfeljebb), ahol a parancsainkat futtathatjuk. Ez közvetlenül kapcsolódik a Google Cloud projektünkhöz, így miután megnyílt a Cloud Shell, már nem szükséges további bejelentkezés.
A Cloud Shell linux gép 1 vCPU-val és 4 GB RAM-mal rendelkezik, ami a legtöbb feladat végrehajtásához bőven elegendő. Azonban, bonyolult vagy komplex feladatok végrehajtásakor előfordulhat, hogy elérjük ezen környezet határait. Amikor használjuk a Cloud Shell-t akkor erre mindig legyünk tekintettel.
Arra is érdemes felkészülni, hogy a környezet 20 perc inaktivitás után automatikusan leáll és megszakítja az aktuális munkamenetet. A benne tárolt fájlokat, parancs-előzményeket azonban megtartja, így akadályozza meg a lekérdezéseink adatainak elvesztését.
A Cloud Shell-ben előre konfigurált csomagok vannak, hogy ezzel is gyorsítsák számunkra a munkát. Ezeket a Google szakemberei folyamatosan frissítik és bővítik. Készítettem egy rövid listát a legfontosabb elérhető csomagokról és eszközökről:
Programozási nyelvek: Python, Node.js, Go, Java.
Verziókezelés: Git.
Hálózati eszközök: SSH, Curl, Wget.
Támogatott keretrendszerek: Google Cloud SDK, Terraform, Docker, Kubernetes CLI.
Ebből is látszik, mennyire hasznos ez az eszköz a mindennapokban.
Leghasznosabb funkciók
Cloud Editor: Elérhető egy beépített Cloud Shell Editor, amely egy teljes funkcionalitású webalapú IDE, amely támogatja a forráskód kezelését, hibakeresést és verziókezelést is. Ha valaki ismeri a Visual Studio Code-ot akkir ebben is otthon fogja magát érezni.
Parancssori eszközök: A Cloud Shell tartalmazza a legfontosabb eszközöket, amellyel a Google Cloud-ban lévő erőforrásaid kezelheted.
Google Drive integráció: Minden Cloud Shell környezethez tartozik egy 5 GB-os, tartós tárhely a felhasználó adataihoz. Ez a tárhely közvetlenül elérhető a környezetben.
Ephemeral Cloud Shell: Ez a funkció egy nagyon gyors indítást biztosít a futtató környezetnek. Ha bekapcsoljuk, akkor egy ideiglenes környezetként indítja a Cloud Shell-t, ami azt jelenti, hogy amint befejeztük a munkamenetet, minden adat törlődik. Izolált munkafázisokhoz ideális lehet.
Ezen kívül még rengeteg hasznos funkcióval rendelkezik. A teljesség igénye nélkül: fájlok le- és feltöltése, színsémák és színek módosítása, használati statisztikák, web alapú előnézet.
Már 2023-ban is meghívást kaptam a Gerilla Karrier Podcast egyik felvételére, hogy osszam meg tapasztalataimat a felhő technológiák kapcsán. A mesterséges intelligencia elterjedésével, a felhőben is megjelentek az AI alapú megoldások. Ma már ezeket ugyanúgy használhatjuk, mint egy virtuális gépet vagy egy webalkalmazást. A Gerilla Karrier Podcast-ban most erről is beszélgettük:
Mit jelent a felhőalapú technológia?
Kik a legnagyobb felhőszolgáltatók, és mit kínálnak?
Hogyan működik együtt a mesterséges intelligencia és a felhő?
Miként kapcsolódhatnak be kisebb vállalkozások is a felhőalapú AI világába?
Miért olyan keresettek ma a Cloud szakemberek?
Hogyan kezdj bele egy felhő technológiai karrierbe?
Milyen tudásra van szükség az egyes munkakörökhöz?
Miként alakítja át a mesterséges intelligencia a Cloud területén dolgozók munkáját?
Mit érdemes tanulnod, ha gyorsan szeretnél előrelépni ezen a területen?
Nagyon kellemes beszélgetésünk volt ezekben a témákban Andrással, ahol remélhetőleg számotokra is érdekes információkat hallhattatok.
A podcast epizódot itt tekinthetitek meg:
Ha szeretnél még több hasznos témát szeretnél tanulni, akkor ajánlom neked a Mentor Klub többi képzését is. A Mentor Klub egy olyan közösség, ahol a tagok soft- és hard skilleket egyaránt tanulhatnak, ráadásul otthonról vagy akár külföldről is.
Emellett olvassátok a Gerilla Önéletrajz Műhely cikkeit is. Ezekből csupán néhány, ami segít elindulni:
Manapság egyre többet hallhatunk az infrastruktúra automatizálásáról és a DevOps megközelítés fontosságáról az informatikai projektekben. Ebben a világban az egyik legnépszerűbb eszköz a Terraform, amely segít a felhőinfrastruktúra kezelésében és üzemeltetésében.A mai cikkben arra vállalkozok, hogy megismertessem az érdeklődőkkel a Terraform alapjait, és bemutassam, miért lehet hasznos az IT szakemberek és a vállalkozások számára.
Mi az a Terraform?
A Terraform egy nyílt forráskódú eszköz, amelyet a HashiCorp fejlesztett. Lehetővé teszi az infrastruktúra deklaratív módon történő leírását és kezelését kódként, vagyis az úgynevezett Infrastructure as Code (IaC) megközelítést alkalmazza. Ez azt jelenti, hogy a felhőszolgáltatások, mint például az AWS, Azure, Google Cloud vagy akár saját adatközpontok erőforrásait egyetlen kódbázis segítségével lehet létrehozni, frissíteni vagy törölni.
Hogyan működik a Terraform?
A Terraform az infrastruktúra komponenseit ún. konfigurációs fájlokban írja le, amelyeket a .tf kiterjesztésű fájlokban tárol. Ezekben a fájlokban megadhatjuk, hogy milyen erőforrásokat szeretnénk létrehozni (pl. virtuális gépeket, tárolókat, adatbázisokat stb.). A legnagyobb előnye, hogy a folyamat deklaratív: nem az utasítások végrehajtási sorrendjét kell megadni, hanem hogy milyen állapotot szeretnénk elérni. A Terraform ezt követően elvégzi a szükséges lépéseket az infrastruktúra kialakításához vagy módosításához.
Miben segíthet nekünk az IaC és aTerraform?
A Terraform és az Infrastructure as Code (IaC) alkalmazásának számos előnye van, különösen a felhőinfrastruktúra kezelésében. Ezek közül a legfontosabbakat össze is foglaltam:
Automatizálás és hatékonyság: A Terraform és az IaC lehetővé teszi az infrastruktúra teljes automatizálását, így elkerülhető a kézi beavatkozás, ami gyorsabbá és megbízhatóbbá teszi az infrastruktúra létrehozását, módosítását vagy törlését. Ez csökkenti az hibák esélyét, és jelentősen növeli a hatékonyságot.
Következetesség: Az infrastruktúra kódban van megadva, ami biztosítja, hogy az infrastruktúra újratelepítése vagy bővítése mindig ugyanazokat a lépéseket és beállításokat kövesse. Ez garantálja a következetességet a fejlesztői, tesztelési és éles környezetek között, és minimalizálja az eltérések lehetőségét.
Verziókövetés: Mivel a Terraform konfigurációs fájlok szöveges formátumban vannak, ugyanúgy verziókövető rendszerekben (pl. Git) tárolhatók, mint a szoftverek kódjai. Ez lehetővé teszi, hogy visszatérjünk egy korábbi infrastruktúra állapothoz, ha szükséges, vagy megnézzük, milyen változások történtek az idők során.
Skálázhatóság: Az IaC megkönnyíti az infrastruktúra skálázását, mivel egyszerűen módosíthatjuk a konfigurációs fájlokat, és a Terraform automatikusan végrehajtja a szükséges változtatásokat. Például, ha több szervert szeretnénk hozzáadni egy alkalmazás kiszolgálásához, csak a konfigurációban kell megadni a kívánt erőforrásszámot.
Multicloud (több felhős) támogatás: A Terraform különösen előnyös, mivel több különböző felhőszolgáltatót támogat (AWS, Azure, Google Cloud stb.), valamint helyi adatközpontokat is kezelhet. Ez lehetővé teszi, hogy egyszerre több felhőplatformon futtatunk erőforrásokat, anélkül hogy mindegyikhez külön eszközöket vagy manuális beállításokat kellene használnunk.
Deklaratív megközelítés: Mint már korábban említettem, a Terraform deklaratív módon működik, ami azt jelenti, hogy a felhasználó csak azt mondja meg, milyen állapotot szeretne elérni az infrastruktúrában (pl.: hány darab szerver, milyen tűzfal beállítások, stb.). A Terraform gondoskodik a szükséges lépésekről, így nem kell aggódnunk a végrehajtás konkrét részletei miatt.
Költséghatékonyság: Az automatizálásnak és az optimalizált erőforrás-kezelésnek köszönhetően a Terraform és az IaC használata csökkentheti az infrastruktúra kezeléséhez szükséges időt és erőforrásokat, így hosszú távon költséghatékonyabbá válik.
Gyors visszaállítás: Ha valami rosszul sül el (pl. hibás konfiguráció vagy nem kívánt infrastruktúra-változás), a Terraform segítségével gyorsan vissza lehet állítani az infrastruktúrát egy korábbi verzióra (állapotra), így minimalizálva a leállások vagy hibák okozta károkat/kieséseket.
Modularitás és újrafelhasználhatóság: A Terraform lehetővé teszi modulok létrehozását, amelyek sablonként szolgálhatnak különböző projektekhez. Ez azt jelenti, hogy egyszer létrehozott konfigurációkat könnyen újra lehet használni más projektekben, ami jelentős időmegtakarítást jelent.
Miért érdemes használni a Terraform-ot?
Multicloud támogatás: A Terraform lehetővé teszi több felhőszolgáltató egyidejű kezelését, ami nagy előny, ha különböző felhőkön futtatunk szolgáltatásokat.
Átláthatóság és verziókezelés: Mivel az infrastruktúra kódként van leírva, egyszerűbb követni a változtatásokat és verziókat használni, hasonlóan a szoftverfejlesztésben használt verziókezelő rendszerekhez.
Automatizálás: Az infrastruktúra kézi kezelése helyett a Terraformmal automatizálhatjuk a folyamatokat, ami gyorsabbá és megbízhatóbbá teszi az üzemeltetést.
Közösség és bővítmények: A Terraformhoz számos modul és bővítmény érhető el, amelyeket a közösség fejlesztett, így könnyedén bővíthetjük a képességeit.
A Terraform alapfogalmai
1. Konfigurációk
A Terraform konfigurációk írásával határozzuk meg, hogy milyen erőforrásokat szeretnénk létrehozni. Ezek a konfigurációk egyszerű szöveges fájlokban tárolódnak.
2. Erőforrások (Resources)
Az erőforrások a felhő vagy adatközpont komponenseit jelentik, például virtuális gépeket, hálózatokat, tárhelyeket.
3. Állapot (State)
A Terraform minden egyes futás után tárolja az infrastruktúra aktuális állapotát egy állapotfájlban. Ez segít abban, hogy mindig naprakész információnk legyen arról, hogy milyen erőforrások léteznek.
4. Plan és Apply
Amikor módosítjuk a konfigurációkat, először a plan parancsot futtatjuk, amely megmutatja, hogy milyen változtatásokat fog végrehajtani a Terraform. Ha minden rendben van, az apply parancs végrehajtja a konfigurált változtatásokat.
Példa konfiguráció
Lássunk egy egyszerű példát arra, hogyan lehet egy virtuális gépet létrehozni az AWS-ben a Terraform segítségével:
provider "aws" {
region = "eu-central-1"
}
resource "aws_instance" "elsogepem" {
ami = "ami-0592c673f0b1e7665"
instance_type = "t2.micro"
tags = {
Name = "Első AWS gépem"
}
}
Ebben a példában egy t2.micro típusú virtuális gépet hozunk létre az AWS egy adott régiójában. Ez a konfiguráció egyszerű, de a lehetőségek szinte végtelenek, hiszen a Terraform segítségével bármilyen felhőalapú erőforrást kezelhetünk.
Természetesen a fenti kód önmagában nem működik, hiszen biztosítanunk kell a kód futtatásához szükséges hozzáférést az AWS fiókunkhoz is. Ezt majd egy következő cikkben mutatom meg részletesen.
Összegzés
A Terraform egy rendkívül erőteljes eszköz, amely lehetővé teszi az infrastruktúra könnyű kezelését és skálázását. Nem csak kis rendszerek építésében és kezelésében hatékony, hanem a hatalmas, akár ezer erőforrást tartalmazó ökoszisztémák esetén is kifogástalanul teljesít.
Ha érdekel ez a terület, akkor az első lépés lehet a konfigurációk megismerése és néhány egyszerű projekt kipróbálása. Ahogy elmélyedsz a Terraform világában, gyorsan rájössz majd, hogy mennyire megkönnyíti a felhőalapú rendszerek kezelését és karbantartását. Természetesen a következő cikkekben én is azon leszek, hogy számodra hasznos és használható tudást adjak át.
Reméljük, hogy ez a rövid bevezető segít az elindulásban! 🙂