Magazín KPI
Časopis Katedry počítačov a informatiky FEI TUKE
kpi

Kubernetes a jeho základné použitie

Kubernetes predstavuje zajímavé riešenie, ako ľahko nasadiť nové aplikácie, resp. upraviť tie už existujúce. Pomáha riešiť škálovateľnosť, dostupnosť aplikácie, jej životný cyklus a tým robí aplikácie efektívne a dobre prispôsobiteľné. Popularita Kubernetes medzi vývojarmi je v dnešnej dobe na vysokej úrovni, najmä vďaka jeho jednoduchosti, čím prispieva k zvýšeniu produktivity samotných vývojárov.

Úvod

V našom článku sa budeme venovať, tomu čo Kubernetes vlastne je, uvedieme príklady prečo je výhodne Kubernetes používať, objasníme základne pojmy a opíšeme jeho základne časti. V druhej polovici článku, je návod na inštaláciu Kubernetes na operačný systém Linux a následne ukázaná implementácia jednoduchej aplikácie z Docker obrazu pomocou Kubernetes a uvedené možnosti administrácie tejto aplikácie.

Čo je kubernetes?

Kubernetes je otvorená (open source) platforma, ktorá automatizuje operácie s kontajnermi. Odstraňuje mnoho ručných procesov, ktoré sa týkajú nasadenia a zjednodušovania kontajnerových aplikácií. Z tohto dôvodu je Kubernetes ideálnou platformou pre hosťovanie aplikácií v cloude, ktoré vyžadujú rýchle škálovanie a časté upravovanie. Kubernetes bol pôvodne vyvinutý a navrhnutý inžiniermi spoločnosti Google a táto spoločnosť bola jednou z prvých, ktoré začali využívať výhody kontajnerov v produkcii. V dnešnej dobe spoločnosť vytvorí viac ako 2 miliardy kontajnerov za týždeň.

Prečo používať Kubernetes

Kľúčovou vlastnosťou Kubernetes je to, že sám rieši nasadzovanie kontajnerov, sleduje ich dostupnosť a snaží sa efektívne využiť dostupnú kapacitu servera. Kubernetes vytvára abstrakciu nad dostupným hardvérom, a tým sú všetky pripojené servery dostupné ako jeden stroj.

Ďalšou užitočnou vlastnosťou je, že pomocou Kubernetes môžeme konfigurovať a nasadzovať nové verzie aplikácii bez potreby ich vypnutia resp. zastavenia.

Keďže je Kubernetes postavený na technológii Docker, snaží sa o vylepšenie jej doterajších funkcií a procesov. Napríklad uľahčuje používateľovi ľahšie zdieľanie a správu hesiel a kľúčov. Na tento proces využíva secrets - čo sú konfiguračné súbory uložené v klastri. Tieto súbory je potom možné pripojiť ku kontajneru a ďalej s nimi pracovať.

Medzi výhody patrí aj dokumentácia ku Kubernetes. Tá je totiž v celku rozsiahla a popisuje väčšinu dostupnej funkcionality. A keďže Kubernetes sa v dnešnej dobe radí medzi veľmi populárne IT riešenia, disponuje veľkou komunitou používateľov, ktorý svoje riešenia a návody medzi sebou zdieľajú na populárnych technických fórach.

Základné pojmy používané pri práci s Kubernetes

Uzol (ang. node) je fyzický, alebo virtuálny stroj, na ktorom je spustený Kubernetes. Na každom node sú spustené pody. Na jednom uzle je možné spustiť viacero podov.

Klaster (ang. cluster) je zoskupenie uzlov zahrňujúce aj ďalšie zdroje, ako napríklad úložisko pre beh Kubernetes. Každý klaster obsahuje jeden hlavný uzol (master) a ľubovoľný počet vedľajších uzlov.

Zdroj: https://kubernetesbootcamp.github.io/kubernetes-bootcamp/1-1.html

