IT Systems Integration Consultant
Kubernetes testing je testovanie aplikácií, konfigurácií a celého prostredia v Kubernetes klastri. Na rozdiel od klasického testovania ti nestačí overiť, že API vracia správny kód, ale overuješ aj orchestráciu, sieť, bezpečnosť, škálovanie a odolnosť celého systému. Spoznaj typy testov, prehľad nástrojov (KUTTL, Testkube, k6, Litmus), praktický CI/CD workflow a best practices, ktoré ti pomôžu s rýchlym nasadením bez prekvapení v produkcii.

V článku sa dozvieš:
Kubernetes (K8s) je dnes štandardom pre správu kontajnerizovaných aplikácií. Monolitické aplikácie nahradili mikroservisy, servery sa zmenili na kontajnery a správa infraštruktúry je dnes automatizovaná. V centre tohto posunu stojí Kubernetes – open-source platforma na orchestráciu kontajnerov, ktorá pomáha spravovať kontajnerizované aplikácie vo veľkom rozsahu.
Testovanie v Kubernetes preto nie je len o UI a API testoch. Overuješ, či celé prostredie drží pokope, či sa vie zotaviť po výpadku, či je bezpečné a zvládne loadové špičky bez výpadkov. Pribudnú aj nové vrstvy: service discovery, YAML manifesty, Helm charty, RBAC politiky a CI/CD pipeline napojená na klaster.
Kubernetes, označovaný aj ako K8s, je open-source systém na orchestráciu kontajnerov. Pomáha vývojárom, testerom aj DevOps tímom riadiť aplikácie tak, aby boli spoľahlivé, dostupné a škálovateľné – či už v cloude, dátovom centre alebo lokálne.
Docker vytvára a spúšťa kontajnery – zabalené aplikácie s ich závislosťami. Kubernetes tieto kontajnery orchestruje. Rozhoduje, kde, kedy a koľko ich má bežať, ako medzi sebou komunikujú, ako sa obnovia po zlyhaní a ako sa škálujú podľa aktuálnej záťaže. Kubernetes vs Docker nie je otázka „čo je lepšie“ – v praxi ich používaš spolu.
…Kubernetes bol pôvodne interným projektom Googlu s názvom Borg? Spravoval státisíce kontajnerov v dátových centrách Googlu. V roku 2014 ho Google open-sourcoval a odovzdal do správy Cloud Native Computing Foundation (CNCF). Dnes Kubernetes používa viac ako 96 % organizácií, ktoré nasadzujú kontajnery vo veľkom.
Kubernetes sa skladá z dvoch hlavných častí – Control Plane a Nodes. Pre testera je dôležité rozumieť architektúre Kubernetes, pretože chyby môžu vzniknúť na ktorejkoľvek vrstve:
| Časť | Komponent | Úloha |
|---|---|---|
| Control Plane | API Server | Hlavný vstupný bod – všetka komunikácia ide cez neho |
| Control Plane | etcd | Distribuované úložisko stavu celého klastra |
| Control Plane | Scheduler | Rozhoduje, na ktorý Node sa nasadí nový Pod |
| Control Plane | Controller Manager | Dozoruje nad stavom a vyrovnáva skutočný vs. želaný stav |
| Node | Kubelet | Agent na každom Node, komunikuje s Control Plane |
| Node | Kube-proxy | Sieťový routing medzi Podmi a Servismi |
| Node | Container runtime | Spúšťa kontajnery (najčastejšie containerd alebo Docker) |
Z testerského pohľadu sa väčšina problémov v Kubernetes neprejavuje ako klasická aplikačná chyba, ale ako infraštruktúrny problém. Kubernetes Pod nenaštartuje kvôli zlým resource limitom, Service neroutuje traffic kvôli chybnému Selector labelu, alebo Kubernetes Ingress nefunguje kvôli chýbajúcej TLS konfigurácii. Preto je pochopenie architektúry základ pre efektívne debugovanie.
Pri testovaní v Kubernetes sa stretneš najčastejšie s týmito pojmami:
| Pojem | Význam pre testera |
|---|---|
| Pod | Najmenšia jednotka, ktorú budeš testovať. Obsahuje jeden alebo viac kontajnerov. |
| Deployment | Definuje, ako má byť aplikácia nasadená, koľko má mať replík a ako sa aktualizuje. |
| Service | Stabilný prístupový bod k Podom bez ohľadu na ich dynamické IP adresy. |
| Ingress | Externý prístup k aplikácii cez HTTP/HTTPS – testuj routovanie a TLS. |
| ConfigMap | Konfiguračné údaje mimo kódu aplikácie – overuj správne načítanie. |
| Secret | Citlivé údaje ako heslá alebo tokeny – testuj prístupové politiky. |
| Namespace | Logické oddelenie klastra – ideálne pre izolované testovacie prostredia. |
| Volume | Trvalé dáta, ktoré prežijú reštart kontajnera – testuj persistenciu. |
Testovanie softvéru v Kubernetes klastri je odlišné od testovania na lokálnom stroji. Pribudne orchestrácia, siete, service discovery, environment premenné, Secrets a storage. Tu je päť hlavných dôvodov, prečo testovať systematicky.
Aplikácia v kontajneri sa správa inak ako na laptope developera. V Kubernetes pribudne orchestrácia, siete, env premenné a Secrets. Testovaním overíš, že aplikácia beží správne, komunikuje s databázou a službami a správa sa v klastri tak, ako očakávaš.
Chyby v YAML manifestoch, zlé limity CPU a RAM, chýbajúce readiness a liveness probes, nesprávne network policies alebo service routovanie vedia zložiť produkciu. Testy tieto chyby nájdu skôr, než sa prejavia ako incident. Kubernetes má samoliečenie (self-healing) – ak Pod zlyhá, automaticky ho nahradí novým. Ale to funguje len vtedy, keď sú správne nastavené probes a limity.
Pod záťažou musí aplikácia aj klaster reagovať správne. Testovaním identifikuješ bottlenecks, overíš správanie Horizontal Pod Autoscaler (HPA), reakciu na špičky a to, či storage a sieť nebudú brzdiť. Bez záťažových testov sa o limitoch dozvieš až v produkcii.
Kubernetes poskytuje Role-Based Access Control (RBAC), ktorý určuje, kto a k čomu má prístup. Bez testovania bezpečnostných politík riskuješ nezabezpečené endpointy a únik dát. Testy RBAC a Network Policies sú v regulovaných odvetviach povinnosťou.
V modernom vývoji sa softvér nasadzuje niekoľkokrát za deň. Testy integrované do CI/CD pipeline zachytia regresie pred nasadením. Validácia YAML manifestov, Helm chartov a konfigurácií je prvá línia obrany. Lacnejší defekt nájdeš v pipeline ako v produkcii.
Testovanie v Kubernetes pokrýva široké spektrum od statickej analýzy manifestov až po chaos experimenty. Tu je prehľad hlavných typov testov a ich účel.
Lintovanie a testovanie pravidiel nad manifestmi pomáhajú odhaliť chyby ešte pred nasadením. Overuješ YAML manifesty, Helm charty, RBAC, sieťové politiky, resource limity, secrets a storage väzby. Nástroje ako Conftest, kube-linter a kube-score ti pomôžu chyby nájsť skôr, než sa dostanú do klastra. Typicky testovanými objektmi sú Kubernetes Deployment (resource limity, image tag), Ingress (TLS, annotations) a Namespace (label politiky).
Príklad Conftest politiky:
package main
deny[msg] {
input.kind == "Deployment"
not input.spec.template.spec.containers[_].resources
msg = "Containers must have resource limits"
}
// Spustenie:
// conftest test my-deployment.yaml
Overujú komunikáciu medzi mikroservismi a databázami, často v dočasnom klastri. Vhodné na testovanie eventov, queue, transakcií a API kontraktov. End-to-end testy simulujú reálne používateľské toky naprieč službami a validujú celý biznis tok, logging, metriky a chybové stavy.
Nástroje: KUTTL (deklaratívny testovací harness pre operátory), Chainsaw (E2E sekvencie s assertmi), Testkube (Kubernetes-native orchestrátor, ktorý vie spúšťať Postman, Cypress, k6 priamo v klastri).
Load tests – Kubernetes: Záťažové testy v Kubernetes simulujú reálnu prevádzku aj extrémy. Sleduješ throughput, latenciu, chybovosť, 95. a 99. percentil a overuješ automatické škálovanie. Výsledky vizualizuješ v Grafana cez Prometheus metriky. Je to kombinácia, ktorá ti dá úplný prehľad o správaní systému pod tlakom.
Čo overuje záťažový test v Kubernetes:
Príklad záťažového testu s k6:
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = { vus: 50, duration: '2m' };
export default function () {
const res = http.get(__ENV.API_URL);
check(res, { 'status 200': r => r.status === 200 });
sleep(1);
}
k6 vieš spustiť priamo v klastri, metriky posiela do Prometheus a Grafana ti ich zobrazí v reálnom čase. Pre JMeter v Kubernetes použi Kubernetes Job alebo Testkube.
Úmyselne rozbíjaš veci a sleduješ, či sa systém zotaví. Zabíjaš Pody, spomaľuješ sieť, simuluješ výpadok nódov a kontroluješ, či funguje self-healing a fallbacky.
Probes sú kľúčové – liveness probe reštartuje Pod pri zacyklení, readiness probe odoberie Pod z load balancera ak nie je pripravený, startup probe dá aplikácii čas na inicializáciu. Bez správne nastavených probes je chaos engineering chaosom bez kontroly.
Nástroje: Litmus (Chaos Engineering platforma pre Kubernetes, CNCF projekt), Kube-monkey (náhodné zabíjanie Podov podľa pravidiel).
Chaos experimenty spúšťaj najprv v stagingu s definovaným „steady state“ – čo má systém robiť za normálnych podmienok. Bez tohto bodu porovnania nevieš, či sa systém správa správne alebo nie.
RBAC testovanie, Network Policies, skenovanie image kontajnerov. Overenie, že kontajnery nebežia ako root a majú obmedzené capabilities. V regulovaných odvetviach (poistné systémy, finančné služby) je bezpečnostné testovanie povinnou súčasťou každého releasu.
Základný kubectl príkaz na overenie RBAC oprávnení:
# Overenie, či má service account prístup k resource
kubectl auth can-i get pods --as=system:serviceaccount:default:my-sa
# Zoznam všetkých RBAC rolí v namespace
kubectl get rolebindings,clusterrolebindings -n my-namespace
# Audit - kto má prístup k Secrets
kubectl get rolebindings -o json | jq '.items[] | select(.roleRef.name=="secret-reader")'
Testcontainers je knižnica, ktorá umožňuje písať testy s reálnymi závislosťami ako databázy, fronty alebo iné služby a bez mockovania. Každá závislosť beží v skutočnom Docker kontajneri, ktorý sa spustí pred testom a automaticky zastaví po jeho skončení.
Prečo je to dôležité pre Kubernetes testera? Pretože rozdiel medzi mockom a skutočnou databázou je obrovský. Mock nevráti rovnaké chybové správy, nespráva sa rovnako pri connection timeout a nikdy ťa neprekvapí race condition. Testcontainers ti dá reálne správanie pri zachovaní rýchlosti unit testu.
Pripravili sme pre teba prehľadné porovnanie, kedy použiť Testcontainers a kedy Kubernetes.
| Situácia | Testcontainers | Kubernetes cluster |
|---|---|---|
| Unit a integračné testy | ✅ Ideálne – rýchle, izolované | ❌ Overhead, pomalé |
| E2E testy celého systému | ❌ Nepostačuje | ✅ Nutné |
| CI pipeline pre každý PR | ✅ Lacné a rýchle | ⚠️ Drahé pri vysokom počte PR |
| Testovanie RBAC a Network Policies | ❌ Nedá sa simulovať | ✅ Jediná možnosť |
| Testovanie HPA a škálovania | ❌ Nedá sa simulovať | ✅ Nutné |
| Lokálne testovanie bez k8s | ✅ Funguje kdekoľvek | ❌ Vyžaduje klaster |
Odporúčaná stratégia: Testcontainers pre integračné testy v PR pipeline, Kubernetes cluster pre E2E, záťažové a chaos testy v stagingu. Ušetríš čas aj peniaze.
Ak tím prechádza z mockovaných testov na Testcontainers, začni s databázou. Je to najjednoduchší prípad a rozdiel v pokrytí chýb pocítiš okamžite. Až keď tímu Testcontainers dôveruje, pridávaj ďalšie závislosti ako message broker, cache, externé API.
Testy v Kubernetes zlyhávajú inak ako klasické testy. Chyba nie je vždy v kóde. Môže byť v konfigurácii, sieti, resource limitoch alebo v samotnom stave klastra. Tu je systematický postup, ako sa k tomu postaviť.
Tieto príkazy budeš používať najčastejšie pri diagnostike zlyhaní:
# Stav všetkých Podov v namespace
kubectl get pods -n my-namespace
# Detail Podu - udalosti, dôvod zlyhania, reštarty
kubectl describe pod my-pod-name -n my-namespace
# Logy Podu (prípadne konkrétneho kontajnera)
kubectl logs my-pod-name -n my-namespace
kubectl logs my-pod-name -c my-container -n my-namespace
# Logy predchádzajúcej inštancie (ak Pod reštartoval)
kubectl logs my-pod-name --previous -n my-namespace
# Spusti shell v bežiacom kontajneri
kubectl exec -it my-pod-name -n my-namespace -- /bin/sh
# Zisti stav Deploymentu
kubectl rollout status deployment/my-app -n my-namespace
Keď test zlyhá s nejasnou chybou, prvý príkaz je vždy kubectl describe pod. Sekcia Events na konci výstupu ti povie presne, čo sa stalo. Napríklad prečo Pod nenaštartoval, prečo bol zabitý, prečo obraz nešlo stiahnuť. Je to rýchlejšie ako čítať logy.
Kubernetes testing tools pokrývajú rôzne aspekty od lintingu až po chaos engineering.
Pozri si prehľad nástrojov na konfiguračné testy podľa ich účelu a využitia:
| Nástroj | Účel | Kedy použiť |
|---|---|---|
| Conftest | Policy testovanie cez OPA Rego | Validácia YAML manifestov a Helm chartov |
| kube-linter | Statická analýza K8s objektov | Odhalenie bezpečnostných a spoľahlivostných problémov |
| kube-score | Scoring manifestov | Odporúčania na spoľahlivosť, bezpečnosť a výkon |
| Goss | Validácia konfigurácie serverov | Sanity overenie worker nódov |
| Nástroj | Účel | Kedy použiť |
|---|---|---|
| KUTTL | Deklaratívny integračný harness | Testovanie operátorov a Helm chartov |
| Chainsaw | E2E sekvencie s assertmi | Sekvencia krokov nad stavom klastra |
| Testkube | K8s-native orchestrátor testov | Spúšťanie Postman, Cypress, k6 priamo v klastri |
| KubeLibrary | Python klient pre K8s | Robot Framework a E2E testy |
| Terratest | Go knižnica na infra testy | Helm charty, integračné testy infraštruktúry |
| Nástroj | Účel | Kedy použiť |
|---|---|---|
| k6 | Load testy s JS API | HTTP, WebSocket, gRPC záťaž – metriky do Prometheus |
| Litmus | Chaos Engineering platforma | Experimenty na hľadanie slabých miest (CNCF projekt) |
| Kube-monkey | Náhodné zabíjanie Podov | Overenie odolnosti a self-healing služieb |
| Prometheus + Grafana | Monitoring a vizualizácia | Sledovanie metrík počas testov a po nasadení |
| Garden | Vývoj a testovanie v K8s | Automatizácia testovacích prostredí |
… KUTTL, Litmus aj Testkube sú projekty pod záštitou Cloud Native Computing Foundation (CNCF)? Tej istej organizácie, ktorá spravuje samotný Kubernetes. To znamená dlhodobú podporu, aktívne komunity a kompatibilitu s K8s ekosystémom.
Testovanie v Kubernetes sa najlepšie integruje priamo do CI/CD pipeline. Tu je 9 krokov, ktoré pokrývajú celý cyklus od buildu až po produkciu:
Pre nastavenie pipeline odporúčame Jenkins alebo GitHub Actions. Oddeľ rýchle smoke a sanity testy od plných sád, paralelizuj testy podľa domén a ukladaj reporty, logy a metriky ako artefakty buildu.
Ukážka jednoduchého GitHub Actions workflow pre K8s testovanie:
name: K8s Test Pipeline
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup kubectl
uses: azure/setup-kubectl@v3
- name: Lint manifests
run: |
kube-score score k8s/*.yaml
conftest test k8s/*.yaml
- name: Deploy to ephemeral namespace
run: |
kubectl create namespace pr-${{ github.event.number }}
helm upgrade --install app ./chart -n pr-${{ github.event.number }}
- name: Run integration tests
run: kubectl kuttl test --namespace pr-${{ github.event.number }}
- name: Cleanup
if: always()
run: kubectl delete namespace pr-${{ github.event.number }}
Efemérne prostredia sú krátkodobé izolované deploymenty vytvorené pre každý pull request alebo branch. Každý vývojár dostane vlastné prostredie v klastri bez toho, aby kolidoval s ostatnými. Po merge sa prostredie automaticky zruší.
Ako to funguje v praxi:
Výhody efemérnych prostredí:
Nevýhody efemérnych prostredí:
Shift left znamená presun testov čo najskôr do vývoja: Statická analýza manifestov v PR, unit a kontraktné testy na lokálnom stroji, integračné testy v efemérnych prostrediach ešte pred mergom do main branche. Čím skôr nájdeš chybu, tým lacnejšie ju opravíš.
Shift right je opak – kontinuálne testovanie priamo v prevádzke. Syntetické sondy overujú dostupnosť 24/7, canary deployment nasadí novú verziu len pre 5 % traffic a sleduje chybovosť, feature flagy umožňujú A/B testovanie bez nového deployu. Oba prístupy sa dopĺňajú a spolu pokrývajú celý životný cyklus aplikácie.
Súbor osvedčených postupov, ktoré ti pomôžu udržiavať kvalitu v Kubernetes prostredí:
V regulovaných odvetviach (poistné systémy, finančné služby) je dôležité mať testovanie zdokumentované a auditovateľné – každý test run s časovou pečiatkou, výsledkami a logovacím kontextom.
Docker vytvára a spúšťa kontajnery – zabalené aplikácie s ich závislosťami. Kubernetes tieto kontajnery orchestruje – rozhoduje, kde bežia, škáluje ich, reštartuje pri zlyhaní a riadi sieť. Docker je nástroj na kontajnery, Kubernetes je nástroj na správu kontajnerov vo veľkom. V praxi ich používaš spolu. Docker a Kubernetes sa navzájom dopĺňajú.
Kubernetes cluster je súbor nódov (serverov), ktoré spolu tvoria jedno výpočtové prostredie. Control Plane riadi celý klaster a rozhoduje, kde bežia workloady. Nodes vykonávajú samotné workloady. Bežia na nich Pody s kontajnermi. Klaster môže bežať v cloude (AWS EKS, Azure AKS, GCP GKE), on-premise alebo lokálne (Minikube, kind).
Závisí od typu testu. Pre konfiguračné testy: Conftest a kube-score. Pre integračné a E2E: KUTTL, Chainsaw, Testkube. Pre záťažové testy: k6 s metrikami v Prometheus a vizualizáciou v Grafane. Pre chaos engineering: Litmus a Kube-monkey. Pre infra testy Helm chartov: Terratest. Všetky tieto nástroje vieš integrovať do jednej CI/CD pipeline.
Použi k6 alebo JMeter. S k6 napíšeš testovací scenár v JavaScripte, nastavíš počet virtuálnych používateľov a dobu behu. k6 vieš spustiť priamo v klastri ako Kubernetes Job, metriky posiela do Prometheus a Grafana ich vizualizuje v reálnom čase. Pre JMeter použi Kubernetes Job alebo Testkube orchestrátor.
Nie nevyhnutne, ale pre realistické testovanie je to veľká výhoda. Kubernetes ti dá prostredie blízke produkcii – service discovery, load balancing, network policies. Pre viac informácií pozri náš článok o testovaní mikroservisov.
Testovanie v Kubernetes nekončí pri zelenom API teste. Potrebuješ istotu, že celé prostredie je zdravé, bezpečné a výkonné. Kombinuj funkčné a integračné testy, konfiguračné a bezpečnostné pravidlá, záťaž a chaos experimenty a observabilitu s automatizáciou v CI/CD.
Nástroje ako KUTTL, Testkube, k6, Litmus, Conftest a Terratest ti umožnia pokryť celý životný cyklus. Začni s lintingom manifestov, postupne pridávaj integračné a záťažové testy a pravidelné chaos experimenty.
Ak ťa zaujíma automatizované testovanie v širšom kontexte alebo hľadáš pozíciu, kde tieto skúsenosti využiješ, pozri naše aktuálne DevOps a QA pozície.
Zdroje:
https://kubernetes.io/docs/
https://github.com/kubernetes
https://www.cncf.io/
https://learnk8s.io/testing-kubernetes-deployments
https://testkube.io/blog
https://grafana.com/blog/2022/09/k6-kubernetes
https://www.cncf.io/reports/cncf-annual-survey-2023/
https://www.cncf.io/
Súvisiace články