Skip to main content
Launched

Yuptime

Kubernetes-native monitoring where configuration is CRDs, state lives in status, and a bounded controller and worker engine checks targets with Prometheus and Alertmanager integrations.

TypeScript Kubernetes Uptime Monitoring CRD Controller
Cover image for Yuptime

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, and MaintenanceWindow
  • 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/health

Technology Stack

  • TypeScript on Bun
  • Kubernetes client for CRD management
  • Custom reconciler framework
  • Prometheus metrics and Alertmanager integration

Share this project