Kontejnerizace (Docker, Kubernetes)

0
Kontejnerizace (Docker, Kubernetes)

Proč kontejnerizace změnila způsob, jak vyvíjíme a provozujeme software

Kontejnerizace standardizuje balení aplikací a jejich závislostí do přenosných jednotek, které běží konzistentně v různých prostředích (vývoj, test, produkce, edge). V praxi to znamená rychlejší releasy, snadnější škálování a vyšší odolnost vůči chybám. Klíčovými technologiemi jsou Docker (build, image, lokální běh) a Kubernetes (orchestrace, škálování, self-healing). Tento text pokrývá architekturu, provozní vzory, bezpečnost, observabilitu i nákladovou optimalizaci.

Containers vs. virtuální stroje

  • Izolace: kontejnery sdílí kernel hosta, VM mají vlastní kernel; kontejnery startují v řádu milisekund až sekund.
  • Hustota: na stejném HW vměstnáte více kontejnerů než VM; lepší využití zdrojů.
  • Imutabilita: image je neměnný artefakt; změna = nová verze image.
  • Napojení na CI/CD: buildy produkují image a metadata (tagy, SBOM), release je deklarativní změna.

Docker: image, vrstvy a build pipeline

  • Image vrstvy: každá instrukce v Dockerfile tvoří vrstvu; správné pořadí minimalizuje cache busting a velikost.
  • Multi-stage build: první fáze kompiluje, druhá kopíruje pouze artefakty; výsledný image je malý a bezpečnější.
  • Base image: preferujte minimal (např. distroless, alpine s rozmyslem); explicitně fixujte verze.
  • Runtime uživatel: nepoužívejte root; nastavte USER, definujte WORKDIR, ENTRYPOINT a HEALTHCHECK.
  • Registries: Docker Hub, GHCR, ECR, GCR; promyslete retence tagů, podpisy (cosign), zálohy a geo-replici.

Networking a perzistence v Dockeru

  • Sítě: bridge (implicitní), host, overlay (Swarm); jasně mapujte porty (-p 8080:80) a význam EXPOSE.
  • Volumes: rozlišujte bind mount (lokální vývoj) vs. named volume (produkční perzistence).
  • Secrets a konfigurace: nepřidávejte je do image; načítejte z prostředí, souborů či externích trezorů.

Typické anti-patterny při práci s Dockerem

  • Monolit v jednom kontejneru: dělte podle domén; jeden proces = jedna odpovědnost.
  • „Mutable“ kontejnery: žádné ssh & apt install v běhu; změna = nový build.
  • Gigantické image: čistěte cache, používejte multi-stage a vrstvy s rozmyslem.

Kubernetes: základní stavebnice a řídicí smyčky

  • Pod: nejmenší běhová jednotka; sdílí síťový jmenný prostor a volume.
  • Deployment & ReplicaSet: deklarativní rollout, rollback, počet replik, strategie RollingUpdate.
  • Service: stabilní virtuální IP a DNS jméno; typy ClusterIP, NodePort, LoadBalancer.
  • Ingress / Gateway API: L7 směrování, TLS, rate-limit, WAF; moderní cesta je Gateway API.
  • ConfigMap & Secret: konfigurace a citlivá data (base64 není šifrování; využijte KMS/SealedSecrets/SOPS).
  • StatefulSet & PersistentVolume: stabilní identity a perzistentní storage přes PersistentVolumeClaim a CSI drivery.
  • DaemonSet, CronJob, Job: agenty na každém uzlu, plánované úlohy a dávky.

Plánování, škálování a dostupnost

  • Requests/limits: definujte CPU a paměť; Scheduler je využívá k umísťování podů.
  • HPA/VPA: horizontální vs. vertikální škálování na základě metrik; kombinujte s podmínkami auto-scaleru uzlů.
  • PodDisruptionBudget & PodTopologySpread: zamezí nechtěné unavailability a rozloží zátěž napříč zónami.
  • Probes: liveness, readiness, startup chrání před posíláním provozu nezdravým podům.

Networking v Kubernetes: CNI, služby a politiky

  • CNI pluginy: Calico, Cilium, Weave; volba ovlivňuje výkon, bezpečnost (eBPF) i síťové politiky.
  • DNS a service discovery: CoreDNS poskytuje interní jmennou službu; dbejte na TTL a caching.
  • NetworkPolicy: definujte, kdo smí mluvit s kým; deny-all jako výchozí postoj pro citlivé workloady.

Storage: perzistence a výkonnost

  • CSI: rozhraní pro storage drivery (cloudové disky, on-prem SAN/NAS, Ceph, Longhorn).
  • Access modes: RWO, RWX, ROX; podle nich volte typ a architekturu aplikace.
  • Snapshoty a replikace: plánujte RPO/RTO, snapshot class, zálohovací operátory.

Observabilita: logy, metriky, trasování

  • Logy: standard output; agregace přes Fluent Bit/Vector do OpenSearch/Elastic.
  • Metriky: Prometheus + Alertmanager; definujte SLO/SLI, exportery pro infrastrukturu i aplikace.
  • Tracing: OpenTelemetry + Jaeger/Tempo; sledujte latence a závislosti mezi mikroslužbami.
  • Dashboards: Grafana pro korelace; propojte metriky, logy a tracery do jednoho pohledu.

