Späť na prehľad

Orchestrácia budúcnosti: Úvod do Kubernetes (K8s)

22. 04. 2024| Pietro Dubsky

V rýchlo sa vyvíjajúcom svete vývoja a nasadzovania softvéru ste pravdepodobne počuli termín „Kubernetes" (často skracovaný ako K8s). Stal sa základnou technológiou pre správu moderných, kontajnerizovaných aplikácií vo veľkom meradle. Ale čo presne Kubernetes je a prečo je taký dôležitý? Poďme si rozobrať základy (oficiálna dokumentácia je na kubernetes.io).

Pred Kubernetes: vzostup kontajnerov

Aby sme pochopili Kubernetes, musíme najprv porozumieť kontajnerom. Predstavte si kontajner (ako tie vytvorené pomocou Dockeru) ako ľahký, samostatný, spustiteľný balíček softvéru, ktorý obsahuje všetko potrebné na beh aplikácie: kód, runtime, systémové nástroje, systémové knižnice a nastavenia.

Kontajnery riešia problém „na mojom stroji to funguje" tým, že poskytujú konzistentné prostredie pre aplikácie naprieč rôznymi infraštruktúrami. Umožňujú rýchlejší vývoj, jednoduchšie nasadenie a lepšie využitie zdrojov v porovnaní s tradičnými virtuálnymi strojmi.

Ako však počet kontajnerov rastie, ich ručná správa sa stáva významnou výzvou. Ako:

  • Nasadiť nové verzie vašej aplikácie bez výpadku?
  • Škálovať vašu aplikáciu nahor alebo nadol podľa dopytu?
  • Zaistiť, aby sa vaša aplikácia automaticky zotavila z chýb?
  • Spravovať siete a úložiská pre vaše kontajnery?

Tu prichádza na rad orchestrácia kontajnerov, a konkrétne Kubernetes.

Čo je Kubernetes?

Kubernetes (K8s) je open-source platforma na orchestráciu kontajnerov navrhnutá na automatizáciu nasadzovania, škálovania a správy kontajnerizovaných aplikácií. Pôvodne vyvinutý spoločnosťou Google a teraz spravovaný Cloud Native Computing Foundation (CNCF), Kubernetes poskytuje robustný rámec na spoľahlivý beh distribuovaných systémov.

Jednoduchšie povedané, Kubernetes je ako „dirigent" orchestra kontajnerov. Hovorí každému kontajneru, čo má robiť, kde má bežať, ako komunikovať s ostatnými kontajnermi a čo robiť, keď sa niečo pokazí.

Základné koncepty Kubernetes

Porozumenie Kubernetes zahŕňa pochopenie niekoľkých kľúčových konceptov:

1. Cluster

Kubernetes cluster je sada strojov, nazývaných uzly (nodes), ktoré spúšťajú kontajnerizované aplikácie. Cluster má aspoň jeden hlavný uzol (master node alebo riadiacu rovinu) a jeden alebo viac pracovných uzlov (worker nodes).

  • Hlavný uzol (control plane): Toto je mozog clustera. Spravuje pracovné uzly a Pody (pozri nižšie) v clusteri. Kľúčové komponenty hlavného uzla zahŕňajú API server (na správu clustera), etcd (konzistentné a vysoko dostupné úložisko kľúč-hodnota pre všetky dáta clustera), scheduler (priraďuje Pody uzlom) a controller manager (spúšťa procesy kontrolérov).
  • Pracovné uzly: Sú to stroje (virtuálne alebo fyzické), kde vaše aplikácie (v kontajneroch) skutočne bežia. Každý pracovný uzol spúšťa Kubelet (agent na správu uzla a komunikáciu s hlavným uzlom) a kontajnerový runtime (ako Docker).

2. Pody (Pods)

Pod je najmenšia a najjednoduchšia nasaditeľná jednotka v Kubernetes. Pod predstavuje jednu inštanciu bežiaceho procesu vo vašom clusteri. Dôležité je, že Pod môže obsahovať jeden alebo viac kontajnerov (napr. aplikačný kontajner a pomocný/sidecar kontajner), ktoré zdieľajú úložisko, sieťové prostriedky a špecifikáciu, ako kontajnery spúšťať. Kontajnery v rovnakom Pode sú vždy umiestnené a plánované spoločne na rovnakom pracovnom uzle.

3. Služby (Services)

Pody sú dočasné – môžu byť vytvorené a zničené. To znamená, že ich IP adresy sa môžu meniť. Služba poskytuje stabilnú IP adresu a DNS názov pre sadu Podov, čo umožňuje ostatným aplikáciám vnútri alebo mimo clustera sa k nim spoľahlivo pripojiť. Služby fungujú ako load balancer a abstrahujú jednotlivé IP adresy Podov.

Bežné typy Služieb zahŕňajú ClusterIP (interný prístup), NodePort (sprístupňuje službu na IP adrese každého uzla na statickom porte) a LoadBalancer (sprístupňuje službu externe pomocou load balancera cloudového poskytovateľa).

4. Deploymenty (Deployments)

