Kubernetes - mi ez és hogyan kezdjük el használni? [Tutorial a GCP-n]

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:
1 gcloud 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:
1 gcloud config set compute/zone europe-west3-c
Kubernetes tutorial - ustawienie regionu
  • Klasztert az alábbi paranccsal hozhatunk létre:
1 gcloud 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:
1 gcloud 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: 
1 kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
Kubernetes tutorial - contaner registry
  • Most fel kell fednünk az alkalmazást (ezpose). Erre a célra használjuk az alábbi parancsot:
12 kubectl expose deployment hello-server --type LoadBalancer \--port 80 --target-port 8080
  • A 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:
1 kubectl 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:
12 kubectl delete service hello-servergcloud container clusters delete my-cluster
Kubernetes tutorial - usuniecie klastra

Ezek voltak a Kubernetes alapjai!

Forrás: