Proč je správa konfigurací klíčová
Správa konfigurací (Configuration Management, CM) je základní disciplína provozu IT, která zajišťuje, že servery, kontejnery, síťové prvky i aplikační komponenty jsou v požadovaném stavu a tento stav je opakovatelný, auditovatelný a bezpečný. Nástroje jako Ansible, Puppet a Chef implementují principy deklarativního popisu, idempotence a desired state, čímž eliminují manuální chyby, konfigurační drift a zkracují MTTR i time-to-change.
Klíčové principy: desired state, deklarativnost a idempotence
- Desired state: cílový stav systému je popsán v kódu (infrastruktura a konfigurace jako kód). CM nástroj průběžně konverguje k tomuto stavu.
- Deklarativní vs. imperativní styl: deklarativní (Puppet, většina Chef/Ruby DSL, Ansible yaml) popisuje co má být, ne jak. Imperativní přístup popisuje postup; je náchylnější k chybám a hůře se testuje.
- Idempotence: opakované spuštění nemění již dosažený stav (bez side effects). U Ansible je idempotence vlastností jednotlivých modulů, u Puppet/Chef je součástí resource modelu.
- Konvergence: proces, kterým agent nebo běh playbooku srovná aktuální stav s cílem a provede jen nutné změny.
Architektonické modely: agent, agentless a pull vs. push
- Agent-based/pull (Puppet, Chef Client): agent běží na uzlu, periodicky stahuje katalog/manifest a aplikuje změny. Výhody: škálování, offline tolerance, lokální cache, centralizované reporty.
- Agentless/push (Ansible): kontrolní uzel spouští úlohy vzdáleně (SSH/WinRM). Výhody: jednoduchý start, žádné agenty; nevýhody: trvalé připojení a řízení concurrency.
- Hybrid: Ansible Pull, Chef Solo/Zero, Puppet Bolt kombinují ad-hoc orchestrace s CM principy.
Model zdrojů a abstrakcí
- Resources/Providers: abstrakce konfigurací (balíčky, služby, soubory, uživatelé, registry, firewall), která skrývá rozdíly mezi distribucemi/OS.
- Dependencies a notifikace: explicitní vztahy (require/before, notify/subscribe; Ansible handlers) řídí pořadí a reaktivní změny (restart služby po změně konfigurace).
- Šablony a data: templating (Jinja2/ERB/EPP), oddělení kódu od dat (Ansible group_vars/host_vars, Puppet Hiera, Chef attributes/data bags).
Organizační vzory v kódu: role, profily a kompozice
- Role/Playbook (Ansible): role zapouzdřují úlohy, šablony a proměnné; playbook orchestrace rolí pro inventář a prostředí.
- Role & Profile pattern (Puppet): role mapuje byznysový účel (např.
role::web), profile skládá technické moduly (nginx, php, monitoring). Zvyšuje znovupoužitelnost a čitelnost. - Cookbooks/Recipes (Chef): cookbook jako distribuční jednotka, recepty pro jednotlivé komponenty, Policyfiles pro deterministické sestavy.
Inventář, klasifikace a cílení změn
- Inventory: statický/yaml, dynamický (cloudové pluginy), CMDB; skupiny a proměnné na úrovni skupin/hostů.
- Klasifikace: přiřazení rolí/profilů uzlům (Puppet Enterprise classifier, Ansible host_vars a group_vars, Chef environments).
- Selektivní rollout: canary, blue/green, procentuální rollout, feature flags a staged prostředí (dev→test→stage→prod).
Řízení tajemství a citlivých dat
- Šifrované datové zdroje: Ansible Vault, Hiera EYAML, Chef Encrypted Data Bags.
- Externí služby: integrace s HashiCorp Vault, cloud KMS (AWS KMS, Azure Key Vault, GCP KMS); dynamic secrets, TTL a rotace klíčů.
- Minimální expozice: no-logs pro citlivé hodnoty, just-in-time vydávání a least privilege pro běh runnerů/agentů.
Testování a kvalita: shift-left v CM
- Statické kontroly: lint (ansible-lint, yamllint, puppet-lint, cookstyle/rubocop), bezpečnostní skeny závislostí.
- Jednotkové a integrační testy: Molecule (Ansible) s driverey (Docker/Podman/Vagrant), rspec-puppet/rspec-chef, Test Kitchen (Chef) pro multi-OS matice.
- Kontrakty a inspekce: InSpec/Serverspec pro ověření výsledného stavu (porty, služby, práva, obsah souborů).
CI/CD a GitOps pro konfigurace
- Single source of truth: git repozitáře pro role/cookbooks/manifests; branching strategie (trunk-based, release branches).
- Pipeline: lint → unit → integration (ephemeral prostředí) → security scan → sign & publish → řízený rollout.
- GitOps: automatizovaná aplikace změn po merge (webhook/cron/pull), audit trail z commitů, podpisy artefaktů a policy-as-code (OPA/Conftest).
Drift management, audit a compliance
- Detekce driftu: pravidelný běh agentů, reporty změn, porovnání skutečnosti s katalogem; alerting na odchylky.
- Audit: centrální logy běhů, kdo/kdy/co změnil, schvalovací workflow (Change Advisory Board) s automatizovaným evidováním.
- Compliance-as-code: profilace podle CIS/Benchmarks, InSpec profily, remediační playbooky.
Provozní spolehlivost: pořadí, idempotentní handler a rollback
- Pořadí a závislosti: explicitní definice, aby se předešlo race conditions (např. migrace DB před startem služby).
- Handlery a restart politiky: restartovat služby jen při skutečné změně konfigurace, delayed notifikace pro seskupení restartů.
- Rollback: policyfiles/commit pinning, verze balíčků a šablon, rychlý návrat k předchozí verzi; snapshoty (VM/volume) jako poslední instance.
Škálování a výkon CM řešení
- Kontrolní uzly: horizontální škálování (Ansible AWX/Tower shardy, Puppet Compile Masters, Chef Infra Server cluster).
- Paralelizace: forks v Ansible, queue a rate limiting pro bezpečný rollout; per-environment concurrency.
- Cache a faktory: fakta (Facter/Ohai/Setup) ukládat a znovupoužívat; minimalizovat shromažďování dat při každém běhu.
Integrace s IaC a orchestrací
- Separace kompetencí: Terraform/CloudFormation pro provisioning prostředí; Ansible/Puppet/Chef pro konfiguraci OS a aplikací.
- Kontejnery a Kubernetes: pro immutable modely omezit CM uvnitř kontejneru, preferovat build-time konfiguraci (Dockerfile/Helm values) a operators.
- Síť a Windows: moduly pro síťové prvky (NAPALM/Ansible network) a Windows (WinRM, DSC) zajišťují jednotný přístup napříč platformami.
Bezpečnostní aspekty běhu CM
- Privilegované akce: řízené sudo (become), just-in-time přístupy, izolované runner účty, podepisování artefaktů.
- Integrita zdrojů: verifikace kontrolních součtů, pinning verzí, blokování nedůvěryhodných repozitářů.
- Network hygiene: segmentace kontrolních kanálů, mTLS/SSH hardening, rotace klíčů a audit přihlášení.
Monitorování, telemetrie a observabilita
- Metriky CM: úspěšnost běhů, doba konvergence, počet změn na běh, chybovost modulů, fronty úloh.
- Logy a trasování: strukturované logy (JSON), korelace s ticketingem/CI, identifikátory běhů v eventech SIEM.
- Uživatelský dopad: propojení s APM (latence aplikací) pro detekci negativních efektů rolloutů.
Antivzory a časté chyby
- Imperativní skriptování v CM: shell bloky bez idempotence, skrytá logika v šablonách; výsledkem je necitelný a křehký kód.
- Hardcodovaná data: proměnné a tajemství přímo v šablonách; patří do vars/Hiera/Vault.
- Monolit vše v jedné roli: nízká znovupoužitelnost, nemožné testování; preferujte modulární role/profily/cookbooky.
- Nekontrolovaný paralelní rollout: absence batches a health checků; riziko simultánního výpadku.
Specifika Ansible, Puppet a Chef
- Ansible: agentless, snadný start, výborné pro ad-hoc i konfigurace; dbejte na idempotentní moduly, check mode, diff, handlers, blocks/rescue pro robustní běhy.
- Puppet: silný deklarativní model, Hiera pro data, skvělý drift management a reporty; vyžaduje pořádek v modulech a jasnou klasifikaci.
- Chef: flexibilní Ruby DSL, Test Kitchen a InSpec ekosystém; kontrolujte determinismus (Policyfiles) a omezte přílišnou imperativnost.
Migrační strategie a adopce v týmu
- Inventarizace: audit aktuálního stavu, katalog služeb a závislostí; definujte minimální baseline (uživatelé, logování, monitoring, bezpečnost).
- Postupná standardizace: začněte s „základní server“ rolí, poté aplikační vrstvy; zavádějte testy a CI postupně.
- Enablement: dokumentace, runbooky, kódové standardy, code review a párové programování; dojos pro sdílení praxe.
Kontrolní seznam pro zralé CM
- Konfigurace jako kód v gitu, verzované a podepsané artefakty.
- Idempotentní role/moduly s testy (lint, unit, integration, InSpec).
- Oddělení kódu a dat, tajemství v trezoru, politika přístupu a rotace.
- Pipeline s automatickým nasazením a řízeným rolloutem, canary/blue-green.
- Monitoring driftu, audit změn, compliance-as-code.
- Dokumentované závislosti, explicitní pořadí a bezpečné handlers.
Závěr: CM jako páteř spolehlivého provozu
Efektivní správa konfigurací spojuje deklarativní popis, idempotentní provádění, testování a GitOps automatizaci. Nástroje Ansible, Puppet a Chef se liší implementací, ale sdílejí stejné principy: desired state, opakovatelnost, bezpečnost a auditovatelnost. Organizace, které tyto principy osvojí, dramaticky zkracují čas změn, snižují riziko incidentů a budují předvídatelnou, škálovatelnou a compliant infrastrukturu napříč on-prem, cloudem i edge prostředími.