Deployment poskytuje deklaratívne aktualizácie pre Pody a ReplicaSety (ktoré zaisťujú beh zadaného počtu replík Podov). V Deploymente popíšete požadovaný stav a Deployment Controller zmení skutočný stav na požadovaný stav kontrolovanou rýchlosťou. To umožňuje jednoduché aktualizácie aplikácií (rolling updates), návraty k predchádzajúcim verziám (rollbacks) a škálovanie.

5. ReplicaSety a ReplicationControllery

ReplicaSet zaisťuje, že v danom okamihu beží zadaný počet replík Podov. Ak Pod zlyhá, ReplicaSet spustí nový. Deploymenty spravujú ReplicaSety a sú odporúčaným spôsobom správy replikovaných Podov.

6. Menné priestory (Namespaces)

Menné priestory poskytujú spôsob, ako rozdeliť zdroje clustera medzi viacerých používateľov alebo tímov. Vytvárajú virtuálne clustery v rámci fyzického clustera, čo umožňuje kvóty zdrojov a logické oddelenie.

7. ConfigMapy a Tajomstvá (Secrets)

  • ConfigMapy sa používajú na ukladanie nedôverných konfiguračných dát (ako nastavenia aplikácií) vo forme párov kľúč-hodnota. Pody môžu tieto dáta konzumovať ako premenné prostredia, argumenty príkazového riadku alebo konfiguračné súbory.
  • Tajomstvá sú podobné ConfigMapám, ale používajú sa na ukladanie citlivých informácií, ako sú heslá, OAuth tokeny a SSH kľúče. Kubernetes ukladá Tajomstvá šifrovane (v pokoji) a môžu byť pripojené do Podov ako súbory alebo sprístupnené ako premenné prostredia (hoci pripojenie ako súbory je všeobecne bezpečnejšie).

8. Zväzky (Volumes)

Kontajnery v Pode majú dočasný súborový systém. Keď kontajner zlyhá, všetky dáta zapísané do jeho súborového systému sú stratené. Zväzky poskytujú trvalé úložisko pre Pody, čo umožňuje dátam prežiť reštarty kontajnerov. Kubernetes podporuje rôzne typy zväzkov vrátane lokálneho úložiska na uzloch, sieťového úložiska (ako NFS alebo iSCSI) a úložiska špecifického pre cloudových poskytovateľov (ako AWS EBS alebo Google Persistent Disk).

Prečo používať Kubernetes? Kľúčové výhody

  • Škálovateľnosť: Jednoducho škálujte svoje aplikácie nahor alebo nadol podľa dopytu, buď ručne, alebo automaticky (Horizontal Pod Autoscaler).
  • Vysoká dostupnosť a samooprava: Kubernetes automaticky reštartuje zlyhané kontajnery, nahrádza a preplánováva Pody, keď uzly zlyhajú, a ukončuje kontajnery, ktoré nereagujú na kontroly stavu.
  • Automatizované vydávanie a návraty k predchádzajúcim verziám: Nasadzujte nové verzie vašej aplikácie postupne, monitorujte ich stav a automaticky sa vráťte k predchádzajúcej verzii, ak sa niečo pokazí.
  • Objavovanie služieb a vyvažovanie záťaže: Poskytuje stabilné koncové body na prístup k vašim aplikáciám a distribuuje sieťový prevoz medzi Pody.
  • Orchestrácia úložísk: Automaticky pripája úložné systémy podľa vášho výberu, či už lokálne, sieťové alebo cloudové.
  • Optimalizácia zdrojov: Efektívnejšie využitie podkladových hardvérových zdrojov vďaka hustejšiemu baleniu kontajnerov.
  • Prenositeľnosť: Beží on-premises, vo verejných cloudoch (AWS, Azure, GCP všetky ponúkajú spravované služby Kubernetes) alebo v hybridných prostrediach.
  • Veľká a aktívna komunita: Rozsiahla dokumentácia, obrovský ekosystém nástrojov a silná komunitná podpora.

Výzvy Kubernetes

Hoci je Kubernetes mocný, má aj strmú krivku učenia a môže byť zložitý na nastavenie a správu, najmä pre menšie tímy alebo jednoduchšie aplikácie. Preto sú spravované služby Kubernetes od cloudových poskytovateľov (ako GKE, EKS, AKS) veľmi populárne, pretože zvládajú veľkú časť zložitosti správy podkladového clustera.

Záver

Kubernetes sa stal de facto štandardom pre orchestráciu kontajnerov, umožňujúcim vývojárom a prevádzkovým tímom spravovať zložité, distribuované aplikácie s väčšou efektivitou, odolnosťou a škálovateľnosťou. Hoci zavádza nové koncepty a určitú mieru zložitosti, jeho prínosy pri správe moderných mikroslužieb a cloud-native aplikácií sú nepopierateľné. Porozumenie jeho základným princípom sa stáva čoraz dôležitejším pre každého, kto sa zaoberá vývojom softvéru, DevOps alebo cloudovou infraštruktúrou.

Zdieľať článok

« Späť na prehľad