Detects dangerous releases that pass readiness probes but are unsafe for users.
5 scenarios · 0 false-safe decisions.
Python · Kubernetes · FastAPI · Prometheus · Docker Compose
Problem: Kubernetes readiness probes check whether a container is alive. They do not check whether the deployment is safe for users. A service can pass every probe while DNS is failing, p95 latency has tripled, and the error budget is at zero.
Impact: False-green deployments roll out. The problem compounds across deployment waves. Customers are impacted before anyone notices.
Proof: KubePulse compares probe state against user-visible health across four validation layers. Blocked 5 dangerous deployments in controlled testing — including a cascade where probes stayed green through +333% p95 latency and 8% error rate. 0 false-safe decisions.
- Latest report: reports/latest/quality_soak_report.json
- Tests:
make test - Demo:
make demo
{
"release_decision": "BLOCK",
"probes_say_healthy": true,
"safe_to_operate": false,
"p95_latency_impact": "+333%",
"error_rate_increase": "+8%",
"error_budget_remaining": "0.0%",
"rollback_recommended": true
}Generated by CI. Source: reports/latest/quality_soak_report.json
5 scenarios · 0 false-safe decisions.
| Signal | Value |
|---|---|
| Release Decision | BLOCK |
| Recovery Time | 12s |
| P95 Latency Impact | +333% |
| Error Rate Increase | +8% |
Generated from the latest report artifact in reports/latest/.
✓ SRE
✓ Production Engineering
✓ Kubernetes
✓ Reliability
| Scenario | Probe State | Safe to Operate | Decision |
|---|---|---|---|
| Readiness false positive | PASS |
false |
BLOCK |
| DNS failure | PASS |
false |
BLOCK |
| API latency injection (+22,831% p95) | PASS |
false |
BLOCK |
| Multi-service cascade (+333% p95) | PASS |
false |
BLOCK |
| AMD MI300X burst (+608% p95) | PASS |
false |
BLOCK |
Report regenerated by CI. Source: reports/latest/safety_report.md
Kubernetes readiness probes check whether a container is alive. They do not check whether the deployment is safe for users.
A service passes every probe while downstream DNS is failing, p95 latency has tripled, and the error budget is at zero. The next deployment wave rolls out. The problem compounds.
KubePulse measures user-visible health across four validation layers, compares against probe state, and issues an explicit release decision:
Deployment rolls out. All readiness probes: PASS.
Behind the scenes:
edge-service → api-service → auth-service → postgres
auth-service connection pool exhausted under load
Cascade: api-service timeout → edge-service retry storm
KubePulse Layer 1: p95 latency +7,623% · error rate 8%
Layer 3: error_budget_remaining: 0.0%
Layer 4: probes_say_healthy: true · safe_to_operate: false
Release decision: BLOCK · rollback_recommended: true
Deployment Trigger
│
▼
Layer 1: Health Signals
p50 · p95 · p99 · error rate
│
▼
Layer 2: Network Validation
DNS · TCP · TLS · auth
│
▼
Layer 3: SLO Evaluation
error budget · resilience score
│
▼
Layer 4: Probe Integrity
probes_say_healthy vs safe_to_operate
│
├── divergence detected → release_decision: BLOCK + rollback recommendation
└── all pass → release_decision: continue
KubePulse/
├── lab/network-lab/ Docker Compose scenarios + scripts
├── scenarios/ YAML scenario definitions
├── gate/ 4-layer release-quality gate
├── diagnostics/ DNS · TCP · TLS · auth validation
├── docs/ architecture · case study
└── reports/ soak-test + quality gate outputs (CI-generated)
git clone https://github.com/kritibehl/KubePulse && cd KubePulse
docker compose -f lab/network-lab/docker-compose.yml up -d --build
make demo # all 5 scenarios
make test # 0 false-safe decisions
make report # → reports/latest/quality_soak_report.jsonmake test
# ✓ readiness false positive — probes=true · safe=false → BLOCK
# ✓ DNS failure — 0/25 requests succeed → BLOCK
# ✓ API latency injection — p95 +22,831% → BLOCK
# ✓ multi-service cascade — resilience score 100→46 → BLOCK
# ✓ AMD MI300X burst — p95 +608% → BLOCK
# 5 scenarios · 0 false-safe decisionsMulti-service cascade scenario:
{
"probes_say_healthy": true,
"safe_to_operate": false,
"release_decision": "block",
"error_budget_remaining": "0.0%",
"what_probes_missed": "333% p95 drift · 8% error rate · 9% availability gap",
"rollback_recommended": true
}KubePulse includes operational artifacts for deployment and reliability workflows:
- CI/CD release gate demo
- monitoring and alerting summary
- service health dashboard summary
- incident report output
- incident response workflow
Artifacts:
ci_release_gate/release_gate_result.jsonci_release_gate/release_gate_report.mdmonitoring_alerting/alert_summary.jsonmonitoring_alerting/alert_policy.mdmonitoring_alerting/service_health_dashboard.mdincident_reports/incident_001.jsonincident_reports/incident_001.mddocs/incident_response_workflow.md
These artifacts show how KubePulse converts validation results into rollout gates, alerts, and incident reports.
KubePulse includes service-level objective artifacts for SRE and platform workflows:
service_level_objectives/slo_report.mdservice_level_objectives/error_budget_policy.mdservice_level_objectives/burn_rate_alerts.md
Example SLO output:
{
"availability": 99.92,
"error_budget_remaining": 63,
"release_decision": "block"
}These artifacts map rollout decisions to availability, error-budget, burn-rate, latency and recovery-window signals.
KubePulse includes product-style reliability views for validation data and rollout operations.
Artifacts:
dataset_sla/dataset_sla_report.jsondataset_sla/dataset_sla_report.mdproduct_dashboard/rollout_dashboard.jsonproduct_dashboard/rollout_dashboard.mdproduct_dashboard/product_summary.mdpipelines/export_product_dashboard.py
Dataset SLA tracks:
- freshness
- completeness
- pipeline latency
- failed jobs
Product dashboard tracks:
- rollout count
- approved releases
- blocked releases
- rollback-required releases
- incident categories
- time to detect
Example output:
{
"availability": 99.92,
"error_budget_remaining": 63,
"rollout_count": 12,
"blocked_releases": 4,
"mean_time_to_detect_seconds": 18
}