Overview
Yuptime is a Kubernetes-native monitoring controller where every monitor is a CRD. There’s no database; state lives on each CRD’s status subresource, and a bounded controller check engine schedules work through persistent workers and a checker sidecar. That makes the whole thing GitOps-native: declare your monitors as YAML in a repo, sync with Flux or Argo CD, or install the public Helm and Timoni OCI artifacts.
Features
- All configuration is YAML in Git; works cleanly with Flux, Argo CD, or any GitOps flow
- No database: state lives on CRD status subresources
- Persistent workers run bounded checks without creating a Kubernetes object for every check
- Prometheus metrics for monitoring and alerting
- Native Alertmanager integration
- Maintenance-window CRDs suppress alerts during planned work
Monitor Types
Network
- HTTP: check status code and response body
- TCP: port reachability
- DNS: resolve and validate records
- Ping: ICMP reachability
- WebSocket: connect and exchange a frame
Application
- Push: heartbeat endpoint for cron jobs and batch processes
- Steam: game-server availability
- Kubernetes: pod and service health inside the cluster
Architecture
The controller check engine follows a bounded Kubernetes operator pattern:
- Reconcilers for
Monitor,MonitorSet, andMaintenanceWindow - A fixed worker pool and checker sidecar that schedule and run checks without per-check Jobs
- The controller is the ordered status writer; workers hold no database state
- A validation layer that rejects malformed CRDs before they hit the reconciler
Configuration
yaml
apiVersion: yuptime.io/v1
kind: Monitor
metadata:
name: api-health
spec:
type: http
enabled: true
schedule:
intervalSeconds: 60
timeoutSeconds: 30
target:
http:
url: https://api.example.com/healthTechnology Stack
- TypeScript on Bun
- Kubernetes client for CRD management
- Custom reconciler framework
- Prometheus metrics and Alertmanager integration