Service mesh: kdy dává smysl

  • Důvody pro mesh: nulové změny kódu pro mTLS, retry, circuit breaking, traffic shaping, A/B a canary.
  • Varianty: Istio, Linkerd, Cilium Service Mesh; zvažte režii sidecarů vs. ambient/EBPF modely.

Bezpečnost: supply chain, běhové politiky, izolace

  • SBOM a podpisy: generujte SBOM (CycloneDX, SPDX), podepisujte image (cosign), ověřujte v admission vrstvě.
  • Policy as code: OPA/Gatekeeper nebo Kyverno; vynucujte pravidla (ne-root, read-only FS, drop CAP_NET_RAW).
  • Pod Security: používejte Pod Security Standards (Baseline/Restricted), seccomp, AppArmor.
  • Secrets management: KMS integrováno s clusterem (AWS KMS, HashiCorp Vault); rotace klíčů, audit.
  • Supply chain skenování: Trivy/Grype pro image; pravidelné rescany, blokace kritických CVE.

CI/CD a release strategie

  • Build: deterministické buildy, cache, multi-arch (amd64/arm64); artefakty s metadaty (git SHA, datum).
  • Testy: unit/integration, testcontainers, kontrakty mezi službami; smoke test po nasazení.
  • Release: blue-green, canary, progressive delivery (Argo Rollouts); automatické rollbacky na základě SLO.

GitOps: deklarativní správa prostředí

  • Princip: zdroj pravdy v Git; agent (Argo CD/Flux) synchronizuje manifesty do clusteru.
  • Výhody: auditní stopa, jednoduché rollbacky, schvalovací brány (PR), menší drift.
  • Struktura repa: oddělte app (Helm/Kustomize šablony) a env (overlays, hodnoty).

Architektonické vzory pro mikroslužby

  • 12-factor & beyond: konfigurace přes prostředí, stateless procesy, disposability, health endpoints.
  • Backpressure a timeouts: definujte limity, retry s jitterem, idempotenci.
  • Event-driven: fronty a streamy (Kafka, NATS, RabbitMQ) s operátory pro K8s.

Multi-tenancy, compliance a governance

  • Izolace: Namespaces + NetworkPolicy + ResourceQuota; oddělte RBAC role a přístupy k secretům.
  • Compliance: audit logy API serveru, retenční politiky, kryptografie v souladu s normami (např. ISO 27001).
  • Zásady životního cyklu: verze clusteru, cykly upgradů, deprecace API (pohlídejte apiextensions.k8s.io změny).

Hybrid cloud, edge a workloady s GPU

  • Hybridní a multi-cloud: jednotná vrstva deploymentu, přenosná observabilita, srovnatelné bezpečnostní politiky.
  • Edge: menší clustery s omezenými zdroji; důraz na offline tolerance, OTA aktualizace a bezpečné bootování.
  • GPU/AI workloady: device pluginy, plánování podle GPU paměti, NUMA-aware umístění.

Optimalizace nákladů a výkonu

  • Práva velikost: měřte reálné spotřeby, upravujte requests/limits a velikosti nodů.
  • Autoscaling uzlů: automatické přidávání/ubírání kapacity; pozor na fragmentaci zdrojů (bin-packing).
  • Cache a CDN: offload statiky, snížení latence a nákladů na egress.
  • Životní cyklus logů: retenční politiky, sampling v tracích, komprese.

Troubleshooting: systematický postup

  1. Reprodukce: ověřte manifesty, image, proměnné prostředí; srovnejte očekávané vs. runtime.
  2. Probes & eventy: zkontrolujte events, stav podu, důvody restartů (OOMKilled, CrashLoopBackOff).
  3. Síť: ověřte DNS, NetworkPolicy, Service/Endpoints, readiness backendů.
  4. Storage: PVC bound? IOPS/latence? Práva v mountu, fs-type.
  5. Regrese: vraťte se k předchozímu Git commit (GitOps), ověřte změny závislostí a konfigurace.

Checklist produkční připravenosti

  • Imutabilní image s non-root uživatelem, podpis a SBOM.
  • Requests/limits, readiness/liveness/startup pro každou službu.
  • NetworkPolicy a šifrované secrety; rotace klíčů.
  • Logy → centrální úložiště; metriky a alerty navázané na SLO.
  • Automatické rollouty s canary/blue-green a definovaným rollbackem.
  • Zálohy a obnovy: testovaný restore runbook, snapshoty PV.

Závěr: kontejnerový ekosystém jako provozní operační systém

Docker zjednodušuje build a transport aplikací, Kubernetes přináší standardizovanou vrstvu orchestrace a řízení. Spolu vytvářejí „operační systém datacentra“, kde je infrastruktura deklarativní, odolná a auditovatelná. Dlouhodobý úspěch závisí na disciplíně v bezpečnosti, observabilitě, automatizaci a kvalitě vývojářské praxe. Pokud tyto oblasti skloubíte, získáte rychlejší inovaci, stabilnější provoz a predikovatelné náklady.

Poradňa

Potrebujete radu? Chcete pridať komentár, doplniť alebo upraviť túto stránku? Vyplňte textové pole nižšie. Ďakujeme ♥