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.
A modern alkalmazásfejlesztés egyik alappillére a konténerizáció. Az olyan eszközök, mint a Docker, lehetővé teszik, hogy alkalmazásainkat izolált, skálázható konténerekben futtassuk. A konténerizációhoz azonban szükség van egy megbízható tárhelyre, ahol a konténerképeket tárolhatjuk, kezelhetjük és megoszthatjuk.
Pontosan ezt a bevezetőt írtam az AWS ECR-ről szóló cikkben is. Úgy gondoltam, hogy ebben sem lesz ez másképp. Most azonban az Azure tárólóregisztrációs adatbázisáról lesz szó, az ACR-ről.
Az Azure Container Registry (ACR) egy teljes mértékben felügyelt, privát konténerregiszter az Azure felhőplatformon, amely lehetővé teszi a Docker és OCI (Open Container Initiative) kompatibilis konténerek tárolását és kezelését. Az ACR különösen hasznos azoknak, akik Kubernetes-t (AKS – Azure Kubernetes Service) vagy más konténeres megoldásokat használnak, de kezdők számára is könnyen érthető és kezelhető.
Miért van szükség az ACR-re?
A konténerizált alkalmazások egyik alapvető eleme a konténerregiszter, amely a konténerképek tárolására és elérhetővé tételére szolgál. Bár használhatunk publikus tárolókat is, például a Docker Hub-ot, a vállalati vagy biztonsági szempontból érzékeny környezetekben érdemes egy privát megoldást választani, mint az ACR.
Előnyei:
Privát és biztonságos: Csak az engedélyezett felhasználók és szolgáltatások férhetnek hozzá.
Azure integráció: Könnyen csatlakoztatható Azure Kubernetes Service-hez (AKS), App Service-hez és más Azure szolgáltatásokhoz.
Automatizált építés és frissítés: Beállíthatunk automatikus képépítést és frissítést webhookok vagy DevOps pipeline-ok segítségével.
Geo-replikáció: Több régióban is elérhetővé tehetjük a konténerképeket.
Az ACR struktúrája
Az ACR egy hierarchikus struktúrát követ, amely lehetővé teszi a különböző konténerképek és adattárolók rendezett kezelését:
Registry: Az ACR legfelső szintje, amely az összes tárolt képet kezeli.
Repository: Egy adott alkalmazás vagy verziótároló helye, ahol különböző verziójú képek találhatók.
Tag-ek: A különböző verziókat és build-eket azonosítják, például node-webapp:3.0.0, node-webapp:latest.
Hogyan tölthetek fel képet az ACR-be?
Ha van egy helyi Docker image, amelyet szeretnénk az ACR-be feltölteni:
Tag-elés az ACR nevével:
docker tag node-webapp:4.0.0 acrregistryneve.azurecr.io/node-webapp:4.0.0docker tag node-webapp:4.0.0 acrregistryneve.azurecr.io/node-webapp:latest
az acr repository list --name acrregistryneve --output table
Alkalmazás indítása az ACR-ben tárolt képből
A legegyszerűbb módja egy ACR-ben tárolt konténer futtatásának az Azure Container Instances (ACI) használata. Az ACI lehetővé teszi, hogy néhány parancs segítségével elindítsuk az alkalmazásunkat anélkül, hogy egy teljes Kubernetes klasztert kellene kezelni.
ACI erőforrás létrehozása és az ACR-ből való kép futtatása
az container show --resource-group eroforrascsoport --name node-container --query "{FQDN:ipAddress.fqdn}" --output table
Ez az egyszerű megoldás lehetővé teszi, hogy gyorsan és könnyedén futtassunk egy alkalmazást az ACR-ben tárolt képből anélkül, hogy mélyebb Kubernetes ismeretekre lenne szükség.
Életciklus és tárhely kezelés
Az ACR lehetőséget biztosít az életciklus és tárhely kezelésére:
Retention Policies: Beállíthatunk automatikus törlési szabályokat az elavult vagy nem használt képek eltávolítására.
Tiered Storage: Az ACR támogatja a különböző szintű tárhelyeket (Basic, Standard, Premium) az igényekhez igazítva.
Garbage Collection: Az ACR automatikusan törli a nem használt rétegeket, csökkentve ezzel a tárhelyhasználatot.
ACR integráció más Azure szolgáltatásokkal
Az ACR könnyen integrálható más Azure szolgáltatásokkal:
Azure Kubernetes Service (AKS): Automatikusan betölthető konténerképek az ACR-ből.
Azure DevOps: Pipeline-ok segítségével automatizálhatjuk a képépítést és publikálást.
Azure Functions: Konténerizált funkciók futtatása közvetlenül az ACR-ből.
Azure App Service: Webalkalmazások közvetlenül ACR-ből történő futtatása.
Összegzés
Az Azure Container Registry egy kiváló eszköz a konténerizált alkalmazások tárolására és kezelésére az Azure környezetben. Az ACR segítségével biztonságosan és hatékonyan dolgozhatunk konténerképekkel, integrálhatjuk azokat DevOps pipeline-okba, és közvetlenül felhasználhatjuk Azure szolgáltatásokban. Kezdőként érdemes kísérletezni az ACR használatával, és megtapasztalni, hogyan egyszerűsítheti a konténerkezelési folyamatokat.
Szerinted is jobb biztonságosan tárolni az alkalmazásainkat?
A modern informatikai világban az automatizáció mindig is a hatékony erőforrás kezelés egyik alappillére. A DevOps és GitOps is erre épül. És ha ezen metodikákról beszélünk, akkor elsősorban az infrastruktúra automatizáció jut eszünkbe. Aki nem csak Azure-al foglalkozik neki talán a terraform ugrik be erről először.
Most viszont Azure-al foglalkozunk. Legutóbb megismertük az Azure ARM sablont, amellyel nagyon komoly és összetett rendszereket hozhatunk létre automatizáltan és hatékonyan. Ezt azonban hosszab idő lehet megtanulni, hiszen annyira komplex, hogy sokaknak nehézséget okoz. Ekkor jön képbe a Bicep.
Azure Bicep
Az Azure Bicep egy domain-specific language (DSL), amely az Azure Resource Manager (ARM) sablon egyszerűbb és olvashatóbb alternatívájaként jelent meg. Az ARM-sablonok JSON alapúak, ami gyakran nehézkessé teszi az olvasásukat és karbantartásukat. A Bicep ezzel szemben egy deklaratív szintaxist használ, amely leegyszerűsíti az infrastruktúra mint kód (IaC) megvalósítását az Azure környezetben.
Milyen kategóriába tartozik az Azure Bicep?
Az Azure Bicep az Infrastructure as a Service (IaaS) kategóriába sorolható, mivel segítségével virtuális gépek, hálózatok és egyéb infrastruktúra-erőforrások deklaratív módon történő létrehozását és kezelését teszi lehetővé az Azure-ban.
Miért érdemes használni az Azure Bicep-et?
Modularitás: Lehetővé teszi a modulok használatát, ami segít az infrastruktúra szegmentálásában és újrafelhasználásában.
Egyszerűbb szintaxis: A Bicep kód rövidebb és átláthatóbb, mint az ARM JSON sablonok.
Jobb karbantarthatóság: Könnyebb módosítani és újrafelhasználni az erőforrásokat.
Nincsenek JSON struktúrák: Nem kell bonyolult JSON szintaxissal dolgozni.
Automatikus fordítás ARM sablonná: A Bicep kódot könnyen konvertálhatjuk ARM JSON sablonokká.
Példák az Azure Bicep használatára
Egyszerű példa: Tárfiók létrehozása
Hozzunk létre egy egyszerű Bicep fájlt (storage.bicep), amely egy Azure Storage Accountot hoz létre:
Ez a példa bemutatja, hogyan lehet hierarchikus kapcsolatokat kialakítani az erőforrások között, például egy alhálózatot egy adott virtuális hálózaton belül definiálni.
Hogyan működik az Azure Bicep?
A Bicep használata során egy .bicep kiterjesztésű fájlban határozzuk meg az Azure erőforrásokat. Ezt a fájlt ezután Bicep CLI vagy az Azure CLI segítségével ARM sablonná fordítjuk, amelyet az Azure Resource Manager feldolgoz.
Tehát amire képes az ARM sablon, azt meg tudod valósítani Bicep-el is.
Bicep fájlok futtatása PowerShell-ből
PowerShell-ben a következő parancsot használhatod egy Bicep fájl deploy-olásához egy meglévő erőforráscsoportba:
Azure CLI-ben az alábbi parancsot használhatod a telepítéshez:
az deployment group create --resource-group EroforrasCsoport1 --template-file storage.bicep
Ezzel a parancsokkal az Azure Bicep fájlokat könnyedén alkalmazhatod az Azure infrastruktúrád kezelésére.
Összegzés
Az Azure Bicep egy hatékony és egyszerű eszköz az Azure infrastruktúra kezelésére. Az ARM JSON sablonokhoz képest sokkal könnyebben olvasható és írható, miközben megőrzi a teljes funkcionalitást. Ha az Infrastructure as Code (IaC) elveit követve szeretnéd automatizálni az Azure erőforrásaid kezelését, akkor a Bicep egy kiváló választás.
Ha érdekel az Azure infrastruktúra-kezelés, érdemes elkezdeni a Bicep használatát, mert időt takaríthatsz meg, és jobban skálázható megoldásokat építhetsz vele. Kódját megtalálod a GitHub-on.
Te használtad már vagy az ARM sablont vagy a Bicep fájlokat?
Mi az a DeepSeek? Egy új OpenAI modell? Nem! A DeepSeek egy hirtelen berobbant projekt, amely egyre nagyobb figyelmet kap az AI világában. A csapat célja, hogy nyílt forráskódú, nagy teljesítményű és költséghatékony AI-modelleket hozzanak létre, amelyeket a fejlesztők könnyen beépíthetnek saját rendszereikbe. Az egyik legújabb modelljük, a DeepSeek R1, mostantól elérhető az Azure AI Foundry-n, így egyszerűen kipróbálhatod és integrálhatod a saját alkalmazásaidba.
DeepSeek és Azure
A DeepSeek egy AI-kutatásra és fejlesztésre specializálódott csapat, amely nagyméretű nyelvi modelleket (LLM) és más AI-megoldásokat készít. Céljuk, hogy magas teljesítményű, nyílt forráskódú és költséghatékony AI-modelleket biztosítsanak a fejlesztők és vállalatok számára.
A DeepSeek R1 az egyik legújabb nyelvi modelljük, amely hatékony és könnyen használható, így lehetőséget ad a fejlesztőknek, hogy fejlett AI-funkciókat építsenek be alkalmazásaikba anélkül, hogy komoly infrastruktúrába kellene fektetniük.
Mostantól a DeepSeek R1 elérhető az Azure AI Foundry modellkatalógusában és a GitHub-on, így egyszerűen integrálható különböző AI-megoldásokba.
Ráadásul már magyar nyelven is elérhető hozzá a felület, ami még egyszerűbbé teszi a megismerést és a használatot.
Gyorsabb AI-fejlesztés az Azure AI Foundry-n
Az AI-technológia folyamatosan fejlődik, és egyre könnyebben elérhetővé válik. A DeepSeek R1 egy nagy teljesítményű és költséghatékony nyelvi modell, amely lehetővé teszi, hogy a felhasználók minimális infrastruktúrával kihasználják a mesterséges intelligencia előnyeit.
Ha az Azure AI Foundry platformon használod a DeepSeek R1-et, akkor gyorsan kísérletezhetsz, tesztelheted az eredményeket és skálázhatod az alkalmazásodat. A beépített eszközök segítenek az AI-modell teljesítményének mérésében és optimalizálásában.
A Microsoft célja, hogy az Azure AI Foundry egy olyan hely legyen, ahol a legjobb AI-modellek egy helyen elérhetőek, így a fejlesztők és vállalatok gyorsabban és hatékonyabban hozhatnak létre AI-alapú megoldásokat.
Biztonságos és megbízható AI
A DeepSeek R1 komoly biztonsági teszteken és ellenőrzéseken esett át, hogy minimalizálják a kockázatokat. Az Azure AI Content Safety automatikus tartalomszűrési rendszerrel is rendelkezik, amely alapértelmezetten be van kapcsolva, de igény szerint kikapcsolható.
Az Azure AI Foundry folyamatosan monitorozza az AI-modell kimeneteit, így a telepítés előtt és után is ellenőrizheted, hogy megfelelően működik-e. Ezzel biztosítjuk, hogy a platform biztonságos és megfelelőségi szempontból is vállalati szintű környezetet biztosítson.
Hogyan próbálhatod ki a DeepSeek R1-et?
Jelentkezz be az Azure Portálra, regisztrálj egy Azure AI Foundry projektet.
Keress rá a DeepSeek R1-re az Azure AI Foundry modellkatalógusában.
Nyisd meg a modell adatlapját.
Kattints a „Deploy” gombra, hogy megkapd az API-t és a hozzáférési kulcsot.
A telepítési oldalon pillanatok alatt megkapod a szükséges adatokat.
Próbáld ki a modellt a beépített playgroundban.
Használd az API-t különböző alkalmazásokkal és kliensekkel.
A DeepSeek R1 mostantól kiszolgáló nélküli, nyilvános végponton is elérhető az Azure AI Foundry-n. Kezdd el itt: Azure AI Foundry, és próbáld ki a DeepSeek modellt!
A GitHubon további forrásokat és részletes útmutatókat találhatsz a DeepSeek R1 integrációjáról, többek között az alábbi cikkben: GitHub Models.
Hamarosan a DeepSeek R1 könnyített verzióját is futtathatod helyben, a Copilot+ segítségével. További részletek a Windows Fejlesztői Blogon: Windows Developer Blog.
A Microsoft egyre nagyobb hangsúlyt fordít erre a területre és folyamatosan bővíti az Azure AI Foundry modellkatalógusát. Bevallom én is kíváncsian várom, hová fejlődik ez és, hogy a fejlesztők és vállalatok hogyan használják a DeepSeek R1-et valódi problémák megoldására. Az látszik, hogy a cél, hogy minden vállalkozás hozzáférjen a legmodernebb AI-megoldásokhoz, és a lehető legtöbbet hozza ki belőlük. Ezzel pedig egyértelműen az Azure felé terelik a felhasználókat.
Te használod már valamelyik AI megoldást vagy magát az Azure-t? 🙂
Az Azure-ban a felhőalapú erőforrások létrehozása és kezelése lehet manuális, de az igazi hatékonysága és vagánysága az automatizálásban rejlik. Az Azure Resource Manager (ARM) sablonok egy hatékony eszközt biztosítanak az infrastruktúra kód alapú kezelésére (Infrastructure as Code, IaC), amely lehetővé teszi az erőforrások deklaratív módon történő létrehozását, frissítését és kezelését.
Ebben a cikkben áttekintjük az ARM sablonok alapjait, erősségeit, valamint a egyéb lehetőségeket, mint a függvények használata, a beágyazott (nested templates) és a hivatkozott (linked templates) sablonok. Kitérünk arra is, hogyan lehet újrahasználni a sablonokat kisebb módosításokkal, illetve milyen korlátai vannak az ARM sablonoknak.
Milyen felhőszolgáltatási modellbe tartozik az ARM sablon?
Habár az ARM sablon egy eszköz, amellyel erőforrásokat hozunk létre, most a besorolást a létrehozható erőforrások alapján tesszük meg. Tehát az Infrastructure as a Service (IaaS) és Platform as a Service (PaaS) kategóriába tartozik attól függően, hogy milyen erőforrásokat telepítünk vele:
IaaS (Infrastructure as a Service): Ha virtuális gépeket, hálózati konfigurációkat vagy tárolókat hozunk létre ARM sablonok segítségével, akkor ezek az infrastruktúra réteghez tartoznak.
PaaS (Platform as a Service): Ha az ARM sablonokat például egy Azure App Service, Azure SQL Database vagy más menedzselt szolgáltatások telepítésére használjuk, akkor azokat a PaaS kategóriába sorolhatjuk.
Az ARM sablonok tehát rugalmasan használhatók mind az infrastruktúra, mind pedig az alkalmazási szintű szolgáltatások kezelésére az Azure környezetben.
Mi az az ARM sablon?
Az ARM sablon egy JSON formátumú fájl, amely deklaratívan írja le az Azure erőforrások konfigurációját. Ezzel biztosítható, hogy az infrastruktúra következetes módon legyen telepítve, akár manuálisan, akár CI/CD folyamatokban.
ARM sablon felépítése
Egy alapvető ARM sablon a következő részekből áll:
$schema: Meghatározza a sablon JSON sémáját.
contentVersion: Verziókezeléshez használható. (beágyazott és hivatkozott sablonok esetén kiemelt szerepe van)
parameters: A telepítéskor megadható paraméterek.
variables: Kiszámított értékek definiálása.
resources: Az Azure erőforrások definiálása.
outputs: A telepítés végeredményeként visszaadható adatok. (beágyazott és hivatkozott sablonok esetén különösen hasznos)
Példa egy egyszerű ARM sablonra, amely egy Tárfiókot (Storage Account) hoz létre:
Az ARM sablonok deklaratív módon határozzák meg az infrastruktúrát, így az eredmény mindig konzisztens lesz, függetlenül attól, hányszor futtatjuk.
2. Újrafelhasználhatóság és skálázhatóság
A sablonokat egyszer elkészíthetjük, majd később más projektekben is használhatjuk. Segítenek a nagyvállalati szintű infrastruktúra kezelésében.
3. CI/CD támogatás
Beépíthetők DevOps folyamatokba, így automatizált telepítéseket és frissítéseket hajthatunk végre az Azure Pipelines vagy GitHub Actions segítségével.
4. Függvények használata
Az ARM sablonok támogatják a beépített függvényeket, amelyek dinamikus adatmanipulációt tesznek lehetővé. Számtalan függvény használható a sablonban, melyek bizonyos korlátozások mellett együtt és összefűzve is használhatók.
Ezzel a módszerrel egyetlen sablont használhatunk több környezetben anélkül, hogy jelentős módosításokra lenne szükség.
Beágyazott (Nested) és hivatkozott (Linked) ARM sablonok
Beágyazott sablonok (Nested Templates)
A beágyazott sablonok lehetővé teszik, hogy egy ARM sablonon belül további sablonokat definiáljunk és telepítsünk. Ez segít az infrastruktúra modularizálásában és újrafelhasználhatóságában.
Példa egy beágyazott sablonra, amely egy Tárfiókot hoz létre:
A hivatkozott sablonok lehetővé teszik, hogy külső forrásból (például egy Azure Storage Blob-ból) töltsünk be egy másik ARM sablont. Ez különösen hasznos nagyobb infrastruktúrák esetén, ahol az egyes sablonokat külön szeretnénk kezelni és frissíteni.
A hivatkozott sablonok lehetővé teszik a jobb kezelhetőséget és karbantarthatóságot, különösen összetett környezetek esetén.
A „mode” beállítás szerepe
Bizonyára feltűnt, hogy mindegyik példában szerepel egy „mode” nevű parameter. A „mode” beállítás határozza meg, hogy az ARM sablon telepítése hogyan történjen az Azure környezetben. Két lehetőség van:
Incremental: Csak az új vagy módosított erőforrásokat hozza létre vagy frissíti. A meglévő erőforrásokat nem törli.
Complete: Az összes meglévő erőforrást eltávolítja, amely nincs megadva a sablonban, és csak az új sablon szerinti konfiguráció marad meg.
Általában az Incremental módot ajánljuk (ez az alapértelmezett), hogy elkerüljük az adatok vagy erőforrások véletlen törlését.
ARM sablon futtatása PowerShell-ből és Azure CLI-ból
Fontos, hogy a sablon telepítése előtt minden olyan „erőforrás csoportot”létre kell hoznunk, amelybe erőforrásokat szeretnénk létrehozni.
PowerShell használata
Az ARM sablon PowerShellből történő telepítéséhez az New-AzResourceGroupDeployment parancsot használhatjuk:
Azure CLI-ben az az deployment group create parancsot használhatjuk:
az deployment group create --resource-group EroforrasCsoport --template-file template.json --parameters @parameters.json
Inline paraméterek megadásával:
az deployment group create --resource-group EroforrasCsoport --template-file template.json --parameters tarfiokNeve=cloudmentorsa
Ezekkel a parancsokkal az ARM sablonokat egyszerűen telepíthetjük az Azure környezetben.
Példa egy parameters.json fájlra
A parameters.json fájl a sablon által használt paraméterek megadására szolgál, lehetővé téve a sablon egyszerű újrafelhasználását különböző konfigurációkkal. Egy tipikus parameters.json fájl így néz ki:
Ez biztosítja, hogy az ARM sablon ugyanazt a logikát kövesse, de az értékek rugalmasan változtathatók legyenek.
ARM sablonok korlátai
Bonyolult szintaxis: Az ARM sablonok JSON-alapúak, ami nagyobb komplexitás esetén nehezen olvashatóvá válhat.
Nincs beépített ismétlés: Bár van néhány lehetőség (pl. copy loop), a Terraform-hoz képest kevésbé rugalmas.
Korlátozott hibakeresési lehetőség: A hibák az Azure Portalon vagy CLI-n keresztül nehezen diagnosztizálhatók.
Hosszabb telepítési idő: Összetettebb sablonok esetén a telepítés több percig is eltarthat.
Erőforráscsoport létrehozására nem használható: A sablon egy vagy több, létező erőforráscsoportba futtatható, de erőforráscsoportot nem tud létrehozni. (az előre létre kell hozni)
Összegzés
Az Azure ARM sablonok kulcsfontosságú eszközök a modern felhőalapú infrastruktúra kialakításában és kezelésében. Ha elkezdenéd használni az ARM sablonokat, érdemes egy kisebb projektben kipróbálni őket, majd fokozatosan bevezetni az összetettebb sablonokat.
Tudtad, hogy ha az ARM-be beletanulsz, akkor azzal együtt az teljes Azure automatizálás kulcsát is megkapod? 🙂
Korábban már beszéltünk a Kubernetes-ről, Docker-ről és a különböző konténerkép kezelési megoldásokról, mint az AWS ECR és Azur ACR. Azonban arról még nem esett szó: Mi az a képfájl? Hogyan épül fel? Milyen, számunkra fontos típusokról kell beszélnünk?
A konténerizáció egyik legfontosabb eleme a konténerképek használata, amelyek a futtatható környezeteket biztosítják. A Docker és az OCI (Open Container Initiative) képek szerkezete hasonló, mivel az OCI a Docker formátumának egy nyílt ipari szabványa lett. Az OCI létrejötte azért fontos, mert egy iparági szabványt biztosít a konténerképek kezelésére, elősegítve az interoperabilitást és a hordozhatóságot különböző konténer futtatókörnyezetek között. Ezzel kiküszöböli a vendor lock-in problémát, amely egyetlen technológiai ökoszisztémához kötné a fejlesztőket és üzemeltetőket.
Most szeretném nektek bemutatni a képek szerkezetét, a rétegek kezelését, a manifest-ek szerepét és a verziókezelés módját.
Docker és OCI képek alapjai
A Docker és az OCI képek egy rétegelt fájlrendszert használnak, amely lehetővé teszi a hatékony tárolást és a gyors betöltést. Egy konténerkép három fő részből áll:
Rétegek (Layers): A képfájl tartalma rétegekre van bontva, amelyek egymásra épülnek.
Manifest fájl: Egy JSON-alapú leírófájl, amely meghatározza a kép struktúráját és annak különböző attribútumait.
Config (Konfigurációs fájl): A futási beállításokat tartalmazza, mint például a környezeti változók és az alapértelmezett parancsok.
Rétegek kezelése
A konténerképek rétegei a Copy-on-Write (CoW) elv alapján működnek. Ez azt jelenti, hogy egy újabb réteg csak a módosított fájlokat tárolja, miközben az előző rétegek változatlanok maradnak. A rétegek kezelésének főbb szempontjai:
Rétegek építése: Minden egyes RUN, COPY és ADD utasítás egy új réteget hoz létre a Dockerfile feldolgozása során. (Példa)
Rétegek optimalizálása: Érdemes minél kevesebb réteget létrehozni, és a gyakran módosuló fájlokat a végső rétegbe helyezni, hogy a cache hatékony maradjon.
Rétegek megosztása: Ha több kép ugyanazokat az alaprétegeket használja, a konténer futtatókörnyezet (pl. Docker) csak a különböző rétegeket tölti le, így csökkenti a letöltési és tárolási igényt.
A Manifest szerepe
A manifest fájl egy JSON struktúra, amely meghatározza a kép rétegeit és meta adatait. Egy tipikus manifest a következő információkat tartalmazza:
SchemaVersion: A manifest formátum verziója.
Layers: A képet felépítő rétegek listája (digest formátumban).
Config: A konfigurációs fájl hash-e, amely tartalmazza a környezeti változókat és az indítási parancsokat.
MediaType: A fájlformátum meghatározása (Docker vagy OCI specifikus).
Az OCI és Docker image manifest formátumok nagyon hasonlóak, de az OCI teljesen nyílt és szabványosított formátumot biztosít.
Képverziók és a rétegek kezelése
A konténerképek verziókezelése többnyire címkék (tags) és digest-ek segítségével történik:
Tag (Címke): Egy könnyen olvasható név, például ubuntu:24.04 vagy webalkalmazas:1.2.0. A címkék bármikor új képverzióhoz rendelhetők.
Digest (SHA256 azonosító): Egy egyedi azonosító (pl. sha256:abcd1234...), amely garantálja, hogy a megadott kép mindig ugyanaz marad.
Rétegek újrahasznosítása: Ha egy új verzióban csak néhány fájl változik, akkor a rétegek nagy része változatlan marad, és a Docker vagy OCI runtime csak az új rétegeket tölti le. Ezzel tárhelyet és internet sávszélességet is spórol.
A konténerképek rétegei az alábbiak szerint épülnek fel:
Base Image (Alapkép): Az operációs rendszer és a minimális futtatókörnyezet.
Layer 1 (Alapcsomagok és függőségek): A szükséges könyvtárak és függőségek telepítése.
Layer 2 (Alkalmazáskód hozzáadása): Az egyedi alkalmazás fájljainak bemásolása.
Layer 3 (Konfiguráció és optimalizáció): A futtatási beállítások és optimalizációk alkalmazása.
Final Image (Végleges kép): Az összes réteg egyesítésével elkészült futtatható konténerkép.
Mi a különbség a Docker és az OCI között?
Bár az OCI a Docker formátumából fejlődött ki, a kettő között van néhány alapvető különbség:
Nyílt szabvány: Az OCI egy iparági konszenzusra épülő nyílt szabvány, míg a Docker formátumát eredetileg a Docker Inc. hozta létre.
Kompatibilitás: Az OCI szabvány célja a konténerképek hordozhatóságának biztosítása bármely futtatókörnyezet között, míg a Docker esetén elsősorban a Docker Engine-re optimalizált képekkel dolgozunk.
Modularitás: Az OCI szabvány különválasztja a runtime és az image specifikációkat, így rugalmasabb, és más futtatókörnyezetek is könnyen alkalmazhatják.
Összegzés
A Docker és OCI képek rétegelt felépítése lehetővé teszi a hatékony tárolást, gyors letöltést és verziókezelést. A manifest fájl kulcsfontosságú szerepet játszik a kép struktúrájának meghatározásában, míg a rétegek megosztása és optimalizálása jelentősen csökkentheti az erőforrásigényt.
Az OCI formátum szabványosította ezt a struktúrát, így biztosítva a kompatibilitást és a jövőbeli skálázhatóságot.
Remélem kicsit sikerült érhetővé tennem a képfájlok struktúráját. 🙂
A modern alkalmazásfejlesztés egyik alappillére a konténerizáció. Az olyan eszközök, mint a Docker, lehetővé teszik, hogy alkalmazásainkat izolált, skálázható konténerekben futtassuk. A konténerizációhoz azonban szükség van egy megbízható tárhelyre, ahol a konténerképeket tárolhatjuk, kezelhetjük és megoszthatjuk.
Ebben a cikkben bemutatjuk az AWS Elastic Container Registry-t (ECR), amely egy teljes mértékben felügyelt konténerképtároló szolgáltatás az AWS-ben. A cikk segít megismerni az alapokat és megpróbál megmutatni olyan fejlettebb funkciókat, mint az integrációs lehetőségek és az automatizált életciklus kezelés.
Mi az AWS ECR?
Az AWS Elastic Container Registry (ECR) egy (PaaS) kategóriába tartozó, felügyelt szolgáltatás, amely lehetővé teszi Docker és OCI (Open Container Initiative) kompatibilis konténerképek tárolását, kezelését és megosztását.
Az ECR maga a szolgáltatás elnevezése. Ezen belül történk a varázslás, hiszen ezen belül repository-kat hozhatunk létre. Egy repository egy olyan tárhely, amely egy adott alkalmazás konténerképeit és azok különböző verzióit (változatait) tartalmazza.
Az AWS ECR struktúrája
Az alábbi hierarchikus struktúria szemlélteti az ECR-t:
Repository: tartalmazza a különböző alkalmazás verziók konténerképeit
Hogyan tölthetek fel képet az ECR-be?
Első lépés, hogy fejlesztenem kell egy alkalmazást, amely docker vagy OCI kompatibilis. Ehhez találsz példát az én GitHub kódjaim között is.
Miután elkészítetted a képfájlt a számítógépeden, vagy valamilyen pipeline segítségével, nincs más dolgod, mint bejelentkezni ECR-be és feltölteni oda az aktuális konténerkép verzióját.
Ahhoz, hogy egy Docker-képet feltölts egy ECR repository-ba, kövesd az alábbi lépéseket:
docker tag sajat-kontener:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/node-app:latest
docker tag sajat-kontener:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/node-app:1.2.0
Az ECR-ben tárolt képeket könnyen használhatod AWS szolgáltatásokkal, például az ECS vagy az EKS segítségével.
Ha egy Amazon ECS clusterben szeretnél futtatni egy konténert az ECR-ből, hozz létre egy Task Definition-t, amely tartalmazza az ECR repository URL-jét:
Amikor nagyon sok alkalmazásunk konténerképeit tároljuk és ezekből rendszeresen készítünk új verziókat, előbb-utóbb azzal szembesülünk, hogy a régi és nem használt verziók sok helyet foglalnak. Ez pedig azt jelenti, hogy sok tárhelyet foglalnak, amely növeli a költségeinket.
Szerencsére az ECR támogatja az életciklus-szabályok (Lifecycle Policies) használatát, amelyek segítenek automatikusan törölni a régi vagy nem használt konténerképeket.
Ezeket szabályokon keresztül tudjuk megtenni. Egy-egy ilyen szabályhoz csupán néhány paramétert kell megadnunk, majd a szabályok között felállítanunk egy prioritási sorrendet, a többit az AWS elvégzi helyettünk.
Példa 1: egy olyan szabályra, amely csak az utolsó 5 képverziót tartja meg, és törli a régebbi verziókat:
{
"rules": [
{
"rulePriority": 1,
"description": "Tartsuk meg az utolsó 5 verziót",
"selection": {
"tagStatus": "tagged",
"countType": "imageCountMoreThan",
"countNumber": 5
},
"action": {
"type": "expire"
}
}
]
}
Példa 2: Összetett példa: A ‘latest’ verzió soha nem törlődik, de minden más 90 nap után törlődik:
{
"rules": [
{
"rulePriority": 1,
"description": "A 'latest' verzió soha nem törlődik",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["latest"]
},
"action": {
"type": "retain"
}
},
{
"rulePriority": 2,
"description": "Minden más kép törlődik 90 nap után",
"selection": {
"tagStatus": "any",
"countType": "sinceImagePushed",
"countUnit": "days",
"countNumber": 90
},
"action": {
"type": "expire"
}
}
]
}
AWS ECR integráció más AWS szolgáltatásokkal
Az AWS ECR könnyen integrálható más AWS szolgáltatásokkal, mint például:
Amazon ECS (Elastic Container Service)
Az ECR közvetlenül támogatja az ECS Fargate és ECS EC2 alapú futtatási módokat. Ha egy ECS clusterben szeretnéd futtatni az ECR-ben tárolt képeket, egyszerűen megadhatod az ECR repository URL-jét a Task Definition-ben.
Amazon EKS (Elastic Kubernetes Service)
Ha Kubernetes-t használsz az AWS-en, akkor az ECR tökéletes tárhely lehet a Kubernetes Pod-ok számára. Az alábbi módon hozhatsz létre hitelesítési „secret”-et, amely lehetővé teszi a Kubernetes számára az ECR repository elérését:
Ha AWS Lambda-t szeretnél konténer alapú csomagként használni, akkor az ECR egy megbízható tárhely lehet az ilyen konténerképek számára.
Összegzés
Az AWS ECR egy igazán sokoldalú konténerképtároló szolgáltatás, amely lehetővé teszi a konténerizált alkalmazások hatékony kezelését. Az életciklus-kezelés segít optimalizálni a tárhely felhasználást, így elkerülhető a felesleges konténerképek felhalmozódása. Emellett az ECR könnyedén integrálható más AWS szolgáltatásokkal, így egy teljes körű konténerizált fejlesztési és futtatási (teszt, éles, stb.) környezetet kínál.
Neked is van olyan ötleted, amelyet konténerképben lehetne ECR-en tárolni? 🚀
A felhő (Cloud) ma már mindennapi életünk része, mégis sokan még mindig misztikus, bonyolult technológiának tartják. Ha Te is azok közé tartozol, akik szeretnék megismerni, hogyan működik a Cloud és milyen lehetőségeket kínál, de tartasz attól, hogy csak programozói tudással lehet benne karriert építeni, akkor ez a cikk Neked szól!
Mi az a Cloud?
Internetről elérhető számítógépek összessége, amelyeken valamilyen alkalmazás és/vagy adatbázis működik
Egyszerűen fogalmazva a Cloud (felhő) egy olyan szolgáltatási modell, amely lehetővé teszi az adatok tárolását, alkalmazások futtatását és informatikai erőforrások igénybevételét az interneten keresztül. Ahelyett, hogy egy adott vállalat vagy személy saját szervereket tartana fenn, a felhő lehetőséget ad arra, hogy ezekhez a szolgáltatásokhoz bárhonnan hozzáférjünk.
Miért fontos a Cloud?
A Cloud a modern vállalatok és technológiák mozgatórugója. Segít a költségek csökkentésében, az adattárolás biztonságának növelésében és az innovatív ötletek gyorsabb megvalósításában. Napjainkban már nemzetközi viszonylatban is átlagosnak tekinthető a felhő használata. Ez motiválhat Téged is arra, hogy belépj ebbe a világba.
Szükséges-e programozói tudás a Cloud karrierhez?
A legnagyobb tévhit a Cloud-dal kapcsolatban, hogy csak programozók és fejlesztők tudnak benne elhelyezkedni. Ez nem igaz! Azt nem tagadom, hogy ha egy projektet indítunk, akkor a felhő kapcsán előbb-utóbb programoznunk kell. Ez a felhő sajátossága. Azonban a Cloud rengeteg más szerepkört is kínál, amelyekhez nincs szükség kódolási tudásra. Ilyenek például:
Cloud Sales és marketing: Cloud megoldások értékesítése és promóciója vállalatok számára.
Cloud Project Manager: Cloud alapú projektek vezetése, különböző csapatok koordinálása.
Cloud Support: Segítségnyújtás és úgyfélszolgálat Cloud szolgáltatásokhoz.
Business Analyst: Elemzések készítése, amely segíti a Cloud megoldások bevezetését és optimalizálását.
Hogyan érdemes elkezdeni?
Ha szeretnél megismerkedni a Cloud világával, érdemes az alábbi lépéseket követni:
Tanulj az alapokról: Számos ingyenes forrás áll rendelkezésre, mint például az AWS, Azure és Google Cloud ingyenes oktatási anyagai, vagy az én blogom is, ahol az alapokkal is rendszeresen foglalkozunk.
Próbálj ki Cloud szolgáltatásokat: Készíts saját fiókot egy Cloud platformon, és fedezd fel a lehetőségeket. (Azure-ban kaphatsz 200 USD-t 30 napra. És mindig vannak ingyenes szolgáltatások.)
Vegyél részt tanfolyamokon: Számos online képzés segít az alapok elsajátításában, akár programozói tudás nélkül is. Én a Gerilla Mentor Klub oktatójaként meleg szívvel ajánlom az itteni képzéseket.
Csatlakozz közösségekhez: Facebook csoportok, LinkedIn fórumok és olyan oktatással foglalkozó cégek közössége mint például a Gerilla Mentor Klub kiváló lehetőséget biztosítanak a tanulásra és kapcsolatépítésre.
Hogyan építhetünk Cloud karriert, ha nincs mély informatikai tudásunk?
A Cloud karrierépítés nem igényel feltétlenül mély technikai ismereteket. Ha nincs informatikai háttered, az alábbi lépések segíthetnek:
Fókuszálj az üzleti és menedzsment (vezetői) pozíciókra: A Cloud világában nemcsak mérnöki, hanem üzleti, ügyfélszolgálati és projektmenedzsment szerepek is elérhetők.
Fejleszd a Cloud alapú eszközök ismeretét: Olyan szolgáltatásokat érdemes megismerni, mint a Google Drive, Microsoft 365, OneDrive, vagy bármilyen SaaS (Software-as-a-Service) megoldás.
Szerezz tanúsítványokat: Az olyan belépő szintű tanúsítványok, mint az AWS Certified Cloud Practitioner, az Azure Fundamentals vagy a Google Cloud Digital Leader, segíthetnek megérteni az alapokat és megnövelhetik az esélyeidet a munkaerőpiacon. Habár ehhez kell némi informatikai tudás, bárki számára elérhető.
Vegyél részt Cloud fókuszú képzéseken: Tanulj meg Cloud alapú költségoptimalizálást, digitális transzformációt vagy ügyféltámogatási stratégiákat. Olyan területekre fókuszálj, amelyek habár nem konkrétan a felhővel kapcsolatosak, de a felhőben is létező terletek.
Építs kapcsolatokat Cloud szakemberekkel: Vegyél részt konferenciákon, lépj be online közösségekbe, ahol tapasztaltabb emberektől tanulhatsz. Építs kapcsolatot LinkedIn-en és keress hozzád hasonló, fejlődni vágyó embereket.
Keress gyakornoki vagy junior pozíciókat: Sok vállalat keres olyan embereket, akik nyitottak a tanulásra, és az alapok elsajátítása után fejlődhetnek a vállalaton belül.
Összegzés
A Cloud nem csak a fejlesztők és mérnökök világa. Rengeteg lehetőséget kínál olyanok számára is, akik üzleti, projektmenedzsment vagy ügyfélszolgálati területen szeretnének elhelyezkedni. A legfontosabb lépés az, hogy merj elindulni és felfedezni ezt a dinamikusan fejlődő világot!
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. 🙂