webapp-operator
One resource in. A whole workload out, and kept that way.
You write a small WebApp resource: an image, a port, how many replicas. The controller reconciles it into a Deployment, a Service, a HorizontalPodAutoscaler and a PodDisruptionBudget, then keeps them matching the spec forever. Edit a child by hand and the next reconcile puts it back.
The interesting part is the parts that refuse. An admission webhook rejects :latest and untagged images, because an operator that forbids mutable tags for its operands should hold itself to the same rule. Status conditions report what is actually true, including Available=False when the image does not exist. Two API versions are served through a conversion webhook that completes inconsistent stored data instead of rejecting it.
- Go
- controller-runtime
- kubebuilder
- envtest
- Helm
- Prometheus
- Grafana
- Trivy
- govulncheck
- p95 50ms
- reconcile at 250 objects
- 81 / 100%
- controller / webhook coverage
- 41 MB
- RSS under full load
- 2
- API versions, converted