Kontajner (ang. container) je samostatný balík softvéru, ktorý obsahuje všetko potrebné k svojmu behu. Je možné ho jednoducho spustiť v akomkoľvek kompatibilnom prostredí bez nutnosti zložitej inštalácie. Po spustení beží kontajner vo vlastnom pode. Má vlastné sieťové rozhranie (IP adresu) a vlastný súborový systém.

Pod slúži ako inštancia pre aplikáciu. Je to zoskupenie jedného alebo viacerých kontajnerov (aplikácií) ktoré majú zdieľané úložisko, jedinečnú IP adresu a informácie o aplikácii (verzia kontajnera, špecificke porty). Pody vždy bežia na uzloch.

Zdroj: https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/

Služba (ang. service) je externé rozhranie pre jeden alebo viac podov, ktoré poskytuje koncový bod, na ktorom sú špecifické aplikácie spúšťané. Služba v závislosti od aplikácie poskytuje jeden alebo viacero koncových bodov.

Nasadenie (ang. deployment) je spôsob implementácie aplikácie do určitého prostredia s tím, že vývojár má možnosť vrátiť niektoré zmeny, resp. obnoviť aplikáciu na jej pôvodnú verziu, bez nutnosti vysokých nákladov a zložitých úprav.

Začíname - Príprava prostredia

Tento návod je napísaný pre operačný systém Linux - konkrétne distribúcia Ubuntu 18.04 a slúži ako testovacie prostredie na lokálnom počítači používateľa. Avšak Kubernetes je možné nainštalovať aj na Windows, systém OSX a server - Viac informácii o inštalácii na tieto platformy, odlišné distribúcie operačného systému Linux alebo na cloud, je uvedených v oficiálnej dokumentácii Kubernetes.

1. Inštalácia nástroja curl

Tento nástroj budeme používať počas inštalácie. Nainštalujeme ho príkazom:

sudo apt-get install curl

2. Inštalácia kubectl

Inštalácia nástroja kubectl pozostáva z troch jednoduchých krokov:

  • Stiahnutie inštalačného balíku:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
  • Zvoliť kubectl ako spustiteľné
chmod +x ./kubectl
  • Pridať kubectl do PATH
sudo mv ./kubectl /usr/local/bin/kubectl

V tomto momente máme nainštalovaný nastroj kubectl. Po spustení príkazu

kubectl version

by sme mali vidieť nasledovný výstup:

3. Inštalácia minikube

Minikube je nástroj, ktorý nám umožňuje ľahké spustenie Kubernetes na našom lokálnom hardvéri. Minikube Nainštalujeme nasledovným príkazom:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.32.0/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube

Po úspešnom dokončení inštalácie spustíme minikube príkazom

minikube start

Tento príkaz nám vytvorí jeden uzol na virtuálnom stoji na našom PC. S týmto uzlom vieme ďalej pracovať.

Poznámka: Pre úspešnú inštaláciu a spustenie minikube musíme mať v biose povolenú možnosť VT-x or AMD-v virtualizácie.

Po štarte vlastného uzlu na našom PC máme možnosť spustiť grafické rozhranie pre Kubernetes, takzvaný “Kubernetes dashboard”. Tento dashboard spustíme príkazom

minikube dashoard

Odporúčam tento príkaz spustiť v samostatnom okne terminálu, kedže je to neustále bežiaci proces. Po jeho vypnutí nebude dashboard dostupný.

Po otvorení webového prehliadača sa nám na danej adrese zobrazí grafické rozhranie.

Toto grafické rozhranie nám poskytuje všetky informácie o našich nasadeniach, podoch, službách a veľa ďalších informácii. Ako môžeme vidieť na obrázku, momentálne nemáme na našom uzle nakonfigurované žiadne vlastné nasadenia, či služby (Služba kubernetes je základná služba uzlu).

To si môžeme overiť aj pomocou terminálu a to zadaním príkazu

kubectl get deployments

Po spustení tohto príkazu sa zobrazia všetky nami vykonané nasadenia. Výstup “No resources found” znamená, že momentálne nemáme na uzle vykonané žiadne nasadenia.

