Tartalomjegyzék
Azon vállalkozások életében, amelyek fő hajtóereje egy alkalmazás vagy egy informatikai rendszer, a skálázhatóság, a stabilitás és a megvalósítás gyorsasága hatalmas szerepet játszik. Emiatt egyre több vállalat fordul a konténerezés felé. A konténerezés az alkalmazáselemek (folyamatai, függőségei, könyvtárai, konfigurációs fájljai vagy helyi adatbázisai) dinamikusan kezelt tárolókba történő elhelyezéséről szól.
A konténerezésnek számos előnye van. Az egyik az áthelyezhetőség, ami azt jelenti, hogy az egyszer megírt rendszer különféle környezetekben futtatható. Ennek köszönhetően a fejlesztők új funkciók létrehozására fordíthatják az idejüket, ahelyett, hogy a rendszert az infrastruktúra követelményeihez igazítanák. Maga a megvalósítási folyamat is egyszerűbb, gyorsabb és biztonságosabb.
Egy ezer vagy millió konténerből álló, kiterjedt rendszer esetén azonban a kezeléshez szükségünk van egy alkalmazáskezelő (ang. ún. orchestration) platformra. Az „orchestration” lehetővé teszi az automatizálás, a csoportmenedzsment, a fejlett folyamatfigyelés, a változásszabályozás vagy -felderítés és a hibák automatikus javításának bevezetését.
A legnépszerűbb alkalmazáskezelő platformok közé tartozik a Kubernetes és a Docker Swarm. Az alábbiakban bemutatjuk a megoldások közötti fontos különbségeket, illetve azok előnyeit és hátrányait.
Mi az a Kubernetes?
A Kubernetes, vagy röviden K8s egy nyílt forráskódú, konténer alapú alkalmazáskezelő szoftver. Támogatja az automatikus bevezetéseket, az alkalmazások skálázását, kezeli a konténereket és figyeli a folyamatokat és a változásokat. Segít a klaszterek (egymással együttműködő gépek csoportja) és node-ok (egy-egy gép a klaszteren belül) tömeges kezelésében, így lerövidíti a folyamatot, amellyel az alkalmazást az infrastruktúrához igazítjuk, és leegyszerűsíti a változások bevezetését és új elemek hozzáadását a rendszerhez.
A Kubernetes platformot a Google fejlesztette ki 20 évvel ezelőtt azzal a céllal, hogy támogassa a cég éles üzemét, heti milliárd konténer elindításával. 2014-ben a projektet átadták a Cloud Native Computing Foundationnek (CNCF; a Linux Foundation része), a program licencét pedig Apache 2.0-ra változtatták. Ettől kezdve a platformot a CNCF támogatja, és folyamatosan fejleszti az azt használó közösség segítségével.
A Kubernetes elérhető a Google Cloud Platformon mint Kubernetes as a Service (Google Kubernetes Engine szolgáltatás – GKE).
További információt találhatsz a K8s-ről az alábbi cikkben “Kubernetes – mi ez, és hogyan kezdjük el használni?”.
Mi az a Docker Swarm?
A Docker Swarm a Kuberneteshez hasonlóan egy konténeres alkalmazáskezelő eszköz a legkülönbözőbb infrastrukturális környezetek számára. Ez egy nyílt forráskódú platform, amelynek forráskódja az Apache 2.0 licenc alatt érhető el. A Swarmot a gyártó (Docker) biztosítja és támogatja, valamint az azt használó közösség segítségével is fejlesztik.
A Docker Swarm az egyes elemek és teljes klaszterek (fizikai vagy virtuális gépek csoportjai) kezelésére szolgál a Docker Engine használatával. Így megkönnyíti az alkalmazás kezelésének folyamatát, felgyorsítja az új bevezetéseket, és sok DevOps-tevékenységet kezel a fejlesztők helyett, például a szoftvert az adott infrastruktúra követelményeihez igazítja. Hibátlanul működik minden olyan alkalmazással, amely a Dockert használja a konténerezéshez.
Kubernetes vs. Docker Swarm – összehasonlítás
Az alkalmazás meghatározása és telepítése
Kubernetes:
Az alkalmazás telepíthető és elindítható a podok, szolgáltatások (services) vagy mikroszolgáltatások (microservice) kombinációjának és deployment (az alkalmazás életciklusát kezelő megvalósítási objektum) segítségével.
Docker Swarm:
Az alkalmazások telepíthetők szolgáltatásként (services) vagy mikroszolgáltatásként (microservices) a klaszterekben. A YAML fájlok lehetővé teszik több konténer definiálását. Az alkalmazást a Docker Compose segítségével is telepíthető.
Elérhetőség (availability)
Kubernetes:
A Kubernetes támogatja az alkalmazások magas rendelkezésre állását. A telepítés lehetővé teszi podok (összekapcsolt konténerek csoportjai) telepítését nodok (a klaszterben lévő gépek) között a magas rendelkezésre állás biztosítása érdekében, még hiba esetén is. A load balancinggal (terheléselosztó funkcióval) rendelkező webhelyek a nem megfelelően működő podokat kiszűrik, és eltávolítják őket.
Docker Swarm:
A Docker Swarm is magas elérhetőségre törekszik. A szolgáltatások node-okban replikálhatók, és a fő node (swarm manager) felelős a teljes klaszterért, és ez kezeli az erőforrások elosztását az elemei között.
Terheléselosztás (load balancing)
Kubernetes:
A Kubernetes beépített load balancing (a gépek közötti terheléselosztási technika) technikával rendelkezik, amely kézi konfigurálást és aktiválást igényel. A podokat szolgáltatásként definiálják, és load-balancerként használhatók egy klaszterben. A load balancinghoz ingress vezérlőt használnak – egy API objektumot, amely kívülről kezeli a klaszterhez való hozzáférést, például HTTP és HTTPS protokollok segítségével.
Docker Swarm:
A Swarm egy olyan DNS-összetevővel rendelkezik, amely a szolgáltatásoknak küldött kéréseket kezeli. A szolgáltatások a felhasználó által megadott portokon futhatnak, vagy automatikusan hozzárendelhetők.
Bevezetések (roll-outs)
Kubernetes:
Az alkalmazások Kubernetes deploymenttel történő kezelése kiterjed az alkalmazás frissítésének módjára. A deployment legfőbb előnye, hogy a rendelkezésre álló stratégiákon belül kiszámítható módon elindíthatja és leállíthatja a podokat: rolling-update (a meglévő podok cseréje) és recreate (a meglévő podok eltávolítása az új létrehozása előtt). Rolling update esetén a megvalósítás menete és hatása módosítható a maxUnavailable (lehetővé teszi a nem elérhető podok számának korlátozását) és a maxSurge (meghatározza az újonnan létrehozott alhálózatok számának korlátját) opcióval.
Docker Swarm:
Alapértelmezés szerint a frissítési ütemezés egy-egy feladatot futtat. A Docker Swarm lehetővé teszi az egyidejű frissítések számának konfigurálását és annak megjelölését, hogy a frissítő programnak milyen feladatot kell elvégeznie hiba esetén (különben a program leállítja a frissítést). A Docker Swarm lehetővé teszi az ütemezett frissítések közötti időintervallumok konfigurálását.
A megfelelő működés ellenőrzése (health check)
Kubernetes:
Kétféle health checkkel rendelkezik liveness, amely ellenőrzi az alkalmazás reakciókészségét és a readiness-t, ami az alkalmazás készenlétét erősíti meg (az alkalmazás reszponzív, de pl. jelenleg olyan folyamatot hajt végre, amely felfüggeszti az azonnali válaszadás lehetőségét). A K8s rendelkezik egy „beépített” naplózási mechanizmussal, amely lehetővé teszi az adott podot alkotó tárolók közötti tevékenység figyelemmel kísérését.
Docker Swarm:
A health check csak a szolgáltatásokra korlátozódik. Ha a szolgáltatást támogató konténer nem indul el, akkor új konténert indít el. A felhasználó manuálisan beállíthatja az állapotellenőrzési funkciót a HEALTHCHECK utasítással.
Tárolás (storage)
Kubernetes:
A Kubernetes két API-val rendelkezik a tároláshoz: PersistentVolume (PV) és PersistentVolumeClaim (PVC). A PersistentVolume a klaszter memóriaeleme (a rendszergazda hozhatja létre, vagy dinamikusan is létrehozható a memóriaosztályokon keresztül). Az API rögzíti a tárhely megvalósításának részleteit, például az NFS-t, az iSCSI-t vagy egy felhőszolgáltató-specifikus tárolórendszert, például a PersistentDisk-et for Google Cloud Platformot. A PersistentVolumeClaim olyan megőrzési kérelmet tartalmaz, amelyet a felhasználó küldött ki. A PVC hasonló a podhoz; pod felhasználja a node erőforrásait, a PVC pedig PV erőforrásait. Speciális méreteket és hozzáférési módokat kérhet (pl. Egyszer telepíthetők, egyszer írhatók, vagy egyszerre többször is).
A Docker démon által egy node-on használt memóriaforrások módosítása ideiglenesen eltávolíthatja a node-ot a klaszterből.
Docker Swarm:
A Docker Engine és a Docker Swarm platform támogatja a kötetek konténerekbe helyezését. A protokollokat tartalmazó kötetek (pl. NFS, iSCSI) a node-okban konfigurálhatók. A beépülő modulok figyelembe veszik a különböző platformokat, beleértve az Azure-t, a Google Cloud Platformot, a NetAppot vagy Dell EMC-t.
Hálózat (networking)
Kubernetes:
A platform lapos hálózati modellel rendelkezik, amely lehetővé teszi a podok közötti kommunikációt. A hálózati házirendek meghatározzák, hogy az alállomások hogyan cserélnek információt egymással. A Kuberneteshez két CIDR-re van szükség (Classless Inter-Domain Routing): az egyik, ahonnan a podok IP-címeket fogadnak, a másik pedig a szolgáltatásokhoz.
Docker Swarm:
A Docker Swarm szolgáltatásban több állomás közötti hálózati kommunikáció kezelhető egy átfedő hálózat létrehozásával. Létrehozhat hídhálózatokat is, amelyek lehetővé teszik a kommunikációt a gazdagépen belül. A felhasználók átfedő hálózat létrehozásakor titkosíthatják a konténerben lévő adatforgalmat (data traffic).
Teljesítmény és skálázhatóság (performance & scalability)
Kubernetes:
A Kubernetes 1.18 verziója legfeljebb 5000 node-ot tartalmazó klasztereket támogat. Támogatja a következő konfigurációkat is:
- 5000 node-ig,
- 150 000 podig,
- 300 000 konténerig,
- 100 podig egy node-on.
A Kubernetes két SLO (Service Level Objectives) alapján nyújt skálázhatóságot:
- API válaszkészség: Az összes API 99% -a kevesebb mint 1 másodperc alatt válaszol,
- a pod elindítása: Az összes pod és a konténereik 99%-a kevesebb, mint 5 másodperc alatt elindul.
Docker Swarm:
A Docker képes akár 30.000 konténer és 1000 node skálázására, amelyeket egy Swarm kezelő kezel (fő node).
Kubernetes vs. Docker Swarm – a platformok előnyei és hátrányai
A Kubernetes előnyei:
- nyílt forráskódú projekt, moduláris és folyamatosan fejlesztett,
- az alkalmazáskezelő platformok között ennek a legnagyobb a közössége – több mint 50 000 commit és 1200 közreműködő,
- a Cloud Native Computing Foundation (CNCF) támogatása,
- az egyes operációs rendszerek megfelelő működése,
- könnyű szervezés és világos felépítés a podoknak köszönhetően.
A Kubernetes hátrányai:
- meredek tanulási görbe – a Kubernetes használatát meglehetősen nehéz önállóan elkezdeni,
- külön kezelési eszközökre van szükség, többek között a kubectl CLI-re,
- nem kompatibilis a DockerCLI és a Docker Compose programokkal.
A Docker Swarm előnyei
- nyílt forráskódú projekt, amelyet a készítő és a közösség folyamatosan fejleszt,
- hibátlan működés a Docker környezetben, teljes integráció a Docker Compose-zal és a Docker CLI-jal,
- egyszerű telepítés és gyors konfigurálás,
- könnyebb tanulás a lapos tanulási görbének köszönhetően.
A Docker Swarm hátrányai
- a Docker API-ra korlátozott funkciók,
- nagyméretű és komplex bevezetésekhez nem elegendő kapacitás,
- korlátozott ellenállás a hibákkal és vészhelyzetekkel szemben,
- a Kuberneteshez képest kisebb közösség – 3000 commit és 160 közreműködő.
Melyik rendszert válassza a cége számára?
Az eszköz kiválasztása a szervezet jellegétől és a fejlesztendő terméktől függ. Ha a fő érték a megvalósítás sebessége (különösen, ha a termék nem túl összetett és igényes), akkor érdemes a Docker Swarmhoz fordulni. Vitathatatlan előnyei a telepítés egyszerűsége, a tanulás sebessége és a Docker környezettel való kompatibilitás.
Ha azonban a fő érték a fejlődés stabilitása és kiszámíthatósága, akkor jobb a Kubernetes platformot választani. Különösen akkor, ha egy kiterjedt, több ezer vagy millió konténerből álló rendszerre van szükség. A platform képességeinek kiismeréséhez szükséges idő hosszabb, de a befektetett idő számos hasznos funkció és hozzáférés formájában térül meg, melyek segítségével a platformot a vállalkozás igényeihez igazíthatjuk.
Segítünk a megoldás kiválasztásában
Ha nem vagy biztos benne, hogy melyik szolgáltatás lenne a legmegfelelőbb a terméked számára, akkor vedd fel velünk a kapcsolatot. A tanúsítvánnyal rendelkező Cloud Architectünk segít elvégezni az elsődleges elemzéseket, és kiválasztani a megfelelő technológiát. Ezenkívül, ha úgy döntesz, hogy a Google Cloud Platform – skálázható felhőinfrastruktúra – alapján velünk fejleszted a rendszeredet, akkor most egy 500 dollár értékű utalványt kapsz, amelyet a GCP-ben használhatsz fel, teljes technikai támogatás mellett. Illetve biztosítjuk, hogy helyi valutában rendezd a felhőszolgáltatás költségeit.