Kubernetes – mi ez és hogyan kezdjük el használni?

Egyre több informatikai rendszert hoznak létre konténerek használatával. 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. Egyesíti a virtualizáció és a rendszer fizikai szerveren tartásának előnyeit. Vagyis biztosítja a skálázhatóságot, a szoftverek gyors és könnyű hordozhatóságát és a példányok szétválasztását a nagy teljesítmény fenntartása mellett.

Míg több konténer manuálisan vezérelhető, több száz vagy ezer elosztott és dinamikusan kezelt konténer esetében ez nagyon nehézkessé válik. A válasz az „orchiestration”, vagyis az automatizálás bevezetése a csoportok kezelésére és a konténerek figyelésére. A legnépszerűbb ilyen eszköz a Kubernetes.

Mi az a Kubernetes?

A Kubernetes egy nyílt forráskódú platform, amelyet nagy méretű tárolók kezelésére használnak.

A név görögből származik – a „κυβερνήτης” kormányzót jelent, amely tökéletesen közvetíti a platform célját. A Kubernetes-t K8s-nek is hívják – ez egy rövidítés, ahol a nyolc „ubernete” betű helyébe a „8” szám lép.

Az eszközt a Google közel 20 évvel ezelőtt hozta létre a vállalat produkciós terhelésének kezelésére. 2014-ben a projektet átadták a Cloud Native Computing Alapítványnak, és nyilvánosságra hozták – azóta a platformot a Kuberneteset használó szervezet, valamint vállalatok és szakemberek fejlesztik (a felhasználóik is részt vehetnek nyílt forráskódú projektekben).

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. Az alkalmazástulajdonosok és a platformot használó fejlesztőcsapatok jobban összpontosíthatnak termékeik fejlesztésére, mint DevOps tevékenységeikre (infrastruktúra-menedzsment és a termék igényeinek való megfelelés). A Kubernetes lehetővé teszi klaszterek (egymással együttműködő szervercsoportok) kezelését, így a felhasználó szempontjából egy egyszerűsített rendszer jelenik meg. A K8s mentesíti a fejlesztőt az alkalmazás infrastrukturális követelményekhez való igazításának kötelezettsége alól – a szakember elrendeli az alkalmazás elindítását, a Kubernetes pedig maga is fel tudja osztani a szolgáltatásokat klaszterek és szerverek között, és a megfelelő tárolókhoz irányíthatja. A Kubernetesnek megvan a saját terheléselosztási formája, vagyis a terhelés több gép közötti elosztására (kiegyenlítésére) szolgáló technikák.

A K8s-t a legtöbb nyílt felhőszolgáltatás támogatja, így a Google Cloud Platform is.

Nézd meg:

Központosítás

A Kubernetes platform lehetővé teszi, hogy az összes klasztert, szervert és konténert egy helyről kezelje, függetlenül attól, hogy hol vannak a gépek vagy az alkalmazás-összetevők. Támogatja a csoportos tervezést, megvalósítást, méretezést és az elemek életciklusainak kezelését.

Skálázhatóság

A K8s központi eleme a skálázhatóság – az eszközt a Google heti több milliárd konténer futtatására hozta létre. A végrehajtott műveletek, a használt gépek vagy a konténerek számától függetlenül nincs szükség a DevOps csapat bővítésére vagy csökkentésére. Vízszintesen is méretezheti és csökkentheti az erőforrásigényt parancsokkal a felhasználói felületen keresztül, vagy automatikusan a CPU terhelése alapján.

Különböző infrastrukturális megoldások

A Kubernetes együttműködik a fizikai szerverek infrastruktúrájával, felhő- és hibrid megoldásokkal (összekapcsolja a helyi központot a felhővel). Különféle nyilvános felhőszolgáltatók támogatják. Pl.: Google Cloud Platform, Amazon Web Services vagy a Microsoft Azure.

Összhang a környezetek között

Miután az alkalmazás elindult a platformon, hordozható alkalmazássá válik. Az alkalmazás átruházható környezetek (pl. fejlesztés, tesztelés, gyártás) és infrastrukturális megoldások között, az alkalmazás konzisztenciájának fenntartása mellett.

