OXN is a powerful tool for experimenting with and benchmarking observability software and fault detection mechanisms in Kubernetes environments. It allows users to perform controlled experiments on systems like Prometheus and other fault detection mechanisms, while also enabling fault injection into microservice systems.
- Fault Injection: Inject network delays, packet losses, and other faults into specific Kubernetes pods
- Experiment Configuration: Design experiments via JSON/YAML configuration files
- Batch Experimentation: Run multiple experiment configurations sequentially and automatically
- Fault Detection Benchmarking: Evaluate the effectiveness of different fault detection mechanisms
- UI: Client-server architecture with a web UI
- Kubernetes Integration: Native support for Kubernetes environments
- Extensible Design: Easy to add new fault detection mechanisms and treatments
- Kubernetes cluster
- Helm
- kubectl
- just
- Docker (for development)
- Python 3.8+ (for development)
- Node.js 16+ (for frontend development)
- Clone the repository:
git clone https://github.com/LHMoritz/oxn-fork.git
cd oxn- Install OXN using Helm:
helm install oxn k8s/oxn-platform- Clone the repository and set up your environment:
git clone https://github.com/LHMoritz/oxn-fork.git
cd oxn- Use the provided justfile commands to set up your cluster:
just setup # Enable required GCP APIs
just generate-env # Generates the .env file
just init # Initialize terraform
just up # Create and configure the cluster
just install # Install SUE and OXN
just down # Destroy the cluster frontend/: Next.js-based web UIbackend/: FastAPI-based backend serviceanalysis/: FastAPI-based ML fault detection servicek8s/: Kubernetes manifests and Helm chartsexperiments/: Example experiment configurations
- Build development Docker images:
just build-dev- Start the development environment:
just up dev=trueTo create a new treatment:
- Read the treatment interface in
backend/internal/models/treatment.py - Create a new treatment class in
backend/internal/treatments.py - Update the treatment key dictionary in
backend/internal/runner.py
{
"kubernetes_prometheus_rules": {
"action": "kubernetes_prometheus_rules",
"params": {
"latency_threshold": 100,
"evaluation_window": "120s",
"quantile": 0.90
}
}
}-
Jaeger 500 Errors
- Sometimes returns 500 errors due to malformed trace timestamps
- This can cause data loss in experiments
- Status: High Memory usage is a possible cause
-
Security Context Treatment
- The add security context treatment (for delay and packet loss treatments) may require 1-2 extra experiment runs to fully take effect
- Failed experiments can be quickly restarted
- Status: Known behavior