Deploymentu aplikácií v Kubernetes pristane cloud-native prístup

Deployment aplikácií v Kubernetes | ORBIT

„Deployment aplikácií v Kubernetes je často strašiak. Ktorý prístup vybrať? Čo najviac vyhovuje developerom a poskytuje dostatok kontroly? Ukážme si možnosti pre cloud-native prístupy deploymentu aplikácií v Kubernetes pod public cloud providermi.“

Adam Felner

Deployment aplikácií v Kubernetes | ORBIT

(Zdroj: https://www.okteto.com/blog/preview-environments-for-kubernetes/)

Čo je Kubernetes?

Kubernetes je open-source platforma na orchestráciu kontajnerov, ktorá automatizuje deployment, škálovanie a správu kontajnerizovaných aplikácií. Za posledných 10 rokov sa Kubernetes stal jasnou voľbou pri výbere kontajnerového behu aplikácií, vďaka orchestrácii, robustnej a flexibilnej platforme pre ľahko expandovateľné systémy.

Kubernetes je dostupný u mainstreamových public cloud proviederov ako PaaS, avšak je možno ho spravovať na VMkach i v režimu IaaS (podobné ako i v on-premise prostrediach) – IaaS použitie však odporúčame iba pri veľmi špecifikých scenároch. Viac sme sa pozreli na Kubernetes v predchádzajúcom článku.

Cloudová adopcia k tomu prispela aj pre cloud-native postupy vďaka dodržaniu základných princípov cloud computingu – škálovateľnosti, odolnosti a mikroservisnej architektúry, čo podčiarkuje použitie Kubernetes k rýchlemu a efektívnemu spusteniu a behu aplikácií.

Princíp cloud-native computingu s kontajnermi | ORBIT

Princíp cloud-native computingu s kontajnermi
(zdroj: https://www.ridge.co/blog/cloud-native-applications-explained/)

Princípy cloud-native computingu

Cloud-native výpočty predstavujú súbor praktík navrhnutých tak, aby naplno využili modely cloud computingu. Tieto praktiky zahŕňajú:

  • Microservices architektúra: Rozdelenie aplikácií na malé, nezávislé služby, ktoré môžu byť nasadené a škálované individuálne.
  • Kontinuálne doručovanie: Automatizácia procesu vydávania, ktorá umožňuje časté a spoľahlivé aktualizácie aplikácií.
  • Odolnosť: Navrhovanie aplikácií tak, aby odolali zlyhaniam a rýchlo sa zotavili.
  • Škálovateľnosť: Zabezpečenie, aby sa aplikácie mohli škálovať nahor alebo nadol na základe dopytu.

Tito princípy sú viac predstavené v článkoch Proč tvořit cloud native aplikace? V cloudu nic jiného ani nedává smysl, Kontejnery v oblacích – jak je využít v cloudu?Deployment pipeline: jdeme na to v cloudu!

 Ukážka použitia kontajnerov v cloude | ORBIT

Ukážka použitia kontajnerov v cloude
(zdroj: https://aws.plainenglish.io/deploy-cloud-native-monitoring-app-on-kubernetes-42ca974cd47c)

Cloud-native maturity levels | ORBIT

Cloud-native maturity levels
(zdroj: https://www.burwood.com/devops-adoption )

Deployment v Kubernetes: aké máme možnosti?

Nasadzovanie aplikácií v Kubernetes je jednou z kľúčových funkcionalít tejto platformy, ktorá umožňuje efektívnu správu aplikácií v kontajnerovom prostredí. Kubernetes ponúka viacero spôsobov, ako nasadiť a udržiavať aplikácie v prevádzke, čím zaručuje vysokú dostupnosť, odolnosť voči chybám a možnosť dynamického škálovania.

1. Manuálny deployment v Kubernetes pomocou Kubectl

Kubectl je nástroj príkazového riadka na interakciu s Kubernetes API serverom. Umožňuje používateľom nasadzovať aplikácie priamym aplikovaním konfiguračných súborov, čo z neho robí priamočiaru možnosť pre správu zdrojov v Kubernetes.

Výhody:

  • Jednoduchosť a priama kontrola nad Kubernetes zdrojmi
  • Flexibilita v manuálnej konfigurácii zdrojov

Nevýhody:

  • Môže sa stať komplexným a náchylným na chyby pri väčších deploymentoch.
  • Chýbajú zabudované mechanizmy pre verziovanie alebo šablónovanie.

Osvedčené postupy:

  • Používajte systémy na správu verzií na spravovanie vašich YAML konfiguračných súborov.
  • Validujte vaše konfiguračné súbory pred deploymentom pomocou nástrojov ako Kubeval alebo Kustomize.
  • Automatizujte opakujúce sa úlohy pomocou skriptov alebo CI/CD pipeline.

2. Deployment v Kubernetes pomocou Helm Charts

Helm je správca balíčkov pre Kubernetes, ktorý zjednodušuje deployment aplikácií zabalením zdrojov do tzv. chartov. Helm chart je kolekcia súborov, ktoré popisujú súvisiaci set Kubernetes zdrojov.

Helm chart typicky zahŕňa:

  • chart.yaml: metadáta o charte,
  • values.yaml: predvolené konfiguračné hodnoty,
  • šablóny: šablónované Kubernetes manifesty, ktoré sú renderované pomocou values.yaml súboru.

Výhody:

  • Zjednodušuje deployment a správu komplexných aplikácií.
  • Podporuje šablónovanie a dynamickú konfiguráciu zdrojov.

Nevýhody:

  • Môže priniesť komplexnosť pre malé alebo jednoduché deploymenty drobných objektov.
  • Vyžaduje znalosť Helm-špecifického šablónovania a syntaxe.

Osvedčené postupy:

  • Používajte Helm na zabalenie a distribúciu vašich aplikácií pre snadné nasadenie a  management počas celého app lifecycle.
  • Využívajte funkcie šablónovania Helmu na prispôsobenie deploymentov na základe požiadaviek špecifických pre prostredie.

Dodržiavajte osvedčené postupy pre verziovanie a správu vydaní na udržanie konzistencie a spoľahlivosti.

 Deployment v Kubernetes pomocou Helm Charts | ORBIT

Deployment pomocou Helm Charts
(zdroj: https://circleci.com/blog/what-is-helm/)

3. Kustomize pre správu konfigurácií

Kustomize je nástroj na správu konfigurácií, ktorý umožňuje používateľom prispôsobovať Kubernetes manifesty bez modifikácie pôvodných súborov. Používa koncept prekrytí (overlays) a záplat (patches) na dynamické aplikovanie zmien.

Funkcie Kustomize:

  • Prekrytia (Overlays): Definujú zmeny, ktoré sa majú aplikovať na základné konfigurácie.
  • Záplaty (Patches): Špecifikujú modifikácie existujúcich manifestov pomocou JSON alebo YAML záplat.

Výhody:

  • Umožňuje jednoduché prispôsobenie zdrojov bez duplikovania konfigurácií.
  • Dobre sa integruje s Kubectl, k tomu eliminuje potrebu dodatočných nástrojov.

Nevýhody:

  • Vyžaduje porozumenie syntaxe a mechanizmov záplat Kustomize.
  • Nemusí byť taký bohatý na funkcie ako Helm pre komplexné deploymenty.

Osvedčené postupy:

  • Používajte Kustomize na správu konfigurácií špecifických pre prostredie a prekrytí.
  • Organizujte vaše konfigurácie do základov a prekrytí pre uľahčenie opätovného použitia a udržateľnosti.
  • Validujte vaše kustomizácie pomocou Kustomize build pred ich aplikovaním na cluster.

4. GitOps prístup s Argo CD a Flux

GitOps je metodológia, ktorá používa Git ako jediný zdroj pravdy pre deklaratívnu infraštruktúru a deployment aplikácií. Zmeny v infraštruktúre sa vykonávajú prostredníctvom pull requestov a sú automaticky aplikované na cluster pomocou GitOps nástroja. Podrobne sa tématu venujeme v článku Správa cloudu 3: Přejděte na GitOps – moderní koncept řízení a provozu aplikací a infrastruktury.

GitOps workflow | ORBIT

GitOps workflow
(zdroj: https://www.spiceworks.com/tech/devops/articles/what-is-gitops/)

Prehľad Argo CD a Flux:

  • Argo CD: Deklaratívny GitOps nástroj pre kontinuálne doručovanie v Kubernetes, ktorý monitoruje Git repozitáre pre zmeny a synchronizuje ich s clusterom.
  • Flux: Sada riešení pre kontinuálne a postupné doručovanie pre Kubernetes, ktoré automatizujú deployment zdrojov na základe Git commitov.

Výhody:

  • Poskytuje jasný audit trail zmien prostredníctvom Git histórie.
  • Umožňuje spoluprácu a peer review zmien infraštruktúry.

Nevýhody:

  • Vyžaduje integráciu s CI/CD pipeline a Git repozitármi.
  • Môže priniesť komplexnosť v správe GitOps konfigurácií a repozitárov.

Osvedčené postupy:

  • Organizujte vaše Kubernetes manifesty a konfigurácie v Git repozitároch, dodržiavajúc jasnú štruktúru.
  • Používajte Git vetvy a pull requesty na správu zmien a umožnenie peer review.
  • Integrujte GitOps nástroje ako Argo CD alebo Flux s vašimi CI/CD pipeline pre automatizované deploymenty.

5. Serverless deploymenty s Knative

Knative je platforma založená na Kubernetes, ktorá rozširuje možnosti Kubernetes na podporu serverless workloadov. Poskytuje stavebné bloky pre deployment a správu serverless aplikácií:

  • Knative Serving: Spravuje deployment a škálovanie serverless aplikácií.
  • Knative Eventing: Poskytuje framework pre konzumáciu a produkciu udalostí.
Knative workflow diagram showcase | ORBIT

Knative workflow diagram showcase
(zdroj: https://knative.dev/docs/community/)

Výhody:

  • Zjednodušuje deployment a škálovanie serverless aplikácií.
  • Znižuje overhead správy infraštruktúry abstrahovaním serverless workloadov.

Nevýhody:

  • Pridáva komplexnosť pre ne-serverless aplikácie.
  • Vyžaduje porozumenie komponentov a konfigurácií Knative.

Osvedčené postupy:

  • Používajte Knative na deployment mikroslužieb a event-driven aplikácií, ktoré benefitujú zo serverless architektúr.
  • Využívajte možnosti autoškálovania a event-driven funkcionalitu Knative na optimalizáciu využitia zdrojov.
  • Monitorujte a spravujte komponenty Knative pre zabezpečenie optimálneho výkonu a spoľahlivosti.

6. Deployment v Kubernetes založený na operátoroch

Kubernetes operátory sú vlastné controllery, ktoré rozširujú možnosti Kubernetes na správu komplexných aplikácií. Operátory automatizujú deployment, škálovanie a správu zdrojov špecifických pre aplikácie. Operátory sú vyvíjané pomocou Kubernetes Operator SDK, ktorý poskytuje nástroje a knižnice na budovanie vlastných controllerov.

Workflow Operators v Azure | ORBIT

Workflow Operators v Azure
(zdroj: https://devblogs.microsoft.com/ise/azure-service-operators-a-kubernetes-native-way-of-deploying-azure-resources/)

Výhody:

  • Automatizuje komplexné úlohy životného cyklu aplikácií znižujúc potrebu manuálnych zásahov.
  • Rozširuje možnosti Kubernetes na správu zdrojov špecifických pre aplikácie.

Nevýhody:

  • Vyžaduje vývoj a údržbu vlastných controllerov.
  • Pridáva komplexnosť do Kubernetes clustera.

Osvedčené postupy:

  • Používajte operátory na automatizáciu správy komplexných stavových aplikácií a databáz.
  • Dodržiavajte osvedčené postupy pre vývoj a údržbu operátorov, vrátane testovania a verziovania.
  • Monitorujte a spravujte deploymenty operátorov pre zabezpečenie spoľahlivosti a výkonu.

Výber správnej možnosti deploymentu

Pri výbere možnosti deploymentu pre vaše Kubernetes aplikácie zvážte nasledujúce faktory:

  • komplexnosť aplikácie – komplexnosť vašej aplikácie a jej závislostí
  • expertíza tímu – skúsenosti a zručnosti vášho tímu v správe Kubernetes deploymentov
  • operačné požiadavky – operačné potreby vašej aplikácie, vrátane škálovateľnosti, odolnosti a monitorovania

Porovnávacia tabuľka

Možnosť deploymentuVýhodyNevýhodyPrípady použitia
Manuálny deploymentJednoduchosť, priama kontrolaKomplexnosť pre veľké deploymenty, nedostatok verziovaniaMalé, jednoduché deploymenty
Helm ChartsZjednodušuje komplexné deploymenty, podporuje šablónovaniePrináša komplexnosť, vyžaduje znalosť HelmKomplexné, dynamické prostredia
KustomizeJednoduché prispôsobenie, žiadna duplikácia konfiguráciíVyžaduje porozumenie syntaxe záplatPrispôsobenia špecifické pre prostredie
GitOps (Argo CD, Flux)Jasný audit trail, spolupráca cez GitKomplexnosť integrácie, vyžaduje znalosť GitOpsAutomatizované, kolaboratívne deploymenty
KnativeZjednodušuje serverless deploymenty, znižuje overheadKomplexnosť pre ne-serverless aplikácie, znalosť KnativeServerless aplikácie, event-driven aplikácie
Deploymenty založené na operátorochAutomatizuje komplexné úlohy, rozširuje možnosti KubernetesVývoj a údržba vlastných controllerovKomplexné stavové aplikácie, databázy

Integrácia cloud-native praktík v Kubernetes deploymentoch

Automatizácia a CI/CD pipeline

Automatizácia vašich procesov deploymentu je kľúčová pre dosiahnutie konzistencie a spoľahlivosti vo vašich Kubernetes deploymentoch. Integrujte CI/CD pipeline s vaším Kubernetes clusterom na automatizáciu fáz buildu, testovania a deploymentu životného cyklu vašej aplikácie.

Automatizácia a CI/CD pipeline | ORBIT

(zdroj: https://www.seaflux.tech/blogs/ultimate-guide-kubernetes-deployment)

Tracing a monitoring

Implementácia tracingu a monitoringu vo vašom Kubernetes prostredí je esenciálna pre udržanie zdravia a výkonu vašich aplikácií. Používajte nástroje ako Prometheus, Grafana a Elasticsearch na monitorovanie kľúčových metrík a získanie prehľadu o správaní vašej aplikácie.

Bezpečnosť a compliance

Bezpečnosť a compliance sú kritické aspekty v akomkoľvek Kubernetes deploymente. Dodržiavajte osvedčené postupy pre zabezpečenie vášho clustera, vrátane:

  • implementácie sieťových politík a kontroly prístupu,
  • používania Key Valtov, Password ManagerovCert Storov pre citlivé údaje,
  • pravidelnej aktualizácie a patchovania vašich Kubernetes komponentov.

Deployment v Kubernetes v kocke

Kubernetes ponúka u akéhokoľvek cloud providera širokú škálu možností deploymentu, každú s vlastným súborom výhod a kompromisov. Porozumením dostupným možnostiam a dodržiavaním cloud-native osvedčených postupov môžete optimalizovať vaše deploymenty aplikácií a dosiahnuť väčšiu efektivitu, škálovateľnosť a spoľahlivosť.

Pre ďalšie učenie a skúmanie možností Kubernetes a cloud-native deploymentu odporúčame nasledujúce zdroje:

O autorovi
Adam Felner

Cloud Consultant | LinkedIn

Adam je cloudový konzultant s bohatými skúsenosťami, ktorý sa špecializuje na automatizáciu endpointov, Azure cloud, implementáciu DevOps a Cloud Adoption Framework best practices. Pôsobil v rôznych prostrediach, od startupov až po veľké podniky, kde bol súčasťou dlhodobých projektov. Adam často zohráva rolu DevOps evanjelistu, pričom aktívne propaguje a zavádza princípy infraštruktúry ako kód (IaC) a moderné automatizačné postupy.