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

„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

(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
(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? a Deployment pipeline: jdeme na to v cloudu!

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

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 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
(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
(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
(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ť deploymentu | Výhody | Nevýhody | Prípady použitia |
---|---|---|---|
Manuálny deployment | Jednoduchosť, priama kontrola | Komplexnosť pre veľké deploymenty, nedostatok verziovania | Malé, jednoduché deploymenty |
Helm Charts | Zjednodušuje komplexné deploymenty, podporuje šablónovanie | Prináša komplexnosť, vyžaduje znalosť Helm | Komplexné, dynamické prostredia |
Kustomize | Jednoduché prispôsobenie, žiadna duplikácia konfigurácií | Vyžaduje porozumenie syntaxe záplat | Prispôsobenia špecifické pre prostredie |
GitOps (Argo CD, Flux) | Jasný audit trail, spolupráca cez Git | Komplexnosť integrácie, vyžaduje znalosť GitOps | Automatizované, kolaboratívne deploymenty |
Knative | Zjednodušuje serverless deploymenty, znižuje overhead | Komplexnosť pre ne-serverless aplikácie, znalosť Knative | Serverless aplikácie, event-driven aplikácie |
Deploymenty založené na operátoroch | Automatizuje komplexné úlohy, rozširuje možnosti Kubernetes | Vývoj a údržba vlastných controllerov | Komplexné 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.

(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 Managerov a Cert 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:
- Kubernetes dokumentácia: Kubernetes.io
- Helm dokumentácia: Helm.sh
- Kustomize dokumentácia: Kustomize.io
- Argo CD dokumentácia: ArgoCD.io
- Flux dokumentácia: FluxCD.io
- Knative dokumentácia: Knative.dev
- Kubernetes Operator SDK: Operator Framework