A meghibásodások megelőzése és az önjavítás

A K8s fokozatosan vezeti be a változásokat, miközben figyelemmel kíséri az egyes példányok állapotát. Ha valami nem stimmel, a Kubernetes automatikusan visszaveti a módosításokat. Abban az esetben, ha az egyik tároló összeomlik, az eszköz lecseréli egy másikra, miközben a helyreállításon vagy a felesleges elemek eltávolításán dolgozik.

A platform folyamatos fejlesztése

A Kubernetes egy nyílt forráskódú projekt. A fejlesztésében nemcsak a tulajdonosok, de a platformot napi szinten használó emberek is részt vesznek: fejlesztők, DevOps szakemberek, programozó vállalatok. Új elemeket hoznak létre, vagy javasolják a meglévő folyamatok és eszközök fejlesztését.

A Kubernetes használata – példa:

A platformot lelkesen használják a fejlett szolgáltatásokkal rendelkező, nagy mennyiségű adatot kezelő, zökkenőmentes és gyors fejlesztésre összpontosító vállalatok.

  • CERN (The European Organization for Nuclear Research) jelenleg mintegy 300 petabájt adatot tárol, és ezek száma folyamatosan növekszik (a becslések szerint a CERN néhány éven belül tízszer több adattal rendelkezik). Ezenkívül a szervezetnek szezonális terhelési csúcsai vannak, és nagyon skálázhatónak kell lennie. A CERN hibrid infrastruktúrát használ – az adatokat napi szinten tárolja és feldolgozza a helyi szervereken, és szükség esetén a felhőre skálázza a megoldást. A konténer-kezelés a Kubernetes használatával lehetővé tette a szervezet számára, hogy teljesen automatizálja az alkalmazás-támogatást, egyszerűsítse a megvalósítási folyamatot és felgyorsítsa a technológiai fejlődést, többek között azáltal, hogy egy klaszter hozzáadásának időtartamát több mint 3 óráról 15 percre csökkentette, míg egy új csomópontét (gépek egy klaszterben) több mint 30 percről 2 percre.
  • Nokia a távközlési hálózathoz kapcsolódó termékeket és megoldásokat hoz létre, és számos szolgáltató számára nyújt megoldásokat. A Nokia partnercégeinek különböző infrastrukturális megoldásai vannak: egyesek helyi adatközpontokat (fizikai szervereket), mások virtuális gépeket vagy felhőket, mások pedig hibrid megoldásokat használnak. A Nokia célja, hogy egy teljesen hatékony megoldást nyújtson a partnereknek anélkül, hogy a terméket minden alkalommal más infrastruktúrához kellene igazítania. A Kubernetes használatával bármilyen környezetben futtatható termékeket képesek létrehozni. A K8s támogatja az új funkciók hozzáadását és a tesztek elvégzését anélkül, hogy felosztaná azokat a célkörnyezetben, ami lehetővé teszi, hogy minden megvalósítással több száz órát takarítsanak meg.
  • Az Adidas a Kubernetes kínálta lehetőségek felhasználásával fejleszti e-commerce webhelyét. Mielőtt a vállalat elkezdte használni a K8s-t, a változtatások bevezetése nehézkes volt, és a megvalósítások gyakran elakadtak a DevOps szakaszban – például a fejlesztőknek 30 perc helyett akár egy hétig is várniuk kellett, hogy hozzáférjenek egy virtuális géphez. A weboldal konténerbe helyezése és a Kubernetes elindítása után a fejlesztők új funkciók létrehozására összpontosíthatnak, ahelyett, hogy részletesen alkalmazkodnának a rendszerhez és az infrastruktúra követelményeihez, vagy a DevOps támogatására várnának. Korábban 4-6 hetente jelentek meg új kiadások, most naponta többször is.

A Kubernetes lehetőségeit a Booking.com, a BlaBlaCar, az ING Group és a Zalando is használja.

Kubernetes a Google Cloud Platfromon – tutorial

Először lépjünk be a Google Cloud konzolra. https://console.cloud.google.com/.