Nasadenie aplikácie Nginx

Nginx je webový server, ktorý môže byť použitý ako server pre statický obsah. Nové nasadenie vykonáme príkazom

kubectl create deployment

Avšak k tomuto príkazu je potrebné pridať názov nášho nového nasadenia a zdrojový Docker obraz. Preto kompletný príkaz ma tvar:

kubectl create deployment nginx --image=nginx

kde nginx je nami zvolený názov nasadenia a –image=nginx je zdrojový Docker obraz.

Príkazom

kubectl get deployments

môžeme skontrolovať vytvorené nasadenie.

Po vytvorení nasadenia sa automaticky vytvorí pod s vlastným vygenerovaným názvom. Po zadaní príkazu

kubectl get pods

sa zobrazia základné informácie o pode.

Vytvorené nasadenie a pod taktiež možeme vidiet v Kubernetes dashoarde.

Po vytvorení nasadenia je potrebné vytvoriť službu. Tú vytvoríme príkazom

kubectl create service

kde je potrebné pridať názov nasadenia a port. Výsledný príkaz bude vyzerať nasledovne:

kubectl create service nodeport nginx --tcp=80:80

kde nginx je názov nášho nasadenia a –tcp=80:80 nami zvolený port.

Vytvorenie služby si môžeme overiť príkazom

kubectl get service

alebo v Kubernetes dasboarde v záložke “Services”.

Nami vytvorenú službu je ale potrebné spustiť a na to slúži príkaz

minikube service nginx

kde nginx znamená názov služby.

Po otvorení webového prehliadača vidíme rozhranie aplikácie nginx, ktoré sme chceli vytvoriť.

Kubernetes samozrejme nepodporuje len vytváranie nasadení, podov a služieb, ale jeho dôležitou súčasťou je aj administrácia aplikácie (podov). Napríklad ak chce používateľ detailný opis podu použije príkaz

kubectl describe pod nginx

kde nginx predstavuje názov nasadenia. Ako výstup tohto príkazu sa zobrazia informácie ako je napríklad názov podu, v ktorom uzle sa nachádza, názov aplikácie ku ktorej je pridelený, podrobnosti o kontajneri ktorý tento pod obsahuje a veľa ďalších informácii ktoré používateľovi poskytujú celkový prehľad o danom pode.

Ďalším príkazom k administrácii podu je príkaz

kubectl logs nginx-55bd7c9fd-b5lqx

kde nginx-55bd7c9fd-b5lqx je názov podu. Tento príkaz zobrazí logy z podu a uľahčuje používateľovi zistiť chyby ktoré sa mohli vyskytnúť počas behu podu.

Príkazom

kubectl exec -it nginx-55bd7c9fd-b5lqx -- bash

kde nginx-55bd7c9fd-b5lqx je názov podu a – bash príkaz, ktorý sa ma spustiť v kontajneri a tak sa používateľ dostane do vnútra kontajneru bežiaceho v pode. Následne má používateľ možnosť manuálne upravovať jeho obsah.

Ak niekedy bude chcieť používateľ svoju aplikáciu z daného uzla zmazať, môže použiť príkaz

kubectl delete

Avšak musí zmazať samostatne službu a samostatne nasadenie. Pod viazaný na nasadenie sa zmaže automaticky so zmazaním nasadenia. Na zmazanie našej nginx aplikácie použijeme príkaz

kubectl delete service nginx

kde nginx je názov služby

a následne príkaz

kubectl delete deployment nginx

kde nginx je názov nasadenia.

Záver

Hlavným zámerom článku bolo priblížiť čitateľovi IT technológiu nazývanú Kubernetes. Uviesť ho do problematiky kontajnerov a objasniť základné pojmy používané v Kubernetes. Krátkym návodom implementácie vzorovej aplikácie by mal čitateľ získať základné znalosti a prehľad o tom, ako Kubernetes funguje, ako ho používať a mal by byť schopný implementovať vlastnú aplikáciu s použitím vlastného Docker obrazu.

Linkovať