RESTIA, restaurant software on Kubernetes
RESTIA sells point of sale, orders and reservations software to restaurants. I designed its platform and run it end to end.
Live restaurant orders need production-grade reliability and full observability, but a small company can’t carry a per-host, per-metric SaaS bill or a dedicated ops team. Every change also has to be tested before it reaches restaurants.
What I built
- Kubernetes (k3s) on Hetzner Cloud, provisioned with Terraform and Terragrunt: separate production and test clusters, a fixed node pool plus an autoscaling pool that scales from zero.
- GitOps with Flux: every cluster change is a reviewed pull request, validated in CI with kustomize build and strict schema checks before merge.
- An ephemeral environment for every backend pull request, created on open and deleted on close. Merging releases to test; production is a deliberate, manual promotion.
- Self-hosted observability: VictoriaMetrics, VictoriaLogs and VictoriaTraces behind an OpenTelemetry collector with tail sampling (every error trace plus 10% of healthy ones), Grafana dashboards as code, and logs linked to traces.
- SLO alerting with Sloth: a 99.9% availability SLO on the core sync path pages on error-budget burn instead of noisy thresholds.
- Postgres on Kubernetes with CloudNativePG, with nightly base backups to object storage.
Results
- 13 months of production metrics (about 68k active series, 2.3k samples per second) are sized at about 22 GB, projected from the measured 0.26 bytes per sample.
- The metrics database runs within 2 GiB of RAM and 1 CPU. Observability costs the disks and CPU it runs on, with no per-host, per-series or per-GB fees.
- Every backend change runs in its own environment before merge, and production releases are explicit.
| Active series | about 68k |
|---|---|
| Samples ingested | about 2.3k per second |
| Retention | 13 months |
| Disk for 13 months | about 22 GB |
| Bytes per sample | 0.26 |
| Database resources | 2 GiB RAM, 1 CPU |
| Infrastructure hosts | $75–160 |
|---|---|
| Custom metrics above the allotment | $670–3,400 |
| Per month | $750–3,500 |
| Per year | $9,000–42,000 |
Inputs: 68,000 series billed as custom metrics; 5–9 billed hosts (5 fixed nodes plus 0–4 autoscaled); metrics only.
A list-price estimate made with my calculator. Datadog doesn’t publish its custom-metric rate: the high end uses the widely cited USD 5 per 100, the low end an assumed USD 1. Some of these series would count as standard Datadog metrics, which would lower the figure.