Hozzunk létre új projektet (kattintsunk a projekt nevére a „Google Cloud Platform” felirat melletti bal felső sarokban).

Google Cloud Platform - tworzenie nowego projektu

Írjuk be a projekt nevét és kattintsunk a Create gombra.

Google Cloud Platform - tworzenie nowego projektu

Ezután a projektlistára lépve (a „Google Cloud Platform” felirat mellett) megkapjuk a projekt ID-jét. Erre a továbbiakban szükségünk lesz.

Google Cloud Platform - tworzenie nowego projektu

Megnyitjuk a Cloudshellt (jobb felső sarok).

Kubernetes tutorial - cloudshell

Az alábbi paranccsal beállítjuk a projektet, amellyel dolgozni fogunk:

1gcloud config set project k8s-demo-281313

Figyelj oda, hogy a parancsba a projekted ID-ját írd be. Ez különbözhet a példában használttól.

Kubernetes tutorial - ustawienia projektu

Ezután beállítjuk a régiót, amelyben be szeretnénk vezetni az alkalmazást:

1gcloud config set compute/zone europe-west3-c

A régiók listáját az alábbi helyen találjuk: https://cloud.google.com/about/locations#europe

Kubernetes tutorial - ustawienie regionu

Klasztert az alábbi paranccsal hozhatunk létre:

1gcloud container clusters create my-cluster--num-nodes=1

A –num-nodes flag segítségével állíthatjuk be a node-ok (fizikai vagy virtuális gép) számát a klaszterben. A flagről további információt találsz az alábbi linken: https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#–num-nodes

Ez az operáció néhány percet vesz igénybe.

Az operáció végén a Cloudshellben megkapjuk azt a táblázatot, amely tartalmazza a klaszter paramétereit.

Kubernetes tutorial - parametry klastra

Ezután használjuk az alábbi parancsot:

1gcloud container clusters get-credentials my-cluster

A parancs aktualizálja a kubeconfig fájlt a megfelelő referenciákkal és információkkal, amelyek a klaszter további használatához szükségesek.

Kubernetes tutorial - aktualizacja pliku o referencje i informacje

Az alkalmazás bevezetéséhez a klaszterre használjuk az alábbi parancsot: 

1kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

Az –image flag mutat arra a linkre, amin a konténerizált alkalmazás elérhető a Container Registryben (GCR). A Container Registry segít az alkalmazás konténerizált képének tárolásában. A GCR-ről további információt találsz az alábbi linken: https://cloud.google.com/container-registry

Itt található a bevezetendő hello-app alkalmazás forráskódja: https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/hello-app/main.go

Az alkalmazásunkat bevezethetjük a Container Registryben tárolt konténerizált alkalmazáskép segítségével.

Kubernetes tutorial - contaner registry

Most fel kell fednünk az alkalmazást (ezpose). Erre a célra használjuk az alábbi parancsot:

12kubectl expose deployment hello-server --type LoadBalancer \--port 80 --target-port 8080

kubectl parancsról további információt találsz az alábbi linken: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose

A –type flag mutatja meg, hogy milyen típusú bevezetésről van szó (ClusterIP, NodePort, LoadBalancer lub ExternalName). Ebben az esetben LoadBalancert hozunk létre, ami lehetővé teszi, hogy az alkalmazás elérhető legyen az interneten.

A –target-port flag azt a portot mutatja meg a konténeren, ahová a forgalmat irányítani kell.

Ezután adjuk meg az alábbi parancsot:

1kubectl get service hello-server

Ezzel megkapjuk annak a klaszternek a publikus IP címét, amelyre bevezettük az alkalmazást.

Kubernetes tutorial - IP klastra

Eredmény

Kubernetes tutorial - hello world

A klaszter törléséhez és a bevezetés visszahívásához használjuk az alábbi parancsot:

12kubectl delete service hello-servergcloud container clusters delete my-cluster
Kubernetes tutorial - usuniecie klastra

Ezek voltak a Kubernetes alapjai!

forrás: https://flyonthecloud.com/hu/blog/kubernetes-tutorial/

Ajánlott Datatronic szolgáltatás a témához...