V roce 2017 jsme začínali s StatefulSets v beta. Dnes provozujeme PostgreSQL clustery a Elasticsearch na Kubernetes v produkci. Dvě roky zkušeností v jednom článku.
PostgreSQL na Kubernetes¶
Používáme Patroni operator pro PostgreSQL HA. Tříuzlový cluster: primary + 2 replicas. Automatický failover, streaming replikace, point-in-time recovery z WAL archivů v S3.
Co funguje: automatický failover, backup scheduling, resource isolation. Co je challenging: storage performance tuning, major version upgrade (stále ruční proces), connection pooling (PgBouncer jako sidecar).
Elasticsearch na Kubernetes¶
Elastic Cloud on Kubernetes (ECK) operator. 3 master nodes, 3 data nodes, 2 coordinating nodes. Automatický scaling, rolling upgrades, snapshot backupy.
ECK operator je výborný — definujete desired state, operator se postará o zbytek. Upgrade Elasticsearch z 6.x na 7.x proběhl rolling updatem bez downtime.
Lessons learned¶
- Storage class matters: SSD (gp2/gp3) pro databáze, vždy
- Anti-affinity: repliky na různých nodech/AZ
- Resource requests = limits pro guaranteed QoS
- Backup testujte pravidelně — restore drill každý měsíc
- Monitoring: databáze potřebují specifické metriky (replication lag, connections, locks)
Kdy NE na Kubernetes¶
Extrémně výkonnostně citlivé workloady (latence na bare metal je stále nižší). Obrovské databáze (TB+) s komplexním sharding. Legacy databáze bez Kubernetes operatoru.
Stateful workloady na Kubernetes jsou production-ready¶
S dobrým operatorem, správným storage a disciplinovaným provozem to funguje. Ale respektujte limity — ne každá databáze patří do Kubernetes.