Bart Digital Products Bart Digital Products

CodeCon 2019 – Úvod do Kubernetes

Tohtoročnú sériu konferencií sme začali na Bratislavskom CodeCon-e, najväčšej slovenskej developerskej konferencii. Obsah prednášok je na podobnej úrovni ako na zahraničných svetových konferenciách a možno ich dokonca niekedy aj predčí. Obrovským plusom konferencie bolo najmä to, že väčšina prednášajúcich nechala svoje bussiness-talky doma a venovala sa developmentu tak, ako bolo sľúbené.

Pokryť obsah celej konferencie v jednom článku by asi nebolo možné. Vyberám preto pre mňa osobne najzaujímavejší topic, ktorý do budúcna nájde využitie aj pri našich projektoch. Reč je o Kubernetes-e, ktorý okrem toho, že je pre našich zákazníkov lákavým technologickým riešením a vystihuje aj veľkú časť obsahu konferencie, ktorou bol práve cloud, serverless architektúra a používanie kontajnerizovaných aplikácií.

Problém s vývojom

Každý portál, eshop, ale aj obyčajný web potrebuje na to aby bežal sériu aplikácií. Potrebujeme databázu, webový server (apache nginx) a v súčasnosti aj napríklad Redis alebo Elasticsearch. Zároveň potrebujeme, aby bolo toto prostredie konzistentné naprieč vývojovým prostredím u programátora, testovacím serverom a produkčným serverom. Navyše, súčasné požiadavky na webové aplikácie si vyžadujú rýchle nasadenie novej verzie kódu a zároveň vysokú dostupnosť pre koncových zákazníkov. Ako toto všetko skĺbiť tak, aby boli všetci šťastní?

dance dog GIF by TikTok

Jedná sa skutočne o veľkú výzvu. Svojho času sme tento problém riešili pomerne komplikovane. Developerské prostredie bolo zabezpečené serverom, ktorý bežal 24 hodín denne a bolo na ňom dostupné všetko, čo bolo potrebné pre vývoj eshopov a webov. Čoskoro sa ale ukázalo, že projekty, ktoré majú špeciálne požiadavky, si vyžadujú aj špeciálne prostredie a teda namiesto jedného development prostredia sme ich používali hneď niekoľko. Napríklad MongoDB sme mali nainštalované lokálne, podobne ako keď si do PC nainštalujete Word alebo Excell. Veľkým problém sa čoskoro stalo aj to, ako by bolo možné celé prostredie odovzdať novému kolegovi a problém začali robiť čoskoro aj rozdiely medzi tým, čo si mal developer nainštalovať do PC, čo si reálne nainštaloval a čo bolo dostupné na produkčnom serveri.

Kontajnerizácia ako záchrana

boat ship GIF by South Park

Pred asi piatimi rokmi sa na scéne objavil Docker, ktorý sa pomaly stal synonymom pre kontajnerizáciu aplikácií. Čo nám umožnil Docker je to, že jedntolivé časti (MySQL, Redis, …) prostredia, ktoré potrebujeme, sá distribuujú spolu so všetkým, čo potrebujú na svoj chod a to prostredníctvom Docker-a. Teda napríklad – ak potrebujeme spustiť Redis alebo MariaDb, urobíme niečo nasledujúce

$ docker run --name some-mariadb -d mariadb

Čo je perfektné je to, že tento príkaz pobeží rovnako dobre pod Linuxom, MacOS, ale aj Windows-om a rovnako dobre pre produkčný server ako aj pre developera na jeho lokálnom počítači. Vôbec nás nezaujíma aký package manager máme použiť na inštaláciu alebo čo všetko je potrebné na serveri urobiť predtým, než môžem databázu spustiť.

Aplikácia si so sebou „prinesie“ všetko potrebné na to, aby bežala. Win – Win.

Problém s kontajnerizáciou

Kontajnery boli od podstaty navrhnuté tak, aby v jedinom kontajneri bežala jediná aplikácia. Teda máme jeden kontajner zapnutý pre Apache, ďalší pre databázu, ďalší pre Redis, ďalší pre ElasticSearch, ďalší pre … . Spolu máme veľa kontajnerov. Otázka je ako zabezpečiť aby takýto kolos bol vždy dostupný, aby sa spustil tak ako chceme. Potrebujeme na to nejakého dirigenta, zoo keepera, jednoducho niekoho, kto bude naše kontajnery sledovať, zapínať, vypínať a škálovať podľa potreby.

no escape film GIF

Kubernetes

Konečne sa dostávame k predmetnej prednáške a aj k podstate celého článku. Kubernetes je práve ten nástroj, ktorý nám umožňuje orchestrovať spustené kontajnery, zabezpečuje ich distribúciu medzi jednotlivými VPS alebo železami a umožňuje nám takto krásne orchestrovať sériu kontajnerov, ktoré potrebujeme na chod aplikácie. Konkrétne ukážky toho, čo Kubernetes dokáže nájdete na https://kubernetes.io/docs/tutorials/. Základnou výhodou použitia Kubernetes-u je možnosť:

  • jednoducho spravovať viacero serverov na chod jedinej aplikácie
  • vysoká dostupnosť aplikácie – 24/7
  • jednoduchý deployment aplikácií
  • debugovať kontajnerizovanú a spustenú aplikáciu
  • jednoduché škálovanie aplikácie
  • spája development a operation aplikácie do jedného celku

Kubernetes aktuálne testujeme, „hráme sa s ním“ a objavujeme jeho možnosti